Java的this、public、static、protected关键字——有C++基础的Java入门(四)

版权声明:欢迎转载,转载请注明出处哦! https://blog.csdn.net/qq_41647999/article/details/83420974

目录

一、 this关键字

1、 概念

2、 实例

3、 常见用法

4、 原理 

二、 public关键字

三、static关键字

1、修饰在属性上

2、修饰在方法上

四、 protected关键字


一、 this关键字

我觉得this在Java和C++、C#的作用都是差不多的,this比较重要,还是拉出来讲讲。

1、 概念

打印一个对象的时候,输出的是这个对象的地址(JDK提供的一个地址,真正的地址是十六进制的)。

this 只能在类的对象方法中使用。

this 代表当前调用这个this所在方法的对象的自身。

this 可以在方法内区分同名的类的属性和参数名(有this的一定是属性,没有this的一定是方法的参数名)。

2、 实例

public class Demo {
    public void work(){
        System.out.println("Demo--------"+this);
    }
}
class TestDemo{
    public static void main(String[] args) {
        Demo demo = new Demo();
       System.out.println("TestDemo--------"+demo);
       demo.work();
    }
}

运行结果

通过上面这个例子,不难看出this和demo的地址(每次new的时候都是唯一的)是相同的,说明它们两个用的是同一个对象,谁调用的这个方法,这个打印出来的地址就是谁的。

3、 常见用法

还是举个栗子吧~

public class PersonInfo{
    private String name;
    
    /**
     *大家都知道下面的测试类要获取
     *这里的私有数据,需要set和get。
     *下面这种情况就需要区分一下谁是谁的name。
     */
     public void setName(String name){
        //this后面的name是属性
        //这个方法的name是参数
        this.name=name;
    }
    public void getName(String name){
        return name;
    }
}

class TestPersonInfo{
    PersonInfo person = new PersonInfo ();
    person.setName("王大锤");
    String personName=person.getName();
    System.out.println(personName);
}
                               类内部 package内     子类       其他
public 允许 允许 允许 允许
protected       允许 允许 允许 不允许
default           允许 允许 不允许 不允许
private           允许 不允许 不允许 不允许

4、 原理 

假设是一个汽车类(Car),这个车有color、name、carNo(车牌号)的属性,有 run() 和 introduce() 的方法。另外有一个测试类(TestCar)来调用汽车类的方法。代码很简单,这里主要详解一下原理。关于堆和栈以及进栈出栈的方式,自行补脑。

运行流程

第一步:java运行到TestCar的时候,把TestCar.class载入到JVM(各就各位,),把main放入方法区压栈。

第二步:加载Car.class到JVM,然后把run() 和 introduce() 加载到方法区,在堆中创建一片空间创建了一个Car对象,在栈中产生一个变量car 指向堆中的对象。然后给 car 对象的三个属性赋值。

第三步:car 的run() 方法进栈,把 car 变量所指向的地址赋值给this关键字,执行方法体。

第四步:run() 方法出栈,run() 中的 this 消失。

第五步:car 变量消失,main 出栈后消失。

第六步:由于Car堆中的对象失去了变量的引用变成了匿名对象,所以也被系统回收。

二、 public关键字

使用对象:类、接口、成员

 介绍:无论它所处在的包定义在哪,该类(接口、成员)都是可访问的

三、static关键字

使用对象:类、方法、字段、初始化函数

介绍:成名为static的内部类是一个顶级类,它和包含类的成员是不相关的。

1、修饰在属性上

class User{
    //一般的变量命名
    String username;
    String password;
    //加上static的命名
    static String realName;
}

加上static关键字之后,表示realName这个变量名不再是User的属性,而是这个类的属性。

2、修饰在方法上

语法:public static 返回值类型 方法名(数据类型  参数名);

方法名上不带static的方法都是对象的方法。

public class Demo {
    String name;
    int age;
    String lesson;

    /**
     * 对象的方法,每一个老师的实例可以使用
     */
    public void teach(){
        System.out.println("老师在上课.....");
    }

    /**
     * 类方法
     */
    public static void sleep(){
        System.out.println("老师在睡觉.....");
    }
}

class TestDemo{
    public static void main(String[] args) {
        
        // 使用类名来调用类方法,推荐使用
        Demo.sleep();
        //不推荐使用下面的方法来调用
        Demo demo = new Demo();
        demo.sleep();
    }
}

总结:上面这个实例说明,有static关键字的方法是类的属性,则可通过 “类名.方法名” 来调用。

四、 protected关键字

推荐一个教程链接:http://www.runoob.com/w3cnote/java-protected-keyword-detailed-explanation.html

下一章节:有C++基础的Java入门(五)

猜你喜欢

转载自blog.csdn.net/qq_41647999/article/details/83420974
今日推荐