07-this,static,代码块
-
java的关键字:
-
this关键字 : 是指当前对象,this里存的是一个对象的引用.
-
调用属性
this.属性名
当全局变量与成员变来那个重名时,使用this来代替成员变量,如果局部变来那个和成员变来那个名称不通过,this可以省略
-
调用方法:
this.方法名
本类中可以省略this
-
调用构造函数
this(); //调用无参构造函数
this(“12”, “小花”); //调用有参构造
this的语句必须要在构造函数的第一句
-
-
static : 关键字 静态的(修饰符)
- 属性 -> 静态属性 – 类变量 定义在类中
- 方法 -> 静态方法 -->类方法
- 代码块 -->静态代码块
- 内部块 -->静态内部块
static : 修饰属性,修饰方法等在类加载到内存的时候就被一同加载到内存
使用方法:
1. 类名.属性名/方法名; 2. 对象名.属性/方法名;
注意: static方法只能使用或者调用static修饰的变量或者调用static的方法,不可以使用非static修饰的属性(成员属性),原因就是成员属性(实例变量)在堆中存储,通过调用构造方法创建对象时产生,而static的方法在类加载的时候产生,存在共享区中
在静态方法加载到内存中时还没有对象的产生,所以不能使用,非静态方法不仅可以调用非静态的属性和方法还可以调用静态的方法和属性
因为后产生的可以调用前产生的
-
public class Student {
//编写属性
private String idNum;
private String name;
private int age;
public static String city; //静态变量 /类变量
//无参构造
public Student(){
System.out.println("this="+this);
}
public Student(String idNum,String name){ //形式参数
this(); //this调用无参
this.idNum = idNum;
this.name = name;
}
//带参构造
public Student(String idNum, String name, int age, String c) {
this(idNum,name); //调方法 实际参数
this.age = age;
city = c;
}
//公有的取值赋值方法
public String getIdNum() {
return idNum;
}
public void setIdNum(String idNum) {
this.idNum = idNum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
//编写方法
public void info() {
System.out.println(this.getIdNum()+name+age+city);
}
}
-
包介绍:
- java.lang : 系统默认导入,String类保存在这个包中,所以我们使用String的时候不需要导包
- java.util : 工具包,一些常用的类库, Scanner Date
-
代码块:
-
概念: 使用{ }括起来的一段代码
-
分类: 根据位置分类:
- 普通代码块: 直接写在方法或语句中定义代码块
- 构造代码块: 直接写在类中的代码块
- 静态代码块: 使用static生命的代码块
- 同步代码块: 多线程的时候讲
-
构造代码块和构造函数的关系:
构造代码块和构造函数都是通过创建对象执行,没创建一个对象则执行一次构造代码块和构造方法,且构造代码块优先于构造方法执行
-
代码块的执行顺序流程:
- 静态代码块 --> 加载一次
- 构造代码块 --> 每创建一个对象执行一次
- 构造方法 --> 每创建一个对象执行一次
-
public class DemoBlock {
static String city;
public DemoBlock(){
System.out.println("--------------构造方法-----------------------");
}
{
System.out.println("我就是传说中的构造代码块.....");
}
static{
city = "大北京";
System.out.println(city);
System.out.println("==============我是静态代码块================");
}
public static void main(String[] args) {
DemoBlock db = new DemoBlock();
DemoBlock db1 = new DemoBlock();
DemoBlock db2 = new DemoBlock();
DemoBlock db3 = new DemoBlock();
//[1]普通代码块
/* { //定义在方法中的代码块
int age = 12;
System.out.println("age="+age);
}
for(int i =1;i<=10;i++){
{//定义在for循环语句中的代码块
int age = 20;
System.out.println("age="+age);
}
}*/
}
}