java基础题
1,面向对象的特征有哪些?
面相对象是java的一种编程思想,三大特征有封装,继承,多态.
封装是指:隐藏对象的属性和实现细节,对外提供公共的访问方式,好处是提高代码的复用性和安全性
继承是指:使类与类之间产生父子关系,提高了代码的维护性和复用性,增强了类的耦合性,java中使用单继承,继承的缺点是,耦合性高,java开发的原则的高内聚低耦合.
多态是指:一种事物的多种形态,一定要有继承关系,重写方法,让父类引用指向之类对象,提高了代码的维护性和可扩展性,可以当作参数来使用,父类不能调用之类的方法,要进行强转
2,数据类型有哪几种?
分为基本数据类型和引用数据类型
基本数据类型分为4类8种:整型(byte,short,int,long),字符型(char),浮点型(float,double),布尔型(boolean)
引用数据类型:数组,接口,类,枚举
3,Int和Integer的区别?
java提供两种不同的类型:引用类型和基本数据类型,int是java的基本数据类型,Integer是引用数据类型,Integer是int的封装类,Integer的默认值为null,int的默认值为0.
包装类可以为我们提供一些方法,通过包装类把相同的数据存储在集合中
4,String和StringBuffer和StringBuilder的区别?
(1),String是存放在常量池中的,长度不可变
StringBuffer长度是可变的,底层是char[]来实现的,长度默认为16,如果要存的容量大于16就会增长1.5倍
(2),StringBuilder是线程不安全的,执行效率高,单线程访问
StringBuffer是线程安全的,执行效率慢,多线程访问
5,java中类的组成?
属性和方法
6,&和&&的区别?
&&有短路的效果,
&没有,还可以作为位运算符
7, short s1 = 1; s1 = s1 + 1;有什么错?short s1 = 1; s1 += 1;有什么错?
第一个编译报错,short和int类型做运算,short会自动提升为int类型,int+int会存储到short,放不下报错
第二个可以输出结果为2,底层默认类型转换
8,==和equals的区别?
==比较基本数据类型,比较的是值
equals比较引用数据类型,比较的是地址值
9,静态变量和实例变量的区别?
(1),静态变量属于类,成员变量属于对象
(2),静态变量存储在方法区的静态区,成员变量存储在堆内存中
(3),静态变量随着类的加载而加载.成员变量随着对象的加载而加载
(4),静态方法可以通过类名和对象名调用,成员变量只能通过对象名调用
10,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(X+0.5)即在原来的数字上加上0.5在向下取整
Math.floor向下取整
Math.ceil向上取整
11,Overload和Override的区别?
重载是在同一个类中,方法名相同,方法的参数列表不同(包括参数的类型,数量,顺序)
重写是在具有继承关系的两个类中,或者有实现关系的两个类中,方法名相同,方法的参数列表也相同,子类对父类的已有方法的重写,或者是实现类对接口方法的实现
12,String是否可以被继承?为什么?
不可以,因为java.lang.String是final类型的,因为不可以被继承,不能修改,被final修饰的类不能被其他的类继承
13,abstract class和interface有什么区别?
(1),抽象类可以有构造方法,接口不能有
(2),抽象类有普通成员变量,接口中没有
(3),抽象类可以包含非抽象的普通方法,接口中的方法都是抽象方法,不能有非抽象的方法
(4),抽象类中的抽象方法的访问类型是public,protected,接口中抽象方法只能用public类型的,默认public abstract
14,String s=new String("lll"),创建了几个String Object?
两个,一个在常量池中,一个是堆内存中
15,java中常见的异常?
NullPointerException空指针异常
ClassCastException类型转换异常
ArrayIndexOutOfBoundsException数组下标越界异常
FileNotFoundException文件未找到异常
NumberFormatException数字转换异常
SQLException sql异常
IOException io流异常
NoSuchMethodException 方法异常
16,运行时异常和一般异常的异同点?
异常表示程序运行时可能出现的非正常的状态,运行时异常表示虚拟机的操作中遇到的异常,是一种常见异常
java编译器要求方法必须声明抛出可能发生的非运行时异常,并不要求必须抛出未被捕获的运行时异常
17,final,finally,finalize的区别?
final是声明属性,方法和类,分别表示属性不接遍,方法不可覆盖,类不可被继承
finally是异常处理语句结构的一部分,表示总是执行
finalize是Object的一个方法,在垃圾回收器执行的时候会调用被回收对象的此方法,,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件
18,error和exception有什么区别?
error表示错误,不可能指望程序能处理这样的情况,比如内存溢出
exception表示异常,一种设计或实现问题,不影响程序运行.
19,java有没有goto?
java中的保留字,现在没有在java中使用
20,接口是否可以继承几口,抽象类是否可以实现接口,抽象类是否可以继承实体类
接口可以继承接口,抽象类可以实现接口,抽象类是否可继承实体类的前提是实体类必须有明确的构造函数
21,abstract的method是否可以是static,是否可以同时是native,是否可以是synchronized?
不可以
22,数组中有么有length()?String有没有length()
数组中没有length()方法,有length属性,String中有这个方法
23,switch是否能作用在byte上,能否作用在long上,是哦度能作用在String上
switch(x),x是一个整数表达式,因此case语句的参数应该是int,short,char或者byte,
long,String不能作用于switch上
24,try{}里有一个rerurn语句,在try之后的finally{}里的code会不会被执行,什么时候执行,在return前还是后?
会执行,在return前执行
25,用最有效率的方法算出2*几等于8?
2<<3
26,两个对象值相同(x.eqlals(y)==true),但是可以有不同的hashcode,这句话对不对?
不对,有相同的hashcode
27,当一个对象被当做参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递,java编程语言只有值传递,当一个对象实例作为一个参数传递到方法中时,参数的值就是该对象的引用,对象的内容可以在被调用的方法中改变,但对象的英语是不会改变的.
28,java的接口和c++的需类的相同和不同处
由于java不支持多继承,有可能某个类或者对象要使用分别在几个类或者对象里面的方法或属性,现有的单继承不能满足要求,与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码,当一个类实现了接口后,该类要实现接口里面的所有的方法和属性,并且接口里面的属性在默认状态下都是public static,所有的方法默认情况下都是public,一个类可以实现多个接口
29,java中的异常处理机制的简单原理和应用
当java程序违反了java的语义规则时,java虚拟机就会将发生的错误表示为一个异常,违反语义规则包括两种情况,一种是java类库内置的语义检查,另一种是java允许程序员扩展这种语义检查,程序员可以自己创建自己的异常,并自由选择在何时用throw关键字引发异常,所有的异常都是java.lang.thowable的子类
30,垃圾回收的优点和原理,并考虑2种回收机制
Java中一个特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序时不在需要考虑内存管理.由于有个垃圾回收机制,java中的对象不在有作用域的概念,只有对象的引用才有作用域,垃圾回收可以有效的防止内存泄漏,有效的可以使用内存,垃圾回收器通常是作为一个单独的级别的线程运行,不可预知的情况下堆内存中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或者所有的对象进行垃圾回收,回收机制有赋值垃圾回收和标记垃圾回收,增量垃圾回收.
31,char型变量中能不能存储一个中文汉字,为什么?
java采用unicode,2个字节(16位)来表示一个字符, 无论是汉字还是数字字母,或其他语言。
char 在java中是2个字节。
32,描述一下jvm加载class文件的原理机制
类加载器的作用是加载类文件.class到内存.
使用了双亲委托机制
有三个类加载器,bootstrapClassLoader系统类加载器,AppClassLoader英用类加载器,ExtClassLoader扩展类加载器
33,垃圾回收期的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
对于gc来说,当程序员创建对象时,gc就开始监控者对象的地址,大小,以及使用情况,通常,gc采用又向图的方式记录和管理堆中的所有对象,通过这种方法确定那些对象是可达的,那些是不可达的,当gc确定一些对象为不可达时,gc就有责任回收这些内存空间,
可以马上回收.
程序员可以手动的执行System.gc(),通知gc运行,但是java语言规范并不保证gc一定会执行
34,Static Nested Class 和 Inner Class的不同
Static Nested Class是被声明为静态的内部类,他可以不依赖于外部类实例被实例化,而通常的内部类需要在外部类实例化后才能实例化
35,gc是什么,为什么要有gc?
gc是垃圾回收的意思,内存处理是编程人员容易出现的问题,忘记或者错误的你村会收回导致程序或系统的不稳定甚至崩溃,java提供的gc功能可以自动检测对象是否超过作用域从而达到自动回收内存的目的,java语言没有提供释放已分配内存的显示操作方法
36,一个.java源文件中是否可以包含多个类(不是内部类)有什么限制
可以,必须有一个类名和文件名相同
37,java语言如何进行异常处理,关键字throw,throws分别代表什么?在try中可以抛异常吗?
java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供接口,在java中,每一个异常都是一个对象,它是throwable类或者其他子类的实例.当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理,java的异常处理通过try,catch,throw,throws,finally来实现,一般使用try来执行一段程序,如果出现异常,系统会抛出throws一个异常,这时可以通过它的类型来捕捉catch它,或者最后finally由缺省处理器来处理
由try指定一块异常的程序,在try程序的后面,应包含一个catch子句来指定你想要捕捉的异常的类型
throw用来明确的抛出一个异常
throws用来标明一个成员函数可能抛出的各种异常
finally为确保一段代码不管发生什么异常,都被执行的一段代码
可以再成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码,每当遇到一个try语句,异常的框架就放到堆栈上面,直到所有的try语句都完成,如果下一级的try没有对异常进行处理,堆栈会展开,知道遇到有处理这种异常的try语句.
38,java中会存在内存泄漏吗?
会,如int i,i2;return(i-i2),i为足够大的整数,i2为足够大的负数,结果会造成溢位,导致错误.
39,java中实现多态的机制是什么?
方法的重写和重载是java多态性的不同表现,重写是父类与子类之间多态的一种表现,重载是一个类中多态的一种表现.
40,是否可以从一个static方法内部发出对非static方法的调用?
不可以,如果包含对象的method(),不能保证对象初始化
41,写clone()方法时,通常有一行代码,是什么?
clone有缺省行为,super.clone(),负责产生正确大小的空间,并逐位赋值.
42,在java中,如何调出当前的多重嵌套循环?
使用break,return方法.
43,内部类可以引用他包含类的成员吗?有没有什么限制?
一个内部类对象可以访问创建他的外部类对象的内容