java_关于引用类型数组,Object,package,访问权限控制修饰词及final修饰词

引用数据类型的数组使用规定长度的方式进行初始化时,默认值是null;

如:
Cell[] cs = new Cell[10];
cs里有地址,数组对象的地址,对象里有10个null

第一个元素存储(0,3)的方格
cs[0] = new Cell(0,3);
第二个元素存储(0,4)的方格
cs[1] = new Cell(0,4);

引用类型的数组对象内存储的是元素对象的地址信息

Cell[] cs = new Cell[4];
System.out.println(Arrays.toString(cs));
/*存储:(0,3),(0,4),(0,5),(1,5)*/
cs[0] = new Cell(0,3);
cs[1] = new Cell(0,4);
cs[2] = new Cell(0,5);
cs[3] = new Cell(1,5);
System.out.println(Arrays.toString(cs));

这里写图片描述

============================================================
Object:是所有引用类型的顶级父类,
系统都会默认使引用类型继承Object(extends Object)

提供了常用的方法:
(1)toString():在Object中,返回的是类全名+@ +Hashcode()值,即对象的内存堆中的位置信息

类有类名和类全名的区别:
类名:即最短的名称
类全名:从包名开始写的名称
如:String是类名,java.lang.String是类全名

此方法会在输出变量时,或引用变量进行拼接时,默认调用

而查看地址信息通常没有必要,要查看对象的成员变量信息,因此,我们需要重写toString();用于查看详情
格式:”[成员变量1=”+成员变量1+”,成员变量2=”+成员变量2+”]”

(2)equals(Object obj)
Object类型中的此方法中的逻辑是比较this与形参obj的地址信息是否相同
即,比较两者是不是同一对象,相当于(this==obj)

所以在定义类型是,继承过来的equals方法,要重写

  重写规则:
    1.查看传进来的obj是不是null
    if(obj==null){
        return false;
    }
    2.查看传进来的obj是不是this.
    if(obj==this){
        return true;
    }
    3.查看传进来的obj是不是本类型
    if(!(obj instanceof Person)){
        return false;
    }

    instanceof关键字:作用是判断引用变量指向的对象是否属于某一类型
    语法:
        boolean f = 变量名 instanceof 类型名;

==========================================================
package:包
作用:用于管理源文件,区分类全名
命名规则:域名后缀.域名.项目名.模块名
声明位置:在源文件的首行首句

类全名:从包开始写起的名称

常用的包:
java.lang.*,里面的类型非常常用,因此不需要导包
java.util.*,封装了许多常用的工具类
java.io.*,封装了io流的类型
java.net.*,封装了许多关于网络的类型

import:导包关键字 在包名下,类上
用于声明类的类全名,在逻辑中就可以使用短的类名
优点:可以减少代码的编写量

访问权限控制修饰词:
public,private,protected,默认的(default)

修饰类时:
    外部类:可以使用public,默认
    内部类:4个都可以使用

修饰成员变量:4个都可以修饰
    可见性不一样

            本类     同包下  不同包子类   其他
public      true    true    true        true
protected   true    true    true
default     true    true
private     true

在实际开发中,成员变量要尽可能设置成不可见,好处是提高代码的安全性,即用private修饰,为了在其他类中可以对成员变量重新设置值,或获取值,我们可以定义相应成员变量的公有方法来进行操作;

public void setName(String name){
    this.name = name;
}
public String getName(){
    return name;
}



修饰方法:4个都能修饰
    与修饰成员变量的可见性一致
    方法的重写:
        子类不能重写父类的私有方法

修饰词final:最后的

(1)修饰类:
被final修饰的类,不能有子类,意义在于减少随意扩展功能的可能性
(2)修饰成员变量:
可以直接初始化,也可以在构造器中初始化,不能在其他任何地方再次赋值
修饰局部变量
只能初始化一次
(3)修饰方法:
被final修饰的方法不能被子类重写,可以避免某些子类不经意间的重写

public class TestFinal {
    final int x;
    //final int y;
    //final修饰的成员变量需要初始化,可以直接初始化,也可以在构造器中初始化
    public TestFinal(int x){
        this.x = x;
    }
    public final void sum(int a,int b){
        System.out.println("和:"+(a+b));
    }
    public final void sub(final int a,final int b){
        //a = 5;final修饰的局部变量只能赋值一次
        System.out.println("差:"+(a-b));
    }
}
final class TestFinal01 extends TestFinal{
    public TestFinal01(int x){
        super(x);
    }
    /*final修饰的方法不能被重写
    public void sum(int a,int b){
        System.out.println("和:"+(a+b));
    }
    */
}
//class TestFinal02 extends TestFinal01{}
//final修饰的类不能被继承

猜你喜欢

转载自blog.csdn.net/yc_hen/article/details/81392367