今天就跟大家聊聊有关Java中如何使用this和static关键字,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
构造方法是创建 Java 对象的重要途径,通过 new 关键字调用构造器时,构造器也确实返回该类的对象,但这个对象并不是完全由构造器负责创建。创建一个对象分为如下四个步骤:
1.分配对象空间,并将对象成员变量初始化为0或空;
2.执行属性值的显式初始化;
3.执行构造方法;
4.返回对象的地址给相关的变量。
this 的本质就是“创建好的对象的地址”!
由于在构造方法调用前,对象已经创建。
因此,在构造方法中也可以使用 this 代表”当前对象“。
在程序中产生二义性之处,应使用this来指明当前对象;
普通方法中,this 总是指向调用该方法的对象;
构造方法中,this 总是指向正要初始化的对象。
注意
使用 this 关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。
this 不能用于 static 方法中。
package com.bigdataBC.demo; public class Student { int id; String name; int score; public Student() { } public Student(int id, String name) { System.out.println("正在初始化已经创建好的对象:"+this); this.id = id; this.name = name; } public void stu_info(){ //加不加this都一样,这种情况可以省略 System.out.println("学生姓名:"+this.name+"\n"+"成绩为"+score); } public static void main(String[] args) { Student student = new Student(001,"张三"); System.out.println("打印“张三”这个学生对象:"+student); student.stu_info(); } }
>> 正在初始化已经创建好的对象:com.bigdataBC.demo.Student@1b6d3586 打印“张三”这个学生对象:com.bigdataBC.demo.Student@1b6d3586 学生姓名:张三 成绩为0 Process finished with exit code 0
package com.bigdataBC.demo; public class Student { int id; String name; int score; Student() { System.out.println("正要初始化一个student对象"); } Student(int id, String name) { this(); //用来调用无参构造方法,注意必须位于第一行 /* 使用Student();是无法调用的,必须this(); */ /* 下面这两个指向的是成员变量 */ // 用于区分了成员变量和局部变量.这种情况占了this使用情况大多数! this.id = id; this.name = name; /* 这里不用this.var的话就都只是指向局部变量而不是成员变量 */ id=888; name="李四"; } Student(int id,String name,int score){ this(id,name); //调用带参的构造方法,也必须位于第一行 this.score=score; } void stu_info(){ //加不加this都一样,这种情况可以省略 System.out.println("学生姓名:"+this.name+"\t"+"成绩:"+score); } void print_stu(){ System.out.println("打印学生基本信息:"); this.stu_info(); //调用本类中的方法 } public static void main(String[] args) { Student student = new Student(001,"张三",700); student.print_stu(); } }
看结果便一目了然了,嘿嘿!
>> 正要初始化一个student对象 打印学生基本信息: 学生姓名:张三 成绩:700
在类中,用static声明的成员变量为静态成员变量,也称为类变量。类变量的生命周期和类相同,在整个应用程序执行期间都有效。
特点
为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化。
对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象共享!
一般用“类名.类属性/方法”调用。(也可以通过对象引用或类名(不需要实例化)访问静态成员。)
在static方法中不可直接访问非static的成员。
package com.bigdataBC.demo; public class Student { int id; String name; //静态变量 static String address="北京"; public Student(int id, String name) { this.id = id; this.name = name; } public void test(){ System.out.println("学生姓名:"+name); } //静态方法 public static void static_test(){ /** * 该静态方法中调用非静态成员,编译就会报错 * * 比如上面test()方法中的System.out.println("学生姓名:"+name); * 在这里就会报错,因为name是非静态变量 * * 再比如调用test()方法,来个test(); 显然也会报错,因为test是非静态方法 */ System.out.println("学生地址:"+address); } public static void main(String[] args) { Student student = new Student(001,"张三"); student.test(); //静态成员可以直接使用"类名.类属性/方法"调用 Student.static_test(); Student.address="上海"; Student.static_test(); } }
>> 学生姓名:张三 学生地址:北京 学生地址:上海 Process finished with exit code 0
构造方法用于对象的初始化!静态初始化块,用于类的初始化操作!在静态初始化块中不能直接访问非static成员。
静态初始化块执行顺序
上溯到 Object 类,先执行 Object 的静态初始化块,再向下执行子类的静态初始化块,直到类的静态初始化块位为止。
构造方法执行顺序和此顺序一样
package com.bigdataBC.demo; public class Student { int id; String name; //静态变量 static String address; //静态块 static { System.out.println("执行类的初始化工作"); address="北京"; static_test(); } //静态方法 public static void static_test(){ System.out.println("学生地址:"+address); } public static void main(String[] args) { Student student = new Student(); } }
>> 执行类的初始化工作 学生地址:北京 Process finished with exit code 0
看完上述内容,你们对Java中如何使用this和static关键字有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。