Java中this关键词与构造函数,构造代码块的理解

一、构造函数的理解

1.一个类的创建

public class Person {
    
    String name; //    姓名
    int age; //    年龄
    //    构造方法
    Person(String name,int age){   //两个参数的构造函数
        this.name = name; //     给对象赋予name值
        this.age = age; //    给对象赋予age值
    }
    Person(int age){     //一个参数的构造函数
        this.age = age; //    给对象赋予age值
    }
    Person(){     //无参的构造函数
    
    }
    public static void main(String[] args) {
        Person p = new Person("张三",1); //    创建了Person类型的p对象,并且调用构造方法赋予该对象属性值
        System.out.println("姓名: " + p.name + " 年龄: " + p.age); //    name = 张三, age = 1;
        //这个小孩刚出生的时候已经有了姓名和年龄
    }

以上述例子来说,在类的创建过程中包含了两个基础属性,姓名和年龄,但是都没有初始值。
类在被实例化的时候,如果没有构造函数,会自动的执行无参构造函数。。
一个类中可以有多个构造函数,会根据参数的个数自动识别执行哪个。
如上述代码中,在实例化的过程中有两个参数,所以自动执行含有两个参数的构造函数。

二、代码块的理解

代码块就是在构造函数之前运行的代码区域,只要实例化类就会自动运行的区域。

class Perosn{
    private int id;
    
    private String name;
    
    private int age;
    
    {
        happy();// 每个Person对象创建出来都会执行这里的代码
    }
    
    public Perosn(){
        happy();
    }
    public Perosn(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    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 void happy(){
        System.out.println("哈哈哈....");
    }
    
}

在上面的类中,只要被实例化都会自动执行
{ happy(); // 每个Person对象创建出来都会执行这里的代码 }
这一段代码。

三、this关键词的理解

实例化某一个类之后,类中的实例变量将被创建,在各方法中会存在相同变量名的局部变量
如果在方法内局部变量的命名与实例变量的命名相同,根据内部屏蔽外部的原则,实例变量在这个方法内暂时失效。这时如果想在该方法中使用实例变量,则需要在变量名前显示的加上"this.",用来指明此变量是实例变量。默认格式如下(前者指向的是实例变量,后者指向的是局部变量):this.变量名=变量名。

Person(String name,int age){   //两个参数的构造函数
        this.name = name; //     给对象赋予name值
        this.age = age; //    给对象赋予age值
    }

例如在这个构造函数中,this.name 指的是自己,也就是类中的实例变量。name指的是构造函数中的传入参数。

下面给一个实例变量与局部变量的改变过程的案例。

public class Test {
        String s = "Hello";
        public Test(String s) {//构造方法中的参数,与类中成员变量s重名.
           System.out.println("s = " + s);  // 输出的是HelloWorld!
            //这里的s就是传参传入的值。
           System.out.println("onethis.s = " + this.s);  //输出的是Hello
            //把参数值(局部变量)赋给成员变量,成员变量的值改变
           this.s = s;
           System.out.println("twothis.s = " + this.s);  //输出HelloWorld!
        }
        public static void main(String[] args) {
            Test x = new Test("HelloWorld!");
            //验证成员变量值的改变
           System.out.println("最后的s=" + x.s);  //输出HelloWorld!
        }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值