构造函数
- 作用:
给对应的对象进行初始化 - 格式;
修饰符 函数名(形式参数列表){
初始化的语句;
}
- 注意的细节:
- 没有返回值类型
- 构造函数的函数名必须要与类名一致
- 构造函数并不是由我们手动调用的,构造函数是在创建对应对象的时候由jvm主动调用的(每创建一个对象就会调用一次构造函数)
- 如果一个类没有显示添加一个构造函数,那么java编译器会为该类添加一个无参的构造函数
- 如果一个类已经显示添加一个构造函数,那么java编译器就不会再为该类添加一个无参的构造函数
- 构造函数是可以以函数重载的形式存在多个的
构造代码块
给所有的对象进行统一的初始化
- 格式:
{
初始化语句;
}
类型:
- 构造代码块
- 位于成员位置上
- 局部代码块
- 位于方法之内(几乎没有人使用)
- 静态代码块
注意细节
- 构造函数的代码是位于成员变量的显示初始化语句、构造代码块语句之后执行的
- 成员变量的显示初始化语句与构造代码块的语句的先后执行顺序是按照当前代码的顺序执行的
- 成员变量的初始化语句和构造代码块的代码其实是在构造函数中完成的
this关键字
- this关键字代表的是所属函数的调用着对象
作用:
- 一个类存在着同名的成员变量与局部变量时,在方法内部默认是访问局部变量的数据,我们可以通过this关键字来访问成员变量
- this关键字可以在构造函数中调用其他的构造函数初始化对象使用。
this关键字注意的细节:
1.如果在一个函数中访问一个成员变量,而且没有存在同名的局部变量时,那么Java编译器会默认在变量的前面加this关键字
2.this关键字调用其他构造函数时,this语句必须位于构造函数中的第一个语句
3.this关键字调用构造函数的时候不能出现相互调用的情况,因为是一个死循环的调用方式
static(静态):修饰符
静态数据是优先与对象而存在的
成员变量使用static修饰,那么该数据会进行方法区内存中,而且只会存在一份数据
使用方法:
- 只需要使用static关键字修饰该成员变量就可以将数据移动到数据共享区中
- static修饰成员变量:
-
如果一个数据需要被所有对象共享使用的时候,那么即可使用static修饰成员变量
String name;//非静态成员变量 static String county = “中国”;//静态成员变量
-
访问方式:
- 可以使用对象进行访问。格式:对象.静态属性名
- 可以使用类名进行访问, 格式:类名.属性名
推荐使用:类名进行访问
注意细节
1.静态的成员变量可以使用类名或者是对象进行访问
2.非静态的成员变量只能使用对象进行访问,不能使用类名进行访问
3.千万不能为了方便访问而使用static修饰一个成员变量,只有这个成员变量需要被共享的时候才使用static修饰
- static修饰成员函数:
访问方式:
- 可以使用对象进行访问。格式:类名.函数名();
- 可以使用类名进行访问。格式:类名.函数名();
注意细节
1.非静态的函数只能使用对象调用,不能使用类名调用
2.静态函数可以直接访问静态的成员(函数与成员变量),但是不能直接访问非静态的成员
原因:静态函数可以使用类名调用,而这时候对象可能还没有存在内存中,所以非静态数据也就不在内存中,所以不能访问。
3..非静态函数可以直接访问静态以及非静态成员。
原因:非静态函数必须要由对象调用,如果对象存在了静态数据以及非静态数据早就存在内存中了。
4.静态函数不能出现this以及super关键字
原因:因为静态函数可以使用类名直接调用,而这时候可能还没有对象存在,this又代表当前对象。
非静态的成员变量与静态的成员变量的区别
- 数量上的区别:
1.(n份)非静态成员变量是在每个对象中都维护一份数据
2.(1份)静态成员变量只会在方法中维护一份数据 - 调用(访问方式)的区别:
1.非静态的成员变量只能使用对象进行访问
2.静态的成员可以使用对象、类名进行访问 - 存储位置上的区别:
1.非静态成员变量是存储在堆内存中
2.静态成员变量是存储在方法中 - 生命周期的区别:
1.非静态成员变量是随着对象的创建而存在,随着对象的消失而消失的。
2.静态成员变量是随着类文件的加载而而存在,随着类文件(字节码文件)的消失而消失的 - 作用上的区别:
1.非静态成员变量的作用是用于描述一类事物的属性
2.静态成员变量的作用是提供一个共享数据给所有对象使用的
-
什么时候使用static修饰成员变量
当成员变量需要共享的时候 -
什么时候使用static修饰一个函数呢?
如果一个函数没有直接访问非静态成员,那么即可使用static修饰该函数(常用于工具类的方法:Arrays。。。)