JAVA中的类(class)(二)

JAVA中的类(class)(二)

​ Java通过类来创造对象,在Java语法中,对象是一个指针,指向对象属性在堆中的地址。

​ 但对象不仅拥有属性,也包含方法,那么类中的方法又是怎样在计算机中执行,我们又该怎样编写和调用这些方法呢?

类->方法(方法)

class Cat{
    int age;
    String food;
 
    void eat(){
        System.out.printf("The Cat is eating!");
    }
}

​ 如上,定义了一个Cat类,Cat类中,包含一个属性i,以及一个f()方法,我们可以使用这个Cat类去创造一个对象,如下:

Cat Tim = new Cat(); 即为创造了一个Cat类的Tim对象。如下:

方法分配

​ 创造Tim对象时,除了在堆内存中分配年龄agefood两个属性外,还而外分配了一块内存用于存放方法eat();

​ 当使用Cat类创建两个对象时,两个对象的属性(age、food)按照各自指针指向分别得两块对内存,而二者的非静态方法指向同一块内存。即:相同类的对象,共用堆内存中同一个非静态方法。如下:

双方法分配
虽然二者指向同一个方法,但两个对象执行该方法时,不会同时执行而是先后调用执行。

虽然在前面反复提到指针,但其实在Java语法中是没有所谓指针概念的,这里的指针都是一些底层操作,在语法层面,已经对Java程序员进行了屏蔽,我们将不会在Java程序中使用到指针。

类的访问

public class CatStory(){
    public static void main(String[] args){
        Cat Tim = new Cat();
        
        Tim.age = 3;						//修改Tim对象的i属性
        System.out.printf("	%d\n", Tim.age);//访问Tim对象的i
        Tim.eat();							//调用Tim对象中的eat()方法
    }
}

​ 使用英文的句点可以访问对象的内部成员,包括Tim内部的属性和方法。运行结果如下(要在前面加上Cat类蛤!)

在这里插入图片描述

访问控制符

​ 在前面的程序中时常能在主函数所在类中看到这样一个关键字:public

public是Java中的一类关键字——访问控制符。前面说过Java的基本单位是类,访问控制符就是对于类当中的成员是否可被访问的修饰符。访问修饰符共有三类,分别是:

  1. public,公有型访问修饰符。
  2. private,私有型访问修饰符。
  3. protected,保护型访问修饰符。

这三种访问修饰符对于访问权限的控制如何呢?我们可以编写如下代码进行测试;

/*Test.java*/
Class A{			//随手定义一个A类
    public int i = 10;
    private int j =  20;
    protected int k = 30;
    		//随手定义三个变量,访问修饰符分别为public,private,protected
}
public class Test{
    public static void main(String[] args){
        A aa = new A();		//创造一个A类的对象aa
        /*尝试对aa的属性i,j,k进行访问*/
        aa.i = 11;
        aa.j = 22;			//ε=ε=(√≥∨≤)√尝试访问私有的成员
        aa.k = 33;
    }
}
/*
编译结果为:The field A.j is not visible
	at Test.main(Test.java:12)
						(/TдT)/访问private成员失败
*/

​ 这说明私有(private)的属性不能被外部被引用、访问,而public和protected的属性可以被访问。

​ 上面访问的是属性,如果使用访问修饰符修饰方法,也能达到相同的效果。private的方法不能被外部访问,而publicprotected

​ 访问控制符private似乎可以阻止我们调用访问,但这是相对于类内部和外部而言。对于类的内部而言,所以成员相互之间都是可以调用的。

class A{			//日常随手A类
    public int i;
    private int j;
    protected int k;
    
    public void show()
    {
        System.out.printf("i = %d, j = %d, k = %d\n", i, j, k);
        			//因为是在类的内部,你可以调用任何权限的变量
    }
    protected void f()
    {
        g();						//你甚至可以调用私有的方法(☆∪☆)
        System.out.printf("FFFF\n");
    }
    private void g()
    {
        f();						//递归嵌套,无限循环,哈哈哈(≥△≤)
        System.out.printf("GGGG\n");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值