可以包括多个类,但只能有一个用public修饰。
有,是保留字,但现在不使用。
相同:都可以用作逻辑与的运算符,两边都为true是,为true;
不同:&还具有短路功能;即如果第一个表达式为false,则不在计算第二个表达式;
&& 可以用作位运算符。
两种方法:用bread或为循环命名,bread 循环名。
switch 的只能是整数表达式或枚举常量;整数表达式可以是int和包装类Integer,由于byte、char、short都可以隐含转化为int,所以可以。
但是,long和String不能用。
s1是short类型的,s1+1会提升数据类型为int,会报错,提示要进行强制类型转换;第二个正常,因为java会对+=进行特殊处理。
char型变量用来储存Unicode编码字符的,Unicode编码字符里包括汉字,所以可以,除非是没有的特殊字符。
2>>8位运算最高效。
指的是引用不能变,引用对象可以变;例如:
final StringBuffer a=new StringBuffer("abc");
a=new StringBuffer("dd");
会报错,但a.append("d")不会报错。
静态有static修饰,值加载一次,类可以直接调用
实例变量只能由实例化对象调用。
不可以,因为static可以有类直接调用,而非static方法必须由实例化对象调用,二者一起出现冲突。
Integer默认值为null,而int为0,Integer包装类可以区别未赋值和值为0;但int基本类型不可以;在Hibernate用Integer
修饰对象表示符OID,通过判断是否为空,判断对象是否是瞬时对象;最主要的Integer封装了操作数字的许多方法。
作用域 当前类 同一个包 子类 其他包 public 可以 可以 可以 可以 protected 可以 可以 可以 private 可以 默认不写 可以 可以
构造器Constructor不能被继承,可以用super()调用,因此不能重写Override,但可以被重载Overload。
接口可以继承接口,抽象类可以实现接口。
抽象类可以 继承具体的类,可以有静态的main方法。
抽象类和具体类的唯一区别就是不能创建实例对象和允许有abstract抽象方法。
clone有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。
靠的是父类或接口定义的引用变量可以指向子类或具有实现类的实例对象,而程序调用方法在运行时才动态绑定,
就是引用变量所指的具体实例对象的方法,也就是内存中正在运行对象的方法,而不是引用变量类型中定义的方法。
抽象类:用abstract修饰,不能创建实例,含有抽象方法必须是抽象类,定义的抽象方法必须被子类重写,所以不能有抽象的静态方法。
接口: 一种特殊的抽象方法,默认用public abstract final修饰的成员变量,用public abstract修饰方法,所有的方法都是抽象的。
区别:
1)抽象类有构造方法,接口没有;
2)抽象类可以有普通成员变量,接口没有;
3)抽象类可以有普通方法,接口不能;
4)抽象类可以有静态方法,接口不可以;
5)都可以有静态成员变量,接口只能用public修饰,抽象类可以是任意的;
6)一个类可以实现多个接口,但只能实现一个抽象类。
抽象方法需要被子类重写,所以不能是static;
native方法表示该方法要用依赖另一种平台的语言实现,和抽象没关系;
同步要确定this,抽象的确定不了,没一起用的。
getClass()是final修饰的,可以继承,但不能重写,所以返回的是本身的类的名称,要得到父类的名称,用super.getSupperClass().getName()
返回的是 Testimport java.util.Date; public class Test extends Date{ public static void main(String[] args) { new Test().test(); } public void test(){ System.out.println(super.getClass().getName()); } }
String 类是final类,不能继承,final方法可以继承,但不能重写;
两个或一个,xyz在常量缓存区中的对象,如果此前用过xyz,则直接从常量缓存区拿,只创建一个new对象,如果没用过,则创建2个。
public class Test { public static void main(String[] args) { System.out.println(new Test().test()); } static int test() { int x = 1; try {
System.out.println("try"); return x; } finally {
System.out.println("finally"); ++x;
System.out.println(x); } } }
结果:
try
fianlly
2
1
再比如:
public class smallT{
public static void main(String args[]) {
smallT t = new smallT();
int b = t.get();
System.out.println(b);
}
public int get() {
try {
return 1 ;
} finally {
return 2 ;
}
}
结果:
2;//因为finally将try中的额覆盖了
主函数和子函数调用问题,先执行try,在执行finally,在执行finally之前结果放到主函数,不是立即返回,所以是1;
RunTime Exception和Checked Exception:运行时异常和一班异常;
1)运行时异常是Exception的一个特殊子类,在进行编译时不会被检查的异常,只能在运行时检测,如空指针异常,可以不做处理;
2)一般异常是在编译时就可以检测的,必须进行声明处理的异常,否则无法通过编译。
error错误与程序执行的操作无关,大多是由于虚拟机运行时出现了问题,通过程序代码本身无法解决;
异常是应用程序中可预测、可恢复的问题,出现在特定的代码或操作中,可以通过设计程序代码解决。
恢复的一种严重问题,程序只有死的份了。异常分为运行时异常和普通异常。所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception,Error表示应用程序本身无法克服和
28. 举例运行时异常
NullPointerException空指针异常
ArrayIndexOutOfBoundsException数组下标越界
ClassCastException 类型强制转换异常
IOException 输入异常
FileNotFoundException文件未找到异常
SQLException 操作数据库异常
29. JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
30.throws------获取异常,可能出现异常,在方法声明后边,由方法的调用者处理
throw--------抛出异常,在方法体内部,内部的语句处理;
try------------是将会发生异常的语句括起来,从而进行异常的处理,也可以在try块中抛出新的异常
catch--------出现异常执行里边的语句
finally-------不论是否有异常都会执行的语句