Java中this关键字

方法中的this,是该方法被谁调用,this就指的是谁,this指的是本对象

  1. this.属性:this可以省略,如果方法中的变量名与属性名一样时,为了区别,this不可省略
  2. this.方法:在类中的一个对象方法调用另一个对象方法时,可以用this,也可以省略,类方法中不能使用this
  3. this():this()可以用来访问本类中的构造方法

this(): 作用开辟空间,一定要先开辟空间再执行其他内容:

注意:super()和this()完全相同,

super()是调用父类的构造函数

this的作用如下:

  • this()可以访问本类中的构造方法
  • this()不能在普通的方法中使用,只能在构造方法中使用
  • this()在构造方法中使用必须时第一条语句
  • this()可以添加相应的参数,调用有参构造方法
  • 在同一个类中,两个构造方法不能通过两个this相互调用
  • 不能与super()同时使用

this的图标描述:


java中this关键字使用规则 java中this关键字的说法_开发语言

package com.oop;

public class Person {
    private String name;


    //this.属性
    public void setName(String name){
        System.out.println("setName()方法");
        this.name=name;
    }
    //this.方法
    public void sleep(){
        System.out.println("sleep()方法");
        this.setName("张三");
    }
    //this只能在对象方法中使用
    public static void Form(){
        //this.sleep()   错
        Person p=new Person();
        p.sleep();
        System.out.println(p.name);
    }

    public static void main(String[] args) {
        Form();
    }
}

this()在有参构造方法里面先调用无参构造方法:

//无参构造
    public Person1(){
        System.out.println("无参构造方法调用");
    }

    //有参构造
    public Person1(String name) {
        this();  //调用无参构造方法
        this.name = name;
    }

public static void main(String[] args) {
        Person1 p=new Person1("张三");
        System.out.println(p.name);
    }

java中this关键字使用规则 java中this关键字的说法_java_02

java中static关键字

static关键字:修饰的数据存储在我们的方法区中的静态常量池中,static可以修饰方法,变量和代码块

  1. static修饰变量:static修饰的变量就属于类变量,被所有对象共享
  2. static修饰方法:this关键字不能在static方法中使用,静态方法(内存已存在)当中不饿能够使用非静态方法(内存不存在),非静态方法可以调用静态方法
  3. static修饰代码块:主要的作用用于变量初始化,无论放在哪里,都是再main方法中运行,通过main方法加载出来

解释:只要是类属性(加了static)只有一个内存空间,不管哪个对象查看都是一样的,某一个对象对值进行了修改,则每一个访问的值都发生了变化,访问到的都是最新修改的值。

private String name;
    private int age;
    private static String from;   //只有一块内存,不管谁访问都该都是一样的

Person1 p1=new Person1("张三",20);
        Person1 p2=new Person1("李四",18);
        Person1.from="中国";
        p1.from="地址为中国";
        System.out.println(p1);
        System.out.println(p2);
//输出
//Person1{name='张三', age=20, from='地址为中国'}
//Person1{name='李四', age=18, from='地址为中国'}

static修饰代码块:变量初始化

在一个类加载的时候,先执行静态代码块在执行其他,可以用于数据的初始化

static{
        from="中国";  //类中对静态变量
        System.out.println("静态代码块");
    }
public static void main(String[] args) {
        Person1 p1=new Person1("张三",20);
        Person1 p2=new Person1("李四",18);
        //Person1.from="中国";
        //p1.from="地址为中国";
        System.out.println(p1);
        System.out.println(p2);
    }

输出
//静态代码块
//Person1{name=‘张三’, age=20, from=‘中国’}
//Person1{name=‘李四’, age=18, from=‘中国’}

Person1 p1=new Person1("张三",20);
        Person1 p2=new Person1("李四",18);
        //Person1.from="中国";
        //p1.from="地址为中国";
        System.out.println(p1);
        System.out.println(p2);
    }

输出:
//静态代码块
//Person1{name=‘张三’, age=20, from=‘中国’}
//Person1{name=‘李四’, age=18, from=‘中国’}