this关键字
1.this是一个指向自身对象的引用变量,每一个对象都默认有一个this
2.this的作用:
①调用成员变量
this.name = name;
如果成员变量与局部变量同名时,this必须加;如果不同名,可以不加
②调用成员方法
this.shout();
shout();
因为没有完全相同的两个方法,所以this可以省略
③调用构造方法
this(name,age,sex);
注意:this(name,age,sex);必须是第一条语句
static关键字
1.静态变量 非静态变量
static String className;
静态变量是属于类的,不管有几个对象只有一份,也叫类变量
String sex;
非静态变量是属于对象的,每一个对象都有单独一份,叫实例变量(对象变量)
2.静态变量与非静态变量的联系和区别
联系:都是成员变量
区别:
①内存里的位置:
静态变量:方法区
非静态变量:堆
②份数
静态变量:只有一份
非静态变量:每个对象单独有一份
③调用的方式也不一样
静态变量:类名.变量名 Student.className
对象名.变量名 s1.className (不推荐使用)
非静态变量:每个对象但都有一份
对象名.变量名 s1.name
④作用的时间不一眼
静态变量:第一次加载类的时候,在方法区中开辟空间,这时候还没有对象
非静态变量:创建对象的时候在开辟的空间
3.静态方法
public static void showClassName(){}
作用:调用静态变量和静态方法
调用方式:Student.showClassName();
s1.showClassName(); (推荐不使用)
4.静态方法中的3不能
①静态方法中不能使用非静态变量:因为调用方法的时候可能还没有对象,所以对象的名字也不存在 System.out.println("名字:" + name);
②静态方法中不能调用非静态方法:因为调用方法的时候可能还没有对象,所以对象的方法也不存在 study();
③静态方法中不能使用this/super:因为调用方法的时候可能还没有对象,this是属于每个对象的
5.代码块
局部代码块
①位置:方法中
②个数:多个
③执行顺序:依次执行
④局部代码块中定义的变量只能在当前代码中使用
(成员)代码块
①位置:类中
②个数:多个
③执行顺序:依次执行,先于构造方法执行
④作用:没啥用。。
(匿名内部类,没有构造方法,在代码块中对成员变量初始化)
每个对象都有一份
静态代码块
①位置:类中
②个数:多个
③执行顺序:依次执行
④执行时间:加载类的时候执行,先于代码块和构造方法
⑤作用:进行全局性的初始化操作
1.数据库链接的初始化操作
2.工厂设计模式
只有唯一的一份