![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试宝典
toby王
这个作者很懒,什么都没留下…
展开
-
如果try块里面有return语句,后面finally块里的语句什么时候执行?
应该是在return中间执行。先把结果返回,然后执行finally里面的语句,最后,程序逻辑返回到主函数。转载 2017-02-16 10:52:31 · 598 阅读 · 0 评论 -
内部类
内部类就是在一个类的内部定义的类,内部类中不能定义静态成员,内部类可以直接访问外部类中的成员变量,内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中。 在方法体外面定义的内部类的访问类型可以是public,protected,friendly,private等4种类型,这就好像类中定义的成员变量有4中访问类型一样,它们决定这个内部类的定义对其他类是否可见;对于这种情况,我们也可以在外面转载 2017-02-12 16:40:08 · 203 阅读 · 0 评论 -
抽象方法是否可以是静态的,是否可以是native,是否可以是synchronized
1.抽象方法不能是静态的,因为抽象方法要被子类实现,而静态方法属于一个类,不能同时属于两个类。 2.native方法表示该方法要用另外一种依赖平台的语言实现,不存在着被子类实现的问题,所以不能是抽象的,即abstract与native不能共存。 3.synchronized方法的锁对象为this,而抽象方法无法确定this是什么,所以不能共存。转载 2017-02-12 14:49:29 · 3218 阅读 · 0 评论 -
接口和抽象类的区别
语法区别: 1.抽象类可有有构造方法,接口中不能有构造方法。 2.抽象类中可以有普通成员变量,接口中没有普通成员变量。 3.抽象类中可以包含非抽象的普通方法,接口中所有方法都必须是抽象的,不能有非抽象的普通方法。 4.抽象类中的抽象方法的访问类型可以是public和protected,但接口中的抽象方法只能是public,并且默认即为public abstract类型。 5.抽象类中可以包转载 2017-02-12 14:42:46 · 139 阅读 · 0 评论 -
面向对象的特征有哪些方面?
1.封装: 封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。在面向对象的编程语言中,对象是封装的最基本单位,面向对象的封装比传统语言的封装更为清晰、更为有力。面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个“模块”中,也就是一个类中,属性用变量定义,行为用方法进行定义,方法可以直接访问同一个对象中的属性。通转载 2017-02-11 19:34:00 · 345 阅读 · 0 评论 -
写clone()方法时,通常有一行什么代码?
super.clone(),这是clone()方法的默认行为,因为首先要把父类中的成员复制之后,然后才能复制自己的成员。转载 2017-02-11 19:03:12 · 447 阅读 · 0 评论 -
接口和抽象类的继承和实现
问题:接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承具体类?抽象类中是否可以有静态的main方法? 答案: 全都可以。只要明白接口、抽象类和普通类的区别即可。转载 2017-02-11 19:00:28 · 243 阅读 · 0 评论 -
构造器能否被重写?
首先,构造器是不能被继承的,因为每个类的类名都不相同,而构造器名称与类名相同,所以根本谈不上继承。 又由于构造器不能继承,所以就不能被重写。但是,在同一个类中,构造器是可以被重载的。转载 2017-02-10 12:21:32 · 11694 阅读 · 0 评论 -
Overload和Override的区别
Overload是重载的意思;Override是覆盖的意思,也就是重写。 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。 重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的转载 2017-02-10 12:15:17 · 286 阅读 · 0 评论 -
匿名内部类是否可以继承其他类或实现接口
可以。而且必须实现接口或继承其他类。转载 2017-02-13 16:38:12 · 1085 阅读 · 0 评论 -
super.getClass()方法调用
由于getClass()在Object类中定义成了final,子类不能覆盖该方法,getClass()方法的用法如下getClasspublic final Class<?> getClass()返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。 实际结果类型是 Class<? extends |X|>,其中 |X|转载 2017-02-13 16:59:09 · 265 阅读 · 0 评论 -
String s = "a" +"b" + "c" + "d";这条语句创建了几个对象?
这条语句只创建了一个对象,因为对于字符串常量直接相加的表达式,编译器在编译期间会进行优化,直接将其编译成常量相加的结果。所以只创建了一个String对象。转载 2017-02-16 10:45:58 · 2272 阅读 · 0 评论 -
如何把一段逗号分割的字符串转换成一个数组?
方法一: public static void main(String[] args) { String str = "abc,de,f,ghij,klmnopq"; String[] result = str.split(","); for (int i = 0; i < result.length; i++) { Sy转载 2017-02-15 12:28:43 · 3962 阅读 · 0 评论 -
数组有没有length()方法?String类有没有?
数组只有length属性,String才有length()方法。转载 2017-02-15 08:59:18 · 453 阅读 · 0 评论 -
String和StringBuffer的区别
首先String和StringBuffer都可以存储和操作字符串,都是final类。 但是String的对象不可变,而StringBuffer的字符串可以改变。 String重写了equals和hashCode方法,而StringBuffer没有。 另外StringBuffer是线程安全的,但是效率低;StringBuilder是非线程安全的,但是效率高。转载 2017-02-15 08:55:19 · 163 阅读 · 0 评论 -
String s = new String("xyz");创建了几个String对象?
如果常量“xyz”以前使用过,那么可以直接利用常量池中的“xyz”来new一个新的String对象,这时,创建了一个对象。 如果没有使用过“xyz”,那么会先在常量池中创建“xyz”对象,然后再new一个新的String对象,这时,创建了两个对象。转载 2017-02-14 09:10:32 · 511 阅读 · 0 评论 -
String类是否可以被继承?
String类是final类,所以不可以被继承。转载 2017-02-14 09:06:18 · 2144 阅读 · 0 评论 -
String对象不可变
String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容是否改变?不会改变。因为String类为final类型,它的所有对象都是不可变对象。在这段代码中,s原先指向一个String对象,内容是”Hello”,它在字符串常量池中。然后我们对s进行了+操作,这时s不再指向原来那个对象了,而指向另一个String对象,内容为“Hello转载 2017-02-14 09:05:09 · 174 阅读 · 0 评论 -
String类是最基本的数据类型吗?
基本数据类型包括boolean、byte、char、short、int、long、float、double。 String类是final类型的,不可以继承这个类,也不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类。转载 2017-02-13 17:02:52 · 322 阅读 · 0 评论 -
Java中四个作用域的可见范围
作用域 当前类 同一包 子孙类 其他包 public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × ×转载 2017-02-10 10:28:33 · 1938 阅读 · 0 评论 -
实现线程有几种方式?
第一种: new Thread(){}.start();这表示调用Thread子类对象的run方法,new Thread(){}表示一个Thread的匿名子类的实例对象,子类加上run方法后的代码如下:new Thread(){ public void run(){ }}.start();第二种: new Thread(new Runnable(){}).start();这表示转载 2017-02-18 10:45:29 · 313 阅读 · 0 评论 -
throws,throw,try,catch,finally的含义
throws 捕获并向外抛出异常 throw 抛出异常 try catch 内部捕获异常并做自定义处理 finally 无论是否有异常总会被处理转载 2017-02-18 10:17:21 · 505 阅读 · 0 评论 -
说说&和&&的区别?
&和&&都可以用作逻辑运算符,表示逻辑与。当运算符两边的表达式都为true时,结果才为true;否则,结果为false。另外&&还具有短路功能,也就是说,当&&左边的表达式结果为false时,将不再运算&&右边的表达式,结果肯定为false。例如,对于if(str!=null&&!str.equals(“”)),当str为null时,不会对&&右边的表达式进行运算,否则会出现空指针异常。&还可以用作转载 2016-12-29 22:26:24 · 4987 阅读 · 0 评论 -
Java有没有goto?
goto是Java中的保留字,也就是说,现在还没有在Java中使用goto,但是在将来的jdk版本中有可能使用goto。转载 2016-12-29 22:17:06 · 1322 阅读 · 0 评论 -
一个Java源文件是否可以有多个类?有什么限制?
Java源文件可以有多个类,而且源文件名必须与public类的类名相同。正因为如此,一个Java源文件只能定义一个public类。转载 2016-12-29 22:14:45 · 345 阅读 · 0 评论 -
是否可以从一个static方法内部调用一个非static方法?
不可以。因为非static方法属于某个对象,也叫实例方法,必须创建一个对象后,才可以调用该对象的该非static方法。 而static方法(静态方法)也叫类方法,属于某个类,可以直接通过类名调用,不用创建对象。 也就是说,当调用一个static方法时,可能还没有创建任何实例对象,此时不能调用非static方法。转载 2017-01-03 23:47:02 · 2084 阅读 · 0 评论 -
静态变量和实例变量的区别
在语法定义上:静态变量前要加static关键字,而实例变量前不加。 在程序运行上:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配内存空间,才能使用这个实例变量。静态变量属于类,也称为类变量,只要程序加载了类的字节码文件,不用创建任何实例对象,静态变量就会被分配内存空间,静态变量就可以使用了。 另外,静态成员变量必须由程序员显示指定初始值。如果不指定初始值,将会是系统默认转载 2017-01-03 23:39:46 · 225 阅读 · 0 评论 -
==和equals方法有什么区别?
当使用==来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同),则只要两个变量的值相等,就将返回true。 但对于两个引用类型变量,只有它们指向同一个对象时,==才会返回true。==不可用于比较类型上没有父子关系的两个对象。 equals方法是Object类提供的一个实例方法,因此所有引用变量都可调用该方法来判断是否与其他引用变量相等。但是Obje转载 2017-01-03 23:26:16 · 248 阅读 · 0 评论 -
final变量
final成员变量final修饰的成员变量必须由程序员显示地指定初始值。对于final修饰的 成员变量而言,一旦有了初始值,就不能被重新赋值,如果既没有在定义成员变量时指定初始值,也没有在初始化块、构造器中为成员变量指定初始值,那么这些成员变量的值将一直是系统默认的初始值,没有意义。final修饰变量规则如下。类变量:必须在静态初始化块中指定初始值或声明该变量时指定初始值,而且只能在两个地方的其中之转载 2017-01-02 00:29:33 · 284 阅读 · 0 评论 -
用最有效率的方法算出2乘以8等于几?
位运算将一个数左移n位,相当于乘以2的n次方。位运算是cpu直接支持的,通过硬件来操作,效率最高。 所以最有效率的计算方法是2 << 3转载 2017-01-01 23:36:28 · 768 阅读 · 0 评论 -
在Java中如何跳出当前的多重循环?
可以通过标签实现,在外层循环语句前定义一个标签,然后再里层循环中使用break语句跳出到外层循环。例如:label:for(int i = 0;i<10;i++){ for(int j = 0;j<10;j++){ System.out.println("i = " + i + ",j = " + j); if(j == 5) break label;转载 2016-12-30 22:04:29 · 370 阅读 · 0 评论 -
switch语句的表达式可以是哪些类型?
在switch(expression)中,expression只能是一个整数表达式或者枚举常量,整数表达式可以是int类型或Integer包装类型。由于,byte,short,char都可以隐式转换为int类型,所以,这些类型也可以用作表达式。另外jdk7以后,switch表达式也可以为String类型,具体原理参考这位大神的博客。 http://blog.csdn.net/queenjade/转载 2016-12-30 22:16:30 · 28381 阅读 · 0 评论 -
error和exception的区别
error一般指与虚拟机相关的严重问题,如系统崩溃,虚拟机错误,内存溢出等等,对于这类问题,程序很难处理,一般需要终止程序。 exception表示程序可以处理的问题,可以捕获且可能恢复。这是一种设计或实现问题。也就是说,如果程序运行正常,从不会发生的情况。常见的异常;ArrayIndexOutOfBoundsException 数组下标越界异常,ArithmaticException 算数异常转载 2017-02-17 09:49:57 · 393 阅读 · 0 评论 -
空指针
下面代码有什么不妥之处?1.if(username.equals("zxx")){}username可能为NULL,会提示空指针错误;改为"zxx".equals(username)2.int x=1; return x==1?true:false;这个改为return x==1即可!转载 2017-02-09 08:43:24 · 164 阅读 · 0 评论 -
Math类中ceil、floor和round的用法
Math类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们英文名称的含义对应,例如,ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果为-11;floor的英文含义是地板,该方法就表示向下取整,Math.floor(11.6)的结果为11,Math.floor(-11.6)的结果为-转载 2017-02-09 08:38:00 · 544 阅读 · 1 评论 -
运行时异常和一般异常的区别
首先,异常表示程序运行中出现的非正常状态。 运行时异常表示虚拟机的通常操作中可能遇到的异常,当出现运行时异常时,由虚拟机接管,系统会把异常一直往上抛,一直遇到处理代码,如果没有处理代码,要么线程终止,要么程序终止。 一般异常比如IO异常或SQL异常,Java编译器要求我们必须对这些异常进行catch或者声明抛出,但是并不要求对运行时异常进行处理。转载 2017-02-17 09:38:33 · 484 阅读 · 0 评论 -
final,finally,finalize的区别
final用于声明属性,方法和类。分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。转载 2017-02-17 09:29:13 · 210 阅读 · 0 评论 -
try与finally同时存在的问题
先看下列代码public class SmallT { public static void main(String[] args) { SmallT t = new SmallT(); int b = t.get(); System.out.println(b); } private int get() { tr转载 2017-02-17 09:22:41 · 340 阅读 · 0 评论 -
Integer与int的区别
int是Java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是Java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。在JSP开发中,Integer的默认值为null,所以用EL表达转载 2017-02-08 22:10:00 · 176 阅读 · 0 评论 -
short s1 = 1;s1 = s1 +1;有错吗?short s1 = 1;s1 += 1;有错吗?
对于第一种情况,会报错,原因如下。 当一个算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。分为两种情况,第一,所有byte类型、short类型和char类型都将被提升为int类型。第二,整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。 对于第二种情况,则不会出错。因为+=是Java语言规定的运算符,它与s1 = s1 + 1的底层机制不一样,编译转载 2016-12-30 22:37:05 · 367 阅读 · 0 评论