1.形参长度可变的方法
在最后一个形参的类型后增加三点(...),但是一个方法最多只能有一个长度可以变化的形参。
public class TestDog {
public static void test(int a,String...books) {
for(String index:books){
System.out.println(index);
}
System.out.println(a);
}
public static void main(String[] args) {
test(10, "ak","fdf","fdfsdfsd");
}
}
输出:
ak
fdf
fdfsdfsd
10
2.修饰符protect
如果某个类主要做其它类的父类,该类里包含的大部分方法可能仅希望被其子类重写,而不想被外界直接调用,则应该使用protected修饰这些方法。
3.构造器中使用this
package com;
import javax.security.auth.login.AppConfigurationEntry;
public class Apple {
public String name;
public String color;
public String weight;
// 第一个构造器
public Apple() {
}
//两个参数的构造器
public Apple(String name,String color){
this.name = name;
this.color = color;
}
//三个参数的构造器
public Apple(String name,String color,String weight) {
//通过this调用另一个重载的构造器的初始代码
this(name,color);
//下面this引用该构造器正在初始化的java对象
this.weight = weight;
}
}
程序中this(name,color)调用表明调用该类另一个有2个字符串参数的构造器。
使用this调用另一个重载的构造器只能在构造器中使用,而且必须作为构造器执行体的第一条语句。
4.多态
与方法不同的是,对象的属性则不具有多态性。
通过引用变量来访问其包含的实例属性时,系统总是试图访问它编译时的类所定义的属性,而不是它运行时类所定义的属性。
5.强制类型转换
引用类型之间的转换只能把一个父类变量转换成子类类型,如果两个没有任何继承关系的类型,则无法转换。
考虑到异常,转换之前应先通过instanceof 运算符来判断是否可以成功转换例如 :
6.基本类型和包装类
除了Character之外的所有包装类都提供了一个parseXxx(String s)的静态方法,用于将一个特定字符串转换成基本类型变量;除此之外,在String类里也提供了多个重载valueOf()方法,用于将基本类型变量转换成字符串。值得注意的地方:还有一种更简单的方法将基本类型变量转换成字符串,将基本类型变量和""进行连接运算,系统会自动转换。
7.单例类(只能创建一个对象)
package com;
class Singleton {
//使用一个变量来缓存曾经创建的实例
private static Singleton instance;
//将构造器用private修饰,隐藏构造器,是不能在外部类实例化对象
private Singleton() {
}
//提供一个静态方法,返回一个Singleton实例 只保证产生一个对象
public static Singleton getInstance() {
if(instance==null){
instance = new Singleton();
}
return instance;
}
}
public class TestSingleton{
public static void main(String[] args) {
//创建Singleton对象不能用构造器,只能通过getInstance方法
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
//将输出true。
System.out.println(s1==s2);
}
}
8.final
对于引用类型的变量而言,他保存的仅仅是一个引用,final只保证这个引用的地址不会改变,即一直引用同一个对象,但这对象完全可以发生改变。