javase基础

1.2x8最有效率方式:2>>3

2.a,b两个整数交换:a = a ^ b;b = a ^ b;a = a ^ b;

3.画图形,外层for为行,内层for为行的个数和形状。

4.* * * * *  外圈x,里圈y和z

    * * * *

     * * *

      * *

       *

5.重载(overload)和重写(覆盖、override)的区别:重载是参数个数、参数数据类型、参数顺序不同,在同一个类,名称一样,重载与返回值类型无关。

6.基础算法:冒泡法和选择排序。

冒泡法:第一层:x=0,x<arr.len-1;第二层:y=0,y<arr.len-x-1;

选择排序:第一层:x=1;x<arr.len-1;第二层:y=x+1,y<arr.len;

二分法找元素位置:while(key!=arr[mid]){if(arr[mid]<key){...};else if(...){...}mid=(min+max)/2}

7.怎么理解面向对象编程:我们在开发软件的时候,肯定是要把生活中的一些事物和行为在我们的代码中表示出来,随便说下,比如我们开发车载系统,车就必须要在软件中体现出来,我们就是用类这种形式来封装车,比如车的颜色就是类的属性,车会跑就是类的函数。然后通过实例化把车的对象是实现出来,再围绕这个对象做一系列的操作。

8.Java三大特性:封装、继承、多态、抽象。

9.static:随着类的加载而加载,修饰后的变量和函数都是共享的,静态变量可修改,静态不能使用this、super。

10.对象实例化过程:先执行父类的静态变量和静态代码块,再执行子类的静态变量和静态代码块,在按代码顺序执行父类的属性和构造代码块、构造函数,接着是子类的属性和构造代码块、构造函数。

11.静态代码块和构造代码块的区别是静态代码块只执行一次,构造代码块是每次实例化对象执行一次。

12.子类覆盖父类的方法权限必须大于父类的权限。静态方法只能覆盖和被覆盖静态方法。

13.多线程下的懒汉式单例模式。

public class Test(){
    private static Test test = null;
    private Test(){}
    private static synchronized void  syncInitTest(){
        if(null == test){
             test = new Test();
        }
    }
    public static Test getTest(){
       if(test == null){
           syncInitTest();
       }
       return test;
   }    
}    

 14.一个类中有抽象方法,这个类就一定是抽象类,抽象必须被全部覆盖才能被使用,抽象类有构造函数,是为了给子类实例的时候使用。

15.抽象关键字不能与final使用,抽象方法必须被覆盖,不能和static使用,通过类调用抽象函数没意义,不能和private使用,必须被子类覆盖。

16.子类的构造函数第一行必须是super().

17.final修饰的方法不能被覆盖,属性不能被赋值,类不能被继承。

18.抽象类和接口的区别是抽象类可以有非抽象方法,而接口不行,抽象被继承,接口被实现。

19.子类提升成父类时,不能访问子类特有的方法和属性,但是可以访问覆盖了父类方法的子类的方法,且执行的是子类的方法。

20. test instanceof String  判断test是否是String类型

21.内部类的好处一是把不想被外部类之外的其他类调用就可以用内部类,好处二就是可以实现多继承,利用局部内部类返回实现基类或者接口的不同实现类。

参考资料:http://blog.csdn.net/kx_nullpointer/article/details/7744839

22.匿名内部类就是实现形式:new 接口或者基类{重写方法...}

23.外部类可以访问内部类的属性和方法,内部类也可以访问外部类的属性和方法,但如果是在方法内的局部内部类,只能访问方法内的被final修饰的变量。

24.throws是声明异常,不一定会抛,使用在函数上,可声明多个,抛出的是类,throw则是一定会抛出异常,使用在函数里,只能抛出一个,抛出的是对象。

25.子类继承父类只能抛出父类的异常或者异常子类,如果父类抛出多个异常,则子类要抛出父类异常集合的子集,父类没抛异常时子类也不能抛,只能try。

26.创建字符串对象有两种方式,一种是 = ,一种是new实例化,=创建的对象是存放在常量池中,如果两次创建的字符串内容一样,则两次的对象可以说是相等的,因为用=创建的对象会先去常量池看是否有自己要创建的对象,有就直接用,没有就创建对象并将对象放在常量池中,下次再创建就可以直接用。而用new创建的对象是放在内存的堆中,所以用==比较每个对象都是不相等的。

27.String与StringBuffer的区别:String长度固定,数据类型只支持字符串,没办法修改值,只能重新赋值,但是重新赋值等于重新实例化一个对象,如果频繁修改对象的话,影响性能,大部分都是采用=赋值,相当于常量池会不断增大,常量池是在方法区中。StringBuffer适合多线程,效率低,StringBuilder适合单线程,效率高

28.Integer.valueof..转包装类,Integer.parseInt..转基本数据类型。

29.for循环完变量会从内存中消除,而while不会。

30.Iterator循环集合,for(Iterator it = arr.iterator();it.hasNext();){it.next()}.

31.System.currentTimeMillis();获取当前时间数值。

32.System.gc();启动垃圾回收。

33.Java时间

java.sql.timestamp、date、time都是通过java.util.date.getTime()获得。

Calendar可以看作是java.util.date的增强版。

34.反射获取类的字节码对象的三种方式:

Class.forName("............")、

类.class、

对象.getClass()

然后在获取构造器Class.getConstructor(),然后在实例化对象,构造器.newInstance()。

原文地址:https://www.cnblogs.com/3chi/p/7476840.html