java基础记录

1.“&”当两边的值不是boolean型值的时候,做位运算。比如,ox0f跟ox31取得最低4位的值ox01.

2.多重循环要用一个信号量对外层循环进行跳出,不要让外层循环空跑。

3.switch可作用于int,byte,short,char,枚举类型,字符串及其包装类型,byte,short,char可隐含转换为int,所以可以,long不可以。

4.short i = i +1 ,错误,short i +=1正确。

           第一种运算自动提升类型为int,类型转换错误。

           第二种jvm做了特殊处理。

5.char变量占两个字节,unicode也占两个字节。char是用来存unicode编码的,汉字也在unicode编码中,所以可以存储汉字。

    但是unicode编码中没有的特殊汉字就不可以。

7. 2 << 3最高效计算2 *8的方法。

8.设计一个上百亿的计算器。

            首先java基础类型中不存在这么大的数,无论使用什么类型都会出现运算溢出的情况。那么就需要我们自定义一个类,一个成员变量表示符号,一个成员变量byte[]表示值,然后再去处理加减乘除。比如,java的BigInterger类。

9.权限的作用域要从,本类,同包,异包,子孙类几个方面阐述。

10.重载与重写

   重写:

        权限只能更小或者一样。

        异常只能子类或者一样。

        如果原方法是private,那就只是重新定义了一个方法。

    重载:

        只能使用参数的个数,参数类型,参数的顺序或者组合进行重载。

        不能使用抛出的异常,返回值进行重载。

         如果原方法是private,那就只是重新定义了一个方法。


11.抽象类可以用main方法,因为main方法是静态的。

12.克隆对象时,往往先克隆父类。

13.asbratct 不能跟同步,静态,native同时使用。

14.静态方法可以重写,但是没有效果。

            重写指的是根据运行时对象的类型来决定调用哪个方法,而不是根据编译时的类型。让我们猜一猜为什么静态方法是比较特殊的?因为它们是类的方法,所以它们在编译阶段就使用编译出来的类型进行绑定了。使用对象引用来访问静态方法只是Java设计者给程序员的*。我们应该直接使用类名来访问静态方法,而不要使用对象引用来访问。

15.在java1.7中,内部类访问方法的局部变量需要定义final,1.8已取消。怎样形式的内部类都可以访问,静态成员变量和非静态,方法的局部变量。只有静态的内部类不能访问成员变量,需要对象点去访问。


16.getClass()方法返回的总是当前调用的类,即使你调用了super.


17.try和finally中都有return语句的时候,结果为执行finally以后的结果。


18.多线程中不推荐使用的方法 和方法介绍:

            stop: 会导致线程释放所有所持有的锁,如果线程处在一种不连续的状态中,可能会被其他的线程修改数据。很难预料结果。

            suspend:线程会停下,但是不会释放锁,所以可能导致死锁。

            wait:可以让线程等待,并且释放当前锁,必须在synchronize中调用

            sleep:让线程沉睡,但不会释放当前锁。

            notify:唤醒线程,但不会释放锁,只是告诉其他线程可以开始竞争资源了。


19.当一个线程进入一个对象的synchronize方法,其他线程还能进入这个对象的其他方法吗?

            其他方法没有加synchronize关键字可以。

            如果加了synchronize关键字,如果前一个方法调用了wait,则可以,反之不可以。

            如果其他方法是静态方法,对象锁是类的字节码则可以。

20.集合

            ArrayList 和 Vector

                    同步性

                    它们都有有初始值,容量不够时会进行自增。ArrayList是0.5倍,Vector是1倍。


            HashTable和HashMap

                    同步性

                    HashMap允许有一个key为null,hashtable不允许。


            List,Set是继承了Collection,Map不是。

            

            ArrayList,Vector,LinkedList效率问题

                    ArrayList和Vector是索引效率很高,因为是数组实现,但是插入效率就会很低。所以LinkedList的插入效率就会                      很 高


          去掉Vector中重复元素的方法

                        HashSet h = new HashSet(Vector)


        Hash类的集合的元素,如果重写equals方法,也必须去重写hashcode



21.序列化

        对象 --- 字节流

        如果tomcat需要持久化session,那么在tomcat重启的过程中session中的对象就必须实现序列化。


22.当一个类继承了一个类,和实现了一个接口。后两者都有一个变量同名,如果在前者中是super,接口名点调用以区分是可以的。比如:

        java基础记录


23.接口是可以多继承的,修改接口中的变量时要意识到这个变量是常量是不能修改的。


24.+= 和 +的区别

     链接

25.编码

        点击打开链接

26.迭代器深入

27.在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过

28.基础类型跟对象比较,且他们都在常量池范围时,等号比较的是值,不是地址。

29.

这里仅仅是调用了run()方法,程序就只能顺序执行;开启线程是调用start()方法,这样才能并发执行。

30.数组命名时名称与[]可以随意排列,但声明的二维数组中第一个中括号中必须要有值,它代表的是在该二维数组中有多少个一维数组。
31.常量可以在构造函数中初始化,byte,short,char相加都会提升类型到int.

1.脚本安装部署

2.jsr303校验功能及国际化。

3.备份方式创建应用。

4.应用转模板功能

5.模板管理

6.数据库配置功能。

7.VPC打通功能。

8.防止跨站脚本

9.shiro