引用数据类型的数组使用规定长度的方式进行初始化时,默认值是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修饰的类不能被继承