i++;++i;i–;–i
i++ 原理 ,先将i压入栈中 ,再将i取出放到local variable区域1处,local variable 区域的位置1处的值压入到stack中。将local variable 区域的位置1处的值加1。再次压入栈中完成自增。
public static void main(String[] args) throws Exception {
int i =100;
System.out.println(i++);//自增返回加法之前的结果 100
System.out.println(++i);// 自增 返回加法之后的结果102
System.out.println(i--);//返回减之前结果102
System.out.println(--i);//返回减之后的结果100
}
值传递 引用传递
static void a (StringBuffer s1 ,StringBuffer s2)
{
s1.append(s2);
s2=s1;
}
public static void main(String[] args) throws Exception {
StringBuffer s1 = new StringBuffer("A");
StringBuffer s2 = new StringBuffer("B");
a(s1,s2);
System.out.println(s1.toString()+s2.toString());//输出结果 AB,B
}
}
继承
子类继承父类方法 子类方法的修饰符要大于等于父类方法的修饰符 子类方法的抛出的异常范围要小于等于父类方法的异常 。 public > project > default >private
class ClassB {
float getnum() throws Exception{
return 1.1f;
}
}
class ClassC extends ClassB{
protected float getnum() throws IOException {
return 1.1f;
}
if else 和 switch case 的区别
对于一个即可以使用ifelse又可以使用switch的代码段,如果判断较多优先使用switch, 因为switch使用btree算法只计算一次之后在跳转表中查找,而ifelse则是对每一条都进行判断直到通过或全部结束。
抽象类可以有构造器
抽象类可以有构造器,默认会生成一个protected的构造器,只是抽象类不能实例化,但这只是代表不应该有(不是不能有)public的构造器,抽象类的构造器可以为子类继承使用, 用来初始化抽象类中的成员变量。 例如:spring中的GenericBeanDefinition 继承自AbstractBeanDefinition。
public class GenericBeanDefinition extends AbstractBeanDefinition {
public GenericBeanDefinition(BeanDefinition original) {
super(original);
}
...
}
----------------------------------------
public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccessor
implements BeanDefinition, Cloneable {
...
protected AbstractBeanDefinition(BeanDefinition original) {
...
}
...
}