学习 JAVA 第五天 ---- 初始化与清理

本贴最后更新于 2589 天前,其中的信息可能已经渤澥桑田

关于想法

最近可能因为小宝宝要出生,总是有点心神不宁,看书的时候效率也没那么高了,敲这行字的时候,老婆把手伸到衣领子里面.

又定了个决定:

下个月开始(为什么下个月而不是现在,有原因的),晚上有时间不打游戏,去健身房搞事儿.

初始化与清理

讲实话,这章值得记录的真的很多,废话不多说,上干货:

构造器

定义:构造器是个什么玩意呢?构造器是为了做到在对象实例化的时候就被初始化的效果,如下


package javaLearningDemo;

class DWName{

	String name;

	{

		name = "whj";

	}

	DWName(){

		System.out.println("在DW中是static,所以只会被调用一次,所以你只能看见我一次,默认构造器初始化名字为:"+name);

	}

	DWName(String name){

		this.name = name;

		System.out.println("在DW中是static,所以只会被调用一次,所以你只能看见我一次,默认构造器初始化名字为:"+this.name);

	}

}

class DW{

	DWName firstName = new DWName("hahaha");

	int height;

	DW(DWName name,int height){

		this.name = name;

		System.out.println("定义了name和height"+name.name+height);

	}

	DW(){

		System.out.println("如果没有构造方法,那么默认会有一个无具体操作的无传参默认构造器,但是一旦如果有带传参的构造器,如果没有显式默认构造器,那么实例化必须带参数");

	}

	static DWName name = new DWName();

}

public class staticInitDemo {

	public static void main(String[] args) {

		System.out.println(secondDW.name.name);

		System.out.println("你第一个看见的不是我,一定是DW,因为在一个类中,实例初始化优先级最高,并且,静态的比非静态的优先级高");

	}

	// DW firstDW = new DW(new DWName(),12);

	static DW secondDW = new DW(new DWName("lalala"),14);

	static DW thirdDW = new DW();

}

输出:


在DW中是static,所以只会被调用一次,所以你只能看见我一次,默认构造器初始化名字为:whj

在DW中是static,所以只会被调用一次,所以你只能看见我一次,默认构造器初始化名字为:lalala

在DW中是static,所以只会被调用一次,所以你只能看见我一次,默认构造器初始化名字为:hahaha

定义了name和heightlalala14

在DW中是static,所以只会被调用一次,所以你只能看见我一次,默认构造器初始化名字为:hahaha

如果没有构造方法,那么默认会有一个无具体操作的无传参默认构造器,但是一旦如果有带传参的构造器,如果没有显式默认构造器,那么实例化必须带参数

lalala

你第一个看见的不是我,一定是DW,因为在一个类中,实例初始化优先级最高,并且,静态的比非静态的优先级高

从构造器角度来看,有如下注意点:

1. 如果没有构造器,那么会有一个默认构造器(无传参),如果有构造器,那么如果没有显式的默认构造器的话,那么初始化的时候必须要带传参,否则错误

2. 构造器可重载

3. 构造器仅在对象实例化的时候会调用,如下


class DW{

	DW(){

	print("well");

	}

	static void do(){

	print("Just do it");

	}

}

void main(){

	DW.do();

}

//仅仅打印Just do it

重载

重载不多说,大家也都知道的,所以仅做如下注意点记录:

1. 重载的作用是为了实现同一个方法名处理不同的传参类型

2. 重载的区分方法是传参类型差异

3. 切记重载不可以由返回值区分

4. 重载传参可以为可变参数,但是最好不要这样,因为可变参数支持无参,那么若有三个重载传参都是单纯的可变参数,那么不传参的调用方式就不知道调用的是哪个方法了.

this 指针

首先 this 指针的意思是调用方法的对象.

需要注意如下几点:

1. 想要在构造其中调用构造器(代码复用),可以用 this(传参)

2. 上述方法注意:在构造器中调用构造器的时候,只能存在一次,并且调用必须在这个构造器的顶端,否则报错.

3. 除了在类的构造器中使用 this 调用其它构造器。否在则一个类中的其它地方不可以调用构造器

初始化

成员初始化

首先,什么叫做初始化,初始化是指在创建一个类的实例的时候,不仅要有这个类的空间,还得存在这个类的"空白状态"(无构造函数的情况).

那么如果一个对象没有初始化的话,他被声明后其实只是一个 null

他的注意点如下:

指定初始化

即在定义成员变量的时候直接赋值

构造器初始化(** 重点 **)

初始化顺序:

1. 按照变量定义的先后执行初始化

2. 任何方法或构造器中,都是初始化方法先执行,详情见上面的示例代码

静态方法的初始化

1. 静态对象 A 属于某个对象 B 的时候,仅当 B 初始化的时候,A 才会被初始化,并且切记,只会被初始化一次,见上面的示例

2. 在对象中,对象初始化的顺序遵循先静态后非静态

显式的静态初始化


public class DW{

  static int i;

  static {

  i = 47;

  }

}

  • 日记
    65 引用 • 274 回帖 • 1 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...