1.八种基本数据类型的大小,以及他们的封装类
2.Switch 能用String作为参数么
jdk1.7之前不可以
jdk1.7及以后版本可以将String作为switch参数进行传递,其原理就是将字符串转换成hashCode值,然后在进行equals比较,也就是编译器在编译期间给代码做了转换。
3.equals与==的区别
equals是判断两个变量或者实例指向同一个内存空间的值是不是相同
而==是判断两个变量或者实例是不是指向同一个内存空间
举个通俗的例子来说,==是判断两个人是不是住在同一个地址,而equals是判断同一个地址里住的人是不是同一个
4.Object 默认方法
Object是所有类的父类,任何类都默认继承Object。
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常
在Object中与==是一样的,子类一般需要重写该方法
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到
hashCode 同一对象多次调用hashCode方法应该返回同一int值
final方法,获得运行时类型
使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生:
1. 其他线程调用了该对象的notify方法
2. 其他线程调用了该对象的notifyAll方法
3. 其他线程调用了interrupt中断该线程
4. 时间间隔到了
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常
唤醒在该对象上等待的某个线程
唤醒在该对象上等待的所有线程
转换成字符串,一般子类都有重写
5.java四种引用
强引用
软引用
虚引用
弱引用
6.Collection接口包结构,与Collections的区别
Collection是集合类的上级接口,子接口主要有Set 、List、Deque。
Collections是针对集合类的一个帮助类,提供了操作集合的工具方法:一系列静态方法实现对各种集合的搜索、排序、替换和线程安全化等操作。
7.try,catch,finally,try里面有return,finally一定会执行么
一定会执行,但是有一下这个情况:
执行完catch内的代码后,会把结果值暂时保存,然后执行finally中的代码,如果finally中没有return,则直接把保存的值返回。如果finally中有return,则值会被finally改变,再返回。
而如果finally中没有return,返回的值好像也有部分出乎我们的意料。可以这样理解吧,catch中的结果值会被final修饰,当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。
8.异常
运行时异常、检查时异常、error
1)RuntimeException及其子类都被称为运行时异常。
特点:Java编译器不会检查它。也就是说,当程序中可能出现这类异常时,倘若既"没有通过throws声明抛出它",也"没有用try-catch语句捕获它",还是会编译通过
2)Exception类本身,以及Exception的子类中除了"运行时异常"之外的其它子类都属于被检查异常。
特点 : Java编译器会检查它。 此类异常,要么通过throws进行声明抛出,要么通过try-catch进行捕获处理,否则不能通过编译。如自定义异常
3) Error类及其子类。
特点 : 和运行时异常一样,编译器也不会对错误进行检查。
当资源不足、约束失败、或是其它程序无法继续运行的条件发生时,就产生错误。程序本身无法修复这些错误的。例如,VirtualMachineError就属于错误。出现这种错误会导致程序终止运行。OutOfMemoryError、ThreadDeath。
常见的OOM
查询数据时,将大量用户加载都内存中
9.Java(OOP)面向对象的三个特征与含义
封装:将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公布给其它对象。在Java中能使用private、protected、public三种修饰符或不用(即默认defalut)对外部对象访问该对象的属性和行为进行限制。
继承:子类可以继承父类的属性和行为,亦即父对象拥有的属性和行为,其子对象也就拥有了这些属性和行为。
多态:更倾向于使用java中的固定用法,即overriding和overload。多态则是体现在overriding上,而overload则不属于面向对象中多态的范畴,因为overload(过载)概念在非面向对象中也存在。overriding是面向对象中的多态,因为overriding是与继承紧密联系,是面向对象所特有的。多态是指父对象中的同一个行为能在其多个子对象中有不同的表现。也就是说子对象可以使用重写父对象中的行为,使其拥有不同于父对象和其它子对象的表现,这就是overriding。
多态的条件:一、要有继承;二、要有重写;三、父类引用指向子类对象。
10.int和Integer的区别
1)int比Integer更快更高效,因为int是基本数据类型,直接存储在方法区的常量池中,而integer存储的是对象(堆)的引用,两个Integer对象值相同,但是确不等。
2)integer允许为null,而int类型变量在使用时,必须初始化
3)自动拆箱和装箱
4)Integer可以为泛型,但是int不可
部分内容摘自网络,侵联删,谢谢