java对象创建的过程以及this和 static关键字

在这里插入图片描述
更正:2.(显式初始化)

this的本质是:创建好的对象的地址。

this最常用的用法

1. 在程序中产生二义性之处,应使用this来指明当前对象。普通方法中,this总是指向调用该方法的对象。构造方法中,this总是指向正要初始化的对象。
2. 使用this关键字调用重载的构造方法,避免相同的初始化代码,但只能在构造方法中用,并且必须位于构造方法的第一句。
3. this不能用于static方法中。

下面的代码段示例:

package mypractice04;
public class TestThis {
     int a,b,c;
     
     TestThis(int a,int b)
     {
           this.a=a;
           this.b=b;
           System.out.println("hello "+this);//在构造方法中的this指象即将初始化的对象
     }//有了this就代表的是这个类的a而不是这个构造方法内部的a
     
     TestThis(int a,int b,int c)
     {
           //this.a=a;
           //this.b=b;
           this(a,b);//上面已经写了一个构造函数,因此这里直接用this可以进行,
           //调用构造器的语句this必须位于这个构造器的第一句
           //并且在static方法里不能调用this
           this.c=c;
     }//使用this调用重载的构造方法,且是在构造方法中
     
     void sing()
     {
           System.out.println(this.a+" stop playing ");
           //一个普通的成员方法中this指向调用此方法的对象
     }
     
     void eat()
     {
           //this.sing();
           sing();//默认调用的事本类中的sing方法,因此也可以写成this.sing();
           System.out.println("go home and eat");
     }
     
     public static void main(String[] args)
     {
           TestThis hi=new TestThis(2,3);//由于参数的区别就调用了有两个参数的构造函数
           System.out.println("this is "+hi);//
           hi.eat();
           
     }
}

运行结果:
在这里插入图片描述
static关键字:
在一个类中,用static声明的成员变量是静态成员变量,也称为类变量。类变量的生命周期和类相同,在整个应用程序执行期间都是有效的。
static修饰的成员变量和方法,从属于类,而普通的成员变量,从属于对象。

所以在静态方法里面可以调用静态方法,使用静态变量,但不能调用非静态方法。
反过来,在非静态方法调用静态方法是没问题的,这是因为内存分配和代码执行过程的问题 。
所以结合上面的this关键字,this是代表的对象,因此不能用在static方法中。

静态初始化块

我们知道构造方法是用于对象的初始化,而静态初始化块,是用于类的初始化操作,在静态初始化中不能直接访问非static成员。

package mypractice04;
public class User {
     int id;
     String name;
     String pwd;
     static String company;
     
     static//静态初始化块
     {
           System.out.println("类的初始化工作执行");
           company="NLP";
           printCompany();
     }
     
     public static void printCompany()
     {
           System.out.println(company);
     }
     
     public static void main(String[] args)
     {
           User me=null;//事实上没有对新对象进行任何初始化操作。
     }
}

在方法里面可以有一块用大括号括起来的语句块,只是没有起任何名字
在前面加上static关键词之后就叫做静态块。

可以看到即便没有对对象进行初始化操作,还是有运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值