JavaSE中的类和对象

本文详细解析了Java中this关键字的用途,包括访问成员变量、构造方法的调用以及封装的概念。通过实例演示了this在解决局部变量优先问题和构造方法中的重要性,以及访问修饰符和包的作用。重点讲解了静态成员和对象构造的区别,帮助读者掌握基础编程概念。
摘要由CSDN通过智能技术生成

一.this的引用

1.索引
this的引用在java中是非常重要的,this在类中作用是什么?用法是什么?以及注意事项是什么?下面让我们一起揭开this神秘的面纱。
2.提出问题
前面我们学过访问一个类中的成员变量并对其赋值,也定义了一些方法通过调试明白了其工作原理,但方法中是谁给谁赋值?成员变量给成员变量还是参数给参数?估计许多人现在已经开始搞不懂了。
3.this访问成员变量

class Student{
public string name;
public int age;
public void setStudent(String name,int age){
        name = name;
        age = age;
}
public void printStudent(){
     System.out.println(name+"会“”+age);
}
}
public class Main{
public static void main(String[] args){
     Student student = new Student();
     student.name="HH";
     student.age = 18;
     student.printStudent();   //结果为0
}
}

上述结果没有赋值成功的原因是局部变量优先,相当于自己给自己赋值。赋值的逻辑为:
在这里插入图片描述
要想对上述代码赋值成功,this是个不错的选择。对成员变量前面加个this可以成功赋值

public void setStudent(String name,int age){
       this. name = name;
      this.  age = age;
}

那么this到底是如何让其成功赋值的?
4.this赋值的原理
我们可以这么认为,每一个类中的方法前面隐藏了一个this就比如

public void setStudent(String name,int age){
        name = name;
        age = age;
}
``//加上隐藏的this为
`public void setStudent(Student.this String name,int age){
        name = name;
        age = age;
}
 

因为类中的方法前默认有this,所以可以通过this 去访问成员变量。
因此this的作用为:“当前对象的引用“”。也就是说谁调用该方法谁就是this,上述代码中最后结尾有这么一段代码student.printStudent();,sudent调用了printStudent方法,所以可以认为student是this。
总结:this主要有三种方法,1.this成员变量 2.this访问成员方法 3.this访问构造方法(下文提出)。
注意:1:this只能在成员方法中使用 2.只能引用当前对象,不能引用其他对象 3.编译器会将调试该成员的对象引用传递给该方法,this负责接收。
二.对象的构造
1.构造方法:
在构造方法的时候名字必须于类名相同,在创建对象的时候,由编译器自动调用,整个对象的生命周期只有一次。并且没有返回值。

class Student{
public string name;
public int age;
public void setStudent(String name,int age){
        name = name;
        age = age;
}
Student(){
System.our.printfln("不带参数");
}
Student(String name,int age){
this name = name;
this age = age;
}
public void printStudent(){
     System.out.println(name+"会“”+age);
}
}
public class Main{
public static void main(String[] args){
     Student student = new Student();
     student.name="HH";
     student.age = 18;
     student.printStudent();   //结果为0
}
}

根据上述代码试想构造方法是怎么运行的呢?
2.构造方法运行的原理
当我们实例化一个对象时候。例如:Student student = new Student();
如果我们没有提供给编译器任何方法时,编译器会主动帮我们生成一个不带参数的构造方法,如果有会直接调用我们自己编写的构造方法。当构造方法调用后对象才产生。
3:this在构造方法中
当this出现在构造方法中必须放在构造方法的第一行并且不能形成循环。
this出现在构造方法中会直接调用一个类中的另一种构造方法。

class Student{
public String name;
public int age;
Student(){
this("zhangsan",99);
System.out.println("HAO");
}
Student (string name,int age){
test();
System.out.println("buHAO");
}
}

当调用构造方法的时候会先进入上述代码中第一个不带参数的构造方法中,接着碰到了this会寻找一个类中的另一个构造方法(第二个构造方法),第二个构造方法又碰到了this进入第一个构造方法,这样造成死循环。所以我们要避免代码死循环。

三.封装

1.何为封装
简单的来说就是套壳屏蔽细节。将数据和操作数据的方法有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
2.访问修饰限定符
访问修饰限定符是用来控制方法或者字段能否在类外使用。
在这里插入图片描述

public:在大多场合下只能访问,而private只能在同一个类中访问。

class Person{
    private String name;
    public int age;
}
public class xx{
    public static void main(String[] args){
        Person person = new Person();
        person.name = "bit";
    }
}

因为name前加了private,出了这个类后就不能访问,要想访问name,如下代码。

class Person{
    private String name;
    public int age;
    public void setdate(String name){
        this name = name;
    }
}
public class xx{
    public static void main(String[] args){
        Person person = new Person();
        person.setdate = "bit";
    }

3.包的解释
为了更好的管理类,把多个类收集在一起成为一组,称为软件包。在一个工程中相同名称的类要放在不同的包中。
Java中的包有很多中,其中自己定义的包会有package
在这里插入图片描述
系统中的包可以通过import进行导入。

四.static成员

1.static的用法

class Student{
public String name;
public int name;
public String class;
}

上述代码如果有几十个学生,名字可能不一样,年龄可能不一样,但班级一样的情况下不定义会出现一点小问题,如果用static修饰会成为静态的班级。下面请观察加和没加Static的区别。
在这里插入图片描述
在这里插入图片描述
其中最主要的区别是static修饰的变量由堆区变成了方法区。修饰后其本质成为了类,也叫做类变量。如果要访问类名.class。静态的是不依赖于对象的。
在静态的方法中不能访问非静态的变量和方法。其生命周期随类的一生。

class Person{
     public int age;
     public void fun(){
     System.out.println("nihao");
     }
     public static void fun2(){
     this fun();
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值