java基础查漏补缺

  1. i++;++i;i–;–i
  2. 值传递 引用传递
  3. 继承
  4. if else 和 switch case 的区别
  5. 抽象类可以有构造器

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) {
    ...
    }  
    ...
        }