1,this关键字
this代表对象,用于所属对象的引用。哪个对象在调用this所在函数,this就代表哪个对象。
一般的,如果功能内部用到了调用该功能的对象,可以用this表示。另外,this语句还可以用于构造函数间的调用。
this+"." 调用成员数学和成员方法;
this+"()"调用本类对应参数的构造函数;
注:用this调用构造函数,必须定义在构造函数的第一行。因为构造函数是用于初始化的,所以初始化动作一定要执行。否则编译失败。
2,Static关键字
1,想要实现对象中的共性数据的对象共享。可以将这个数据进行静态修饰。
2,被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了一种调用方式。类名.静态方式。
3,静态随着类的加载而加载。而且优先于对象存在。
3,static修饰静态成员变量和静态成员函数。
1,成员变量:数据共享时设置共享数据静态化。
注:成员变量和静态成员变量的区别:
成员变量是对象特有的数据,同一对象不同成员可有不同数据。静态变量为对象共享数据,即同一对象不同成员数据共享,或者相同。
成员变量属于对象,也是实例变量;静态变量属于类,也称为类变量
成员变量存于堆内存;静态变量存在方法区
成员变量随着对象创建存在,对象回收消失;成员变量随着类加载而存在,随着类消失而消失
成员变量只能被对象调用,也可以被类名调用
Demo:
1 package com.hpioneer.Demo; 2 3 public class Test_Person { 4 public static void main(String[] args) { 5 SPerson p1 = new SPerson(); 6 p1.name = "AA"; 7 p1.nation = "中国"; 8 System.out.println(p1.toString()); //AA 中国 9 10 SPerson p2 = new SPerson(); 11 p2.name = "MM"; 12 //p2.nation = "美国"; 13 System.out.println(p2.toString());//MM 中国 14 15 SPerson.nation = "美国"; 16 System.out.println(SPerson.nation); //美国 17 } 18 19 20 } 21 class SPerson{ 22 String name; 23 static String nation = "中国"; 24 25 @Override 26 public String toString() { 27 return "SPerson{" + 28 "name='" + name + '\'' + 29 ", nation="+nation 30 ; 31 } 32 }
2,成员函数:方法中没有调用特有的数据便可设置为静态。先加载静态代码块,而且只执行一次,如果和主函数在同一类中,优先于主函数执行。
静态代码块:一个有静态关键字标示的一个代码块区域。在类中定义。
Demo:
1 package com.hpioneer.Demo; 2 3 public class JavaTest { 4 5 static { 6 System.out.println("Demo2_Student静态代码块"); 7 } 8 9 public static void main(String[] args) { 10 System.out.println("我是main方法"); 11 12 Student s1 = new Student(); 13 Student s2 = new Student(); 14 Student s3 = new Student(); 15 } 16 } 17 18 class Student{ 19 static 20 { 21 System.out.println("Student 静态代码块"); 22 } 23 { 24 System.out.println("Student 构造代码块"); 25 } 26 public Student(){ 27 System.out.println("Student 构造方法"); 28 } 29 }
静态代码块、构造代码块、构造函数同时存在时的执行顺序:静态代码块 --> 构造代码块 --> 构造函数;
4,main关键字
用于定义主函数。主函数为该类是否能够独立运行的判定,是程序的入口,被JVM调用。