首页 > 其他分享 >this关键字

this关键字

时间:2022-09-23 09:22:33浏览次数:43  
标签:name 构造方法 no int void 关键字 public

this关键字

1、this是一个关键字,全部小写
2、this是什么?在内存方面是怎么样的?
一个对象一个this
this是一个变量,是一个引用。this保存当前对象的内存地址,指向自身。
所以,严格意义上来说,this代表的就是“当前对象”。
3、this只能使用在实例方法中,不能用在静态方法中。,谁调用这个实例方法,this就是谁。所以this代表的是当前的对象。
4、"this."大部分情况下是可以省略的;

只要负责调用的方法a和被调用的方法b在同一个类当中,”this.“可以省略,”类名.“也可以省略

为什么this不能使用在静态方法中?

this代表当前对象,静态方法中不存在当前对象

public class ThisTest01 {
    public static void main(String[] args) {
        Customer c1 = new Customer("张三");
        c1.shopping();  //c1是局部变量
        Customer c2 = new Customer("李四");
        c2.shopping();  //c2也是局部变量

        Customer.dosome();

    }
}

//顾客类
class Customer{
    //属性
    //实例变量
    String name;

    //构造方法
    public Customer(){}
    public Customer(String s){
        name = s;
    }

    //顾客购物的方法
    //实例方法,需要先创建对象才能调用
    public void shopping(){
        //这里的this是谁?this是当前对象
        //c1调用shopping(),this是c1
        //c2调用shopping(),this是c2

        //this如果写成c1或c2,程序报错,因为c1和c2在主方法里,是局部变量,在这里不能用
        //"this."可以省略不写
        //"this."用在实例方法中,代表的就是当前对象。省略的话,还是默认访问“当前对象”的name
        System.out.println(this.name + "正在购物!");
    }

    public static void dosome(){
        //this代表的是当前对象,而静态方法的调用不需要对象。二者矛盾了。
        //所以静态方法不允许用this
        //System.out.println(this);
    }
}

this什么时候不能省略?

在实例方法中,或构造方法中,为了区分局部变量和实例变量,这种情况下,"this."是不可以省略的

public class ThisTest02 {
    public static void main(String[] args) {
        Student s = new Student();
        s.setName("张三");
        s.setNo(111);
        System.out.println(s.getName());
        System.out.println(s.getNo());

        Student s2 = new Student(2222,"李四");
        System.out.println("学号:" + s2.getNo() );
        System.out.println("姓名:" + s2.getName());

    }
}
    //学生类
    class Student{
        //学号
        private int no;
        //姓名
        private String name;
        //构造方法
        public Student(){

        }
        public Student(int no,String name){  //就近原则
            //no = no;  //这两个no都是局部变量no,和实例变量no没有关系
            //name = name;  //这两个name都是局部变量name,和实例变量name没有关系
            //no是局部变量,
            //this.no是实例变量
            this.no = no; //this表示当前对象的no, "this."的作用是---区分局部变量和实例变量
            this.name = name;
        }

        public void setNo(int no){
            this.no = no;
        }
        public int getNo(){
            return no;
        }
        public void setName(String name){
            this.name = name;
        }
        public String getName(){
            return name;
            //getName()实际上获取的是当前对象的名字,
            //严格来说,这里是有一个 this. 的 ,只不过这里可以省略
        }

    }

this用在构造方法中

1、this除了可以用在实例方法中,也可以用在构造方法中。
2、新语法:通过当前的构造方法去调用另一个本类的构造方法,可以使用以下语法格式:
this(实际参数列表):
通过“构造方法1”,去调用"构造方法2",可以做到代码复用。
注意:
"构造方法1"和"构造方法2"都是在同一个类中
3、Q:this() 这个语法的作用是什么?
A:代码复用

4、"this()" 在一个构造方法里只能写一行,并且只能写在构造方法的第一行。

public class ThisTest03 {
    public static void main(String[] args){
        Date d = new Date();
        d.detail();
        Date d1 = new Date(2008,8,8);
        d1.detail();

    }
}

class Date{
    private int year;
    private int month;
    private int day;

    public Date(){
        /**
         * this.year = 1970;
         * this.month = 1;
         * this.day = 1;
         */
        this(1970,1,1); //调用当前类的另一个和他功能相同的构造方法
    }

    public Date(int year,int month,int day){

         this.year = year;
         this.month = month;
         this.day = day;


    }

    public void setYear(int year){
    this.year = year;
}
    public int getYear(){
       return year;
    }
    public void setMonth(int month){
        this.month= month;
    }
    public int getMonth(){
        return month;
    }
    public void setDay(int day) {
        this.day = day;
    }
    public int getDay() {
        return day;
    }
    public void detail(){
        System.out.println("年:" + getYear() + "月:" + getMonth() + "日:" + getDay());
    }


}

标签:name,构造方法,no,int,void,关键字,public
From: https://www.cnblogs.com/sevenxx/p/16721549.html

相关文章

  • JavaScript 的“this”关键字解释和揭秘
    JavaScript的“this”关键字解释和揭秘这这个关键字是一把双刃剑——它可能是复杂错误的来源——一旦你知道它是如何工作的,它也可以让你作为开发人员的生活更轻松。这......
  • static关键字
    static为编程语言中的一个关键字,是一种修饰符,既可以修饰变量也可以修饰方法在类中,用static声明的成员变量为静态成员变量,也称之为类变量,类变量的生命周期和类相同,在整个......
  • 有关static关键字的探究
    static为编程语言中的一个关键字,是一种修饰符,既可以修饰变量也可以修饰方法在类中,用static声明的成员变量为静态成员变量,也称之为类变量,类变量的生命周期和类相同,在整个应......
  • 【Java基础】关键字:interface
    1.interface说明Java中不支持多继承,但有时必须从几个类中派生出一个子类,继承它们所有的属性和方法,使用interface达到多重继承的效果。interface:接口,定义一组规则,是“能......
  • linux cat查询关键字
    cd/usr/local/tomcat/logs1、grep‘字符串’这是最普通的使用方式:匹配文件中包含MANPATH的那一行:catmanpath.config|grep'MANPATH'2、grep-v‘字符串’......
  • 17.explicit关键字
    c++提供了关键字explicit,禁止通过构造函数进行的隐式转换。声明为explicit的构造函数不能在隐式转换中使用。[explicit注意]●explicit用于修饰构造函数,防止隐式转化。......
  • 【Java基础】关键字:static
    1.static说明我们希望某些数据在内存空间中只有一份,比如Chinese类,每个对象都共享countryName这个变量,而不用在每个实例变量中单独放一个countryName的变量。那么就可以用s......
  • static关键字简析
    首先是惯例的美图时间+——+——+——+——+——+——+——+——+——+——+——+——+——+——+——+——+——+——+——+——+——+——+——+——+——+——+——+—......
  • Java的 static关键字
    通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法   声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法。 · 它们只......
  • swift都有哪些关键字
    var和let、变量常量final、修饰的类变量函数不能继承和重写,修饰的函数为直接派发struct和enum和class、结构体和枚举为值类型,类为引用类型override、重写deinit、反初......