this关键字
this表示该类的一个引用,或者该类的一个对象,this代表哪个对象呢?哪个对象调用该方法,那么该方法中的this就代表这个调用者。
class Person{
private int age;
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
}
setAge中参数要做到见名之意的情况下会跟本来的类属性age重复,所以为了区分成员变量(实例对象)和局部变量,用this.age来表示成员变量的age。
构造函数
- 类是一个抽象概念,要使用类,必须完成类的初始化,我们new。
- 构造方法,我们要完成类的实例化,其实要使用new关键字来调用构造方法对类进行实例化。
- 构造方法:他的方法名和类名相同,没有返回值类型,连void也没有。
- 我们自己定义的类,默认存在一个空参的构造方法。
- 一旦你在类中,自己手动定义了有参构造,那么默认无参构造就不存在了。如果你还想用空参构造,建议你把空构造函数手动写出来。
创建对象的步骤
Student s=new Student();
步骤:
- 1)加载Student.class文件进内存
- 2)在栈内存为s开辟空间
- 3)在堆内存为学生对象开辟空间
- 4)对学生对象的成员变量进行默认初始化
- 5)对学生对象的成员变量进行显式初始化
- 6)通过构造方法对学生对象的成员变量赋值
- 7)学生对象初始化完毕,把对象地址赋值给s变量·
static关键字
- static静态的,可以修饰成员变量,修饰变量,此变量为一个共享变量,被该类所有的对象所共享。
- 被static所修饰的成员是随着类的加载而加载,是优先于对象存在。
- 也可以修饰成员方法。
- jdk1.7之前,静态变量是存在方法区的,从1.7开始到1.7之后,静态变量存在堆内存。
- 静态成员属于类,建议通过类名直接调用, 不需要使用对象调用,当然你使用对象调用可以 ,但是不推荐。
- 静态成员属于类,所以静态变量,也称之为类变量。
注意:
- 静态方法中,只能访问到静态成员,访问不到非静态成员。(被静态所修饰的成员,是随着类的加载而加载,是优先于对象而存在),即先有的访问不到后来才有的。
- 非静态方法中,既可以访问静态的,也可以访问非静态的。
- 静态方法中不能存在this关键字,this代表一个对象,是后来才有的,静态方法里面访问不到。
代码块
-
代码块:就是被一对括号括起来的代码,根据代码块定义的位置不同,分为局部代码块,构造代码块,静态代码块,同步代码块。
-
局部代码块:定义在方法中的代码块。在方法中出现:限定变量生命周期,及早释放,提高内存利用率。
public class MyTest { public static void main(String[] args) { { int num=20; System.out.println("局部代码块"); } } }
-
构造代码块:定义在类中,方法外。
public class MyTest { { System.out.println("构造代码块执行了!"); } public MyTest(){ System.out.println("空参构造执行了!"); } }
构造代码块,是每次创建对象时,都会执行,而且优于构造方法先执行。
-
静态代码块:定义在类中方法外,使用了static修饰的代码块。静态代码块随着类的加载而加载。只加载一次。静态代码块只能访问静态成员。
public class MyTest { static { System.out.println("静态代码块执行了!"); } public MyTest(){ System.out.println("空参构造执行了!"); }
}
```