哈喽,大家好!我是Why,一名在读学生,目前刚刚开始进入自己的编程学习生涯。虽然学习起步较晚,但我坚信做了才有0或1的可能。学了一段时间以后也是选择在CSDN上分享自己的日常笔记,也希望能够在众多道友的大家庭中打成一片。
本文主要讲解二进制以及进制之间的转换,如果大家读后觉得有用的话,还请大家多多支持博主:欢迎 ❤️点赞、收藏⭐、留言
✨✨✨个人主页:java-WangHY
1、this是一个变量 ,一个引用。
this保存的就是当前对象的地址,指向对象本身,即this代表的就是“当前对象”。
2、this存储在堆内存中,存在于对象的内部。
3、this只能用在实例方法中,谁调用这个实例方法,this就是“谁自己”。
4、this不能出现在静态方法中
因为this代表当前对象,静态方法中不存在当前对象
强行调用会出现错误: 无法从静态上下文中引用非静态 变量 this
5、大多数情况下,this可以省略
public class Test {
//定义一个实例变量
int i = 0;
//定义一个静态变量
static int num = 123;
public static void main(String[] args) {
//同一个类中能否直接访问变量i?为什么?
//System.out.println(i);
//怎样访问i?i是实例变量,实例对象需要通过实例对象去访问
System.out.println(new Test().i);//匿名对象
System.out.println("=========================");
//怎么访问静态变量?类名.变量名
System.out.println(Test.num);
//同一个类中能否省略类名?可以
System.out.println("省略类名——>"+num);
}
}
在实例方法中,或者构造方法中,为了区分局部变量和实例变量,
这种情况下:this. 是不能省略的。
package com.blog;
/**
* @Author jinhuan
* @Date 2022/3/14
*/
public class Student {
/**
* age
* */
Integer age;
/**
* name
* */
String name;
/**
* 无参构造
* */
public Student() {
}
/**
* 全参构造
* */
public Student(Integer age, String name) {
this.age = age;
this.name = name;
}
/**
* Getters and Setters
* */
public Integer getAge() {
return age;
}
/*
分析一下这种写法为什么不好?
不够见名知意,可读性比较差,我们希望在接收的时候,传来的变量也为age
怎么解决?
使用this关键字来区分 同名的实例变量以及成员变量
public void setAge(Integer no) {
age = no;
}
如果不加this呢?
public void setAge(Integer age) {
age = age;
}
那么这两个age都是局部变量(就近原则),和实例变量毫无关联(见例子3证明)
*/
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Student {
/**
* age
* */
Integer age;
/**
* 无参构造
* */
public Student() {
}
/**
* 全参构造
* */
public Student( String name) {
this.age = age;
}
/**
* Getters and Setters
* */
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
//此处的age不加this
age = age;
}
}
public class Test {
public static void main(String[] args) {
//创建学生对象
Student student = new Student();
//给年龄赋值
student.setAge(18);
//打印年龄(可见并未赋值成功)
System.out.println(student.getAge());
}
}
1、通过当前的构造方法去调用另一个本类的构造方法,可以使用以下语法格式:
this(实际参数列表);
通过一个构造方法1去调用构造方法2,可以做到代码复用。
但需要注意的是:“构造方法1”和“构造方法2” 都是在同一个类当中。
2、this() 这个语法作用是什么?
代码复用。
3、'对于this()的调用只能出现在构造方法的第一行'。
package com.blog;
/**
* @Author jinhuan
* @Date 2022/3/14
*/
public class Student {
/**
* age
* */
private Integer age;
/**
* name
* */
private String name;
/**
* 无参构造
* */
public Student() {
//注意构造器中对于this的调用必须存在于第一行!
this(18,"张三");
/*this.age = 18;
this.name = "张三";*/
}
/**
* 全参构造
* */
public Student(Integer age, String name) {
this.age = age;
this.name = name;
}
/**
* ToString
* */
@Override
public String toString() {
return "学生信息:{" +
"姓名 = " + name +
", 年龄 = '" + age + '\'' +
'}';
}
/**
* Getters and Setters
* */
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Test {
public static void main(String[] args) {
//调用学生的无参构造方法默认创建的学生对象值为:张三 18岁
Student student = new Student();
System.out.println(student);
}
}
相信看完这个你已经对this关键字有了更深一步的认识,但是切勿眼高手低,不如现在就去实操一番。另外,我自己整理了一些自资源(笔记、书籍、软件等)分享在我的公众号上,非常欢迎大家来访白嫖和博主做朋友,一起学习进步!最后别忘啦支持一下博主哦,求三连!❤️❤️❤️