Java基础面试题附带答案(五)

061final与finally、finalize 的区别?

1)final:用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,被其修饰的类不可继承。

2)finally:异常处理语句结构的一部分,表示总是执行。

3)finalize:Object 类的一个方法,当java对象没有更多的引用指向的时候,系统会自动的由垃圾回收器来负责调用此方法进行回收前的准备工作和垃圾回收。

062静态变量和实例变量区别?

静态变量: 静态变量由于不属于任何实例对象,属于类的,所以在内存中只会有一份,在类的 加载过程中,JVM只为静态变量分配一次内存空间。

实例变量: 每次创建对象,都会为每个对象分配成员变量内存空间,实例变量是属于实例对象 的,在内存中,创建几次对象,就有几份成员变量。

063静态方法和实例方法有何不同?

静态方法和实例方法的区别主要体现在两个方面:

在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的 方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。

静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法), 而不允许访问实例成员变量和实例方法;实例方法则无此限制。

064指出下面程序的运行结果?

class A{ 
    static{ 
        System.out.print("1"); 
    } 
    public A(){ 
        System.out.print("2"); 
    } 
} 
class B extends A{ 
    static{ 
        System.out.print("a"); 
    } 
    public B(){ 
        System.out.print("b"); 
    } 
} 
public class Hello{ 
    public static void main(String[] ars){ 
        A ab = new B(); //执行到此处,结果: 1a2b 
        ab = new B(); //执行到此处,结果: 1a2b2b 
    } 
} 

输出结果为 1a2b2b;

分析:类的 static 代码段,可以看作是类首次加载(虚拟机加载)执行的代码,而对于类加载,首先要执行其基类的构造,再执行其本身的构造。

065访问修饰符public,private,protected,以及不写(默认)时的区别?

修饰符

当前类

同包

子类

其它包

public

protected

默认(缺省)

private

类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开 (public),对于不是同一个包中的其他类相当于私有(private)。受保护(protected)对 子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。Java中,外部类的修饰符 只能是public或默认,类的成员(包括内部类)的修饰符可以是以上四种。

066Java有没有goto?

goto 是Java中的保留字,在目前版本的Java中没有使用。(根据James Gosling(Java之 父)编写的《The Java Programming Language》一书的附录中给出了一个Java关键字列 表,其中有goto和const,但是这两个是目前无法使用的关键字,因此有些地方将其称之为保 留字,其实保留字这个词应该有更广泛的意义,因为熟悉C语言的程序员都知道,在系统类库 中使用过的有特殊意义的单词或单词的组合都被视为保留字)

067Java 的接口和 C++的虚类的相同和不同处?

由于 Java 不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是 public.一个类可以实现多个接口。

068String 是最基本的数据类型吗?

不是。Java 中的基本数据类型只有 8 个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)外,剩下的都是引用类型(reference type)

069String、StringBuffer、StringBuilder区别及使用场景?

1)String是只读的字符串,因此String引用的字符串内容是不能被改变的。

String str = "abc";

str = "bcd";

如上,第一行str 仅仅是一个引用对象,它指向一个字符串对象“abc”。第二行代码的含义是让 str 重新指向了一个新的字符串“bcd”对象,而“abc”对象并没有任何改变

2)StringBuffer/StringBuilder 表示的字符串对象可以直接进行修改。

3)StringBuilder 是 Java5 中引入的,它和 StringBuffer 的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方法都没有被 synchronized 修饰,因此它的效率理论上也比 StringBuffer 要高。

070String str = “i” 和String str = new String(“1”)一样吗?

不一样,因为内存的分配方式不一样。String str = "i"的方式JVM会将其分配到常量池中,而 String str = new String("i")JVM会将其分配到堆内存中。

071是否可以继承String类?

String 类是final类,不可以被继承。

补充:继承String本身就是一个错误的行为,对String类型最好的重用方式是关联关系 (Has-A)和依赖关系(Use-A)而不是继承关系(Is-A)。

072String s=new String(“xyz”);创建了几个字符串对象

两个对象,一个是静态存储区的"xyz",一个是用 new 创建在堆上的对象。

073String类的常用方法有哪些?

indexof();返回指定字符的的索引。

charAt();返回指定索引处的字符。

replace();字符串替换。

trim();去除字符串两端空格。

splt();字符串分割,返回分割后的字符串数组。

getBytes();返回字符串byte类型数组。

length();返回字符串长度。

toLowerCase();将字符串转换为小写字母。

toUpperCase();将字符串转换为大写字母。

substring();字符串截取。

equals();比较字符串是否相等。

074数组有没有 length()方法?String 有没有 length()方法?

数组没有 length()方法,有 length 的属性。String 有 length()方法。JavaScript 中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java混淆

075怎样将 GB2312 编码的字符串转换为 ISO-8859-1 编码的字符串?

String s1 = "你好"; String s2 = newString(s1.getBytes("GB2312"), "ISO-8859-1");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值