Java中this关键字
方法中的this,是该方法被谁调用,this就指的是谁,this指的是本对象
- this.属性:this可以省略,如果方法中的变量名与属性名一样时,为了区别,this不可省略
- this.方法:在类中的一个对象方法调用另一个对象方法时,可以用this,也可以省略,类方法中不能使用this
- this():this()可以用来访问本类中的构造方法
this(): 作用开辟空间,一定要先开辟空间再执行其他内容:
注意:super()和this()完全相同,
super()是调用父类的构造函数
this的作用如下:
- this()可以访问本类中的构造方法
- this()不能在普通的方法中使用,只能在构造方法中使用
- this()在构造方法中使用必须时第一条语句
- this()可以添加相应的参数,调用有参构造方法
- 在同一个类中,两个构造方法不能通过两个this相互调用
- 不能与super()同时使用
this的图标描述:
![image-20220511194450929](https://i-blog.csdnimg.cn/blog_migrate/9fc5158ef084b64eace6a002b224d61d.png)
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中static关键字
static关键字:修饰的数据存储在我们的方法区中的静态常量池中,static可以修饰方法,变量和代码块
- static修饰变量:static修饰的变量就属于类变量,被所有对象共享
- static修饰方法:this关键字不能在static方法中使用,静态方法(内存已存在)当中不饿能够使用非静态方法(内存不存在),非静态方法可以调用静态方法
- 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=‘中国’}