构造函数:
1. 函数名和类名相同,不用定义返回值类型、没有具体的返回值
2. 其实就是在创建对象时调用的函数,创建对象都必须经过构造函数初始化
3. 当使用自定义构造函数的时候,必须在写一个默认的构造函数
构造函数和普通函数区别:
1. 构造函数是在对象创建时进行调用,对对象进行初始化
2. 普通函数是在对象创建后,需要该函数时才进行调用
3. 构造函数仅在对象创建时调用一次
4. 普通函数可以重复的调用
5. 构造函数可以调用普通函数,而普通函数不能调用构造函数
6. 构造函数可以写return, 但是注意不要写return value;
什么时候使用构造函数:
在描述事物时,该事物一存在就具备了一些内容,这些内容都定义在构造函数中
构造函数重载:
和普通函数重载同,即函数的参数个数或者类型不同,函数名完全相同
重写:
函数名和参数个数及类型完全相同,具体实现内容不同
this关键字:
1. 当成员变量和局部变量重名,可以使用this关键字来区分
2. 本质上:this就代表对象(当前对象),即this就是所在函数所属对象的引用
简单而言,就是哪个对象调用this所在的函数,this就代表哪个对象
3. this关键字也用于在构造函数中调用其他的构造函数
注意:只能定义在构造函数的第一行,因为初始化动作要先执行
Static关键字:
1. 数据被static修饰之后,数据将保存在堆内存中。
2. 在类中,所有对象共享的数据,一般初始化为静态数据
3. 静态数据在对象实例化之前就已经初始化在堆内存里面了。即随着类的加载而初始化
4. Static修饰的成员被所有对象共享
5. Static优先于对象存在,因为static的成员随着类的加载就已经存在了
6. Static修饰的成员可以被对象调用,也可以被类名直接调用(类名.静态成员)
7. Static修饰的数据是共享数据,对象中存储的是特有数据
成员变量&实例变量&静态变量:
1. 成员变量也叫做实例变量;静态变量也叫做类变量
2. 成员变量随着对象的存在而存在,随着对象的消亡而消亡;
3. 静态变量随着类的加载而存在,随着类的消失而消失
4. 成员变量只能被对象调用,静态变量既可以被对象调用也可以被类调用(强烈不推荐
使用对象调用,因为静态成员先于对象存在)
5. 成员变量数据存储在堆内存的对象中,因此也叫做对象的特有数据
6. 静态变量数据存储在共享数据区,所以也叫对象的共享数据。
内存分类:本地方法区、寄存器、共享数据区(方法区)、堆、栈
静态方法只能访问静态成员(成员变量和成员方法),非静态方法既可以访问静态成员也能访问非静态
静态方法中不可以使用this或者super关键字,因为静态方法是由类名调用的,不依赖于对象,因此不能使用this,而构造方法是非静态的,因此不能使用super关键字
主函数:
1. 主函数是静态的
2. 主函数特殊之处:格式固定、被jvm虚拟机所识别和调用
3. 主函数是public,权限必须是最大的
4. 主函数必须是static,因为主函数不需要由对象来调用
4. 主函数必须是void,没有具体的返回值
5. Main:函数名,不是关键字,只是一个jvm识别的固定的名字
6. String[] args:args是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型。
什么时候使用static修饰符?
1. 静态变量:当分析对象中所具备的值都是相同的,则这个成员就可以被静态修饰。只要数据在
对象中是不同的,就是对象的特有数据,必须存储在对象中,是非静态的;如果是相同的数据,
对象不需要修改,只需要使用即可,不需要存储在对象中,定义成静态的。
2. 静态函数:函数是否用静态修饰,只参考一点,该函数功能是否有访问到对象的特有数据。简
单点说,从源代码看,该功能是否需要访问非静态成员,如果需要,该功能就是非静态的;如
果不需要,就可以将该功能定义成静态的,当然,也可以定义成非静态,但是非静态需要被对
象调用,而仅创建对象访问非静态方法没有访问特有数据的方法,该对象的创建时没有意义的。
静态代码块:
1. 随着类的加载而执行,而且只执行一次(注意:类只加载一次,即使执行两次创建对象,也不会
执行两次,因为只加载一次)
2. 作用:用于给类进行初始化
3. 例如
class StaticCode
{
static int age = 0;
static {
age = age + 20;
}
static void show()
{
System.out.println(age);
}
}
class StaticCodeDemo
{
public static void main(String[] args)
{
StaticCode.show();
}
}
静态代码块使用比较少,一般在类中全是静态成员的时候可能会需要静态代码块。
构造代码块:
1. 定义在类中没有被static修饰的代码块,即为构造代码块
2. 与静态代码块不同,构造代码块可以给所有对象进行初始化,每次创建对象都会执行,在调用构造方法之前执行;注意与构造方法的差别,构造方法是用来给对应的对象进行针对性的初始化。
局部代码块:
1. 定义在方法中
2. 用于限定局部变量的生命周期
7. JavaSE-构造函数 & this & static关键字