今天就跟大家聊聊有关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关键字有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4630626/blog/4644592