访问控制符
初始化
默认值
== & equal
类型转换
override & overload
default & protected
类的成员不写访问修饰符默认为default,默认对于同一个包的其他类相当于公开(public),对于不是同一个包的其他类相当于私有(private)。
受保护(protected)对子类相当于公开,对于不是同一个包没有父子关系的类相当于私有。
初始化
成员变量会自动初始化
局部变量必须显式初始化再使用
默认值
数值型变量的默认值(0)
字符型的默认值(‘\u0000’)
布尔型的默认值(false)
引用类型的默认值(null)。
一个数组变量的默认值(null)
数组的所有元素初始化为其相应类型的默认值。
==和equals()
对于==,如果作用于基本数据类型的变量,则直接比较其存储的** “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址**
对于equals方法,注意:equals方法不能作用于基本数据类型的变量,如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
类型转换问题
转换规则
高位转低位需要强制转换
低位转高位自动转.
//byte → short → char → int → long → float → double
int i=0;
long l=i;
i=(int)l;//括号部分不可少
double d=1.0;
float f=1.0f ;//f部分不可少
double d2=f;
f=(float)d; //括号部分不可少
向上转型和向下转型
向上转型(upcasting):子类对象转为父类,父类可以是接口。不用强制。父类引用不能调用子类自己的方法。如果调用不能编译通。非要调用子类的属性,则需要给需要的属性写getter方法或者
向下转型(downcasting):父类对象转为子类。向下转型需要考虑安全性,如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,可以使用instanceof来避免出错此类错误即能否向下转型,只有先经过向上转型的对象才能继续向下转型。
转换成String
Object.toString()方法。java.lang.Object类里已有public方法.toString(),所以对任何严格意义上的java对象都可以调 用此方法。但在使用时要注意,必须保证object不是null值,否则将抛出NullPointerException异常。采用这种方法时,通常派生类会覆盖Object里的toString()方法。
类型转换(String)object方法。类型必须能转成String类型。因此最好用instanceof做个类型检查,以判断是否可以转换。因定义为Object 类型的对象在转成String时语法检查并不会报错,这将可能导致潜在的错误存在。null值可以强制转换为任何java类类型,(String)null也是合法的。
String.valueOf(Object) 。不用担心object是否为null值这一问题
Object obj = new Integer(100);
String strVal = (String)obj;//不会报错
Integer obj = new Integer(100);
String strVal = (String)obj;//会报错
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
//应当注意到,当object为null时,String.valueOf(object)的值是字符串”null”,而不是null.
}
int/Interger转换问题
new Integer.valueof()返回的是Integer的对象。
Integer.parseInt() 返回的是一个int的值。
new Integer.valueof().intValue();返回的也是一个int的值。
Integer.valueof(String s)是将一个包装类是将一个实际值为数字的变量先转成string型再将它转成Integer型的包装类对象(相当于转成了int的对象)这样转完的对象就具有方法和属性了。
而Integer.parseInt(String s)只是将是数字的字符串转成数字,注意他返回的是int型变量不具备方法和属性。
整数转换成字符串:
int MyInt = 1234;
String MyString = "" + MyInt;
//其它数据类型可以利用同样的方法转换成字符串。
override vs overload
overload(重载) 必须在参数上加以区分,不能在返回值上区分
override(重写)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
构造方法不能被重写。
网友评论