1:实例化一个对象的时候,静态变量,静态初始化块,普通变量,普通初始化快,构造函数的创建顺序:
静态初始化变量
静态初始化方法
普通变量
普通初始化快
构造方法
2:当有继承关系的时候:
父类静态变量
父类静态初始化块
子类静态变量
子类静态初始化块
父类普通变量
父类普通初始化块
父类构造函数
子类普通变量
子类普通初始化块
子类构造函数
3:静态变量和静态初始化快的先后顺序是:
根据在类当中的声明顺序来定。
4:到底创建了几个对象
String str = new String("abc");//创建了两个对象
string a = "abc";//创建了一个对象
string b = "abc";
string c = "abc";//创建了一个对象
string d = "ab" + "cd";//创建了一个对象
string a = "ab";
string b ="cd";
string c = "abcd";
string e = a + "cd";//e != c
string d = "ab" + "cd";// d == c
public static final string A = "ab";
public static final string B = "cd";
string s = A + B;
string t = "abcd";//s == t;
public static final string A ;
public static final string B;
static{
A = "ab";
B = "cd";
}
string s = A + B;
string t = "abcd";//s != t;
string s = new string(new char[]{'a','b','c','d'});
string t = s.intern();// t != s,因为这个时候t指向的是字符串池中的对象,而s 不是
5:变量的覆盖
class Parent(){
int i = 10;
}
class child extends Parent (){
int i = 30;
public static void main(String[] args){
new Child();
Parent par = new Child();
Child child = new Child();
System.out.println(par.i + child.i);//值是40
//属性的值取父类还是子类,不是由对象的类型来决定的,而是由我们定义的变量的类型来决定的;
//补充:方法是取子类的类型,这是多态。
//常量也可以被覆盖
}
}
6:final,finally,finalize的区别
final修饰的变量只能被初始化一次,且必须被初始化,在初始化的时候有一个static变量和static方法快互斥的关系。
final修饰方法的时候表示该方法不能被子类重写。
final修饰类的话表示该类不能被继承,所以final不能和abstract一起使用。
finalize表示gc在进行垃圾回收的时候调用该方法。
7:string 和 char
一个中文是一个字符,也就是两个字节,一个char是两个字节;一个英文字母是一个字节,所以:
char a = '中';//正确
byte b ='国';//错误
byte c = 'a';
System.out.println(c);//97,而不是a
判断一个string str1在不同的编码方式encodetype(如gbk,utf-16)下有几个字节:
str1.getBytes(encodetype).length;
string s1 和stringbuffer sb1的联系:
stringbuffer sb1 = new stringbuffer(s1);//sb1.reverse().toString()
string str1 和 char c1的联系:
str1 = String.valueOf(c1);
string str1 和byte数组byte[] tmp的关系:
str1 = new String(tmp);
8:Date和Calendar(一个抽象类)
date类基本上只有一个getTime方法(1262256841918),system.out.println(date)打印的值是(Thu Dec 31 18:55:01 CST 2009)。
因为Calendar是一个抽象类,所以不能被初始化,它有一个具体的子类实体类,GenerationCalendar,这个类可以通过new方法实例化,也可以通过Calendar.getInstance()来获得。
calendar对象就有很多的属性可以被我们的程序使用:
cal.DATE;
cal.DAY_OF_MONTH;
cal.DAY_OF_WEEK;
cal.DAY_OF_WEEK_IN_MONTH;
cal.DAY_OF_YEAR;
cal.DECEMBER;
cal.DST_OFFSET;
cal.AM_PM
cal.SECOND
cal.MILLISECOND
等等。
Date和Calendar之间的转换:
Date d1 = cal.getTime();
9:基本数据类型:
double
float
long
double d1 = 7L;//正确
float f1 = 7L;//正确
long l1 = 2f;//错误
long l2 3d;//错误