Day07
一、输出引用
-如果我们使用System.out.println();输出一个对象的引用,他默认情况下是输出这个类的全名@地址值,为啥会这样,因为我们使用输出它的引用时,默认调用的是该引用指向的对象的tostring方法,如果我们这个对象没有重写tostring那么他就会默认使用他的父类object的tostring方法,而object中的tostring的方法实现就是打印出类名@地址值,一般情况下我们都需要重写object的tostring方法,来输出这个类中的各个属性值。
-tostring
-他就是object类中定义的方法
-public String tostring(){
return getclass().getname()+"@"+integer.tohexstring(hashcode());这是java写好的源代码,官方自己的类都已经写好了。
}
实例:
package com.auto.system;
public class Text01 {
public void student() {
System.out.println("这是父类");
}
public static void main(String[] args) {
Text01 str=new Text01();
System.out.println(str);
}
}
输出的结果为:
com.auto.system.Text01@15db9742
想要改变则需要在父类中重写object的tostring方法
package com.auto.system;
public class Text01 {
public void student() {
System.out.println("这是父类");
}
public String toString() {
return "这是重写后的爸爸";
}
public static void main(String[] args) {
Text01 str=new Text01();
System.out.println(str);
}
}
二、“”==“”与“”equals“”的区别
“”==“”比较的是基本数据类型,比较的是值,而equals比较的是对象的值是否相等,是否是同一对象。
三、hashcode
java里面有一些数据结构他的排序算法依赖于hashcode的值,为了能够提高这些排序算法的性能,我们最好也重写一下hashcode,重写hashcode的原因也是因为java中规定,如果两个对象的equals比较值为true,那么他们的hashcode值也应该一样,反之为false,值也不一样。如果不重写hashcode,有可能出现equals为true的情况下,但是值确不一样,这样不利于一些数据结构算法的排序。
四、引用数据类型数组
数组里面的每一个元素都是一个引用类型
五、多态
一个对象会有多种状态,称之为多态,比如在人在教室里面是学生,在商店里面是顾客等等
六、接口(抽象的)
我们可以将接口理解为一个特殊的父类,接口和接口是可以多继承的
七、static 关键字
1-可以修饰成员变量(最终变量的数据赋值,只有一份,以最终赋值数据为准)
成员变量就可以通过类名.变量名来进行访问,一般单独使用他修饰的不常用,如果修饰变量static 和final关键字一起,这个变量会变成常量。
2-可以修饰成员方法
static修饰方法后就会变成静态方法,java语法规定,在静态方法中不能访问非静态的成员(属性和方法)。静态方法可以通过类名.方法名调用。
package com.auto.system;
public class Text01 {
String name;
int age;
public static void person() {
age=15;//无法访问age,因为age不是静态的
}
}
3、静态代码块
-静态代码块,执行优先级最高,不管创建多少对象,只执行一。因此静态代码块非常适合写只执行一次的代码,不需要重复加载,比如静态代码块中加载音频,图片等数据量大的文件
实例:
package com.auto.system;
public class Text01 {
static {
System.out.println("这是爷爷");
}
public static void main(String[] args) {
System.out.println("这是爸爸");
}
}
八、final 关键字
-修饰变量
修饰变量之后,变量就会变成常量,一般会和static一起使用
-成员变量
要么在定义的时候对变量进行初始化,要么在构造器中初始化
-局部变量
在第一次使用之前初始化,final修饰变量一旦赋值,就不能重新赋值
-修饰类
修饰类,代表不能被继承,string类不能被继承,源代码中string类被final修饰(被太监了),而abstract修饰的抽象类的作用反而是被拿来继承的,两者相反。
-修饰方法
修饰方法之后,方法就不能被重写。