面向对象相关热点问题的解答(二)

热点问题一:* java 打印出九九乘法表

代码块如下:

public class Test_99 {

/**

* java 打印出九九乘法表

*/

public static void main(String[] args) {

for(int i=1;i

for(int j=1;j

System.out.print(j+"*"+i+"="+(i*j)+"\t");

}

System.out.println();

}

}

}

热点问题二:交换排序—冒泡排序(Bubble Sort)

基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

代码块入下:

//冒泡排序

//假如有10个数字,那么就会进行10次排序,每次排序都是把第i个位置和第i+1进行交换(如果小的话),

//每换一次,小的数字就会往前挪了一步,就算最小的放在最后,10次比较也会到第一位了吧。。。

//这个算法的空间复杂度低,时间复杂度就有点高了。。。固定次数

热点问题三:int和Integer有什么区别?

int 是基本数据类型

Integer是其包装类,注意是一个类

int是基本类型(Primitive),Integer是引用类型(Warpper)。

Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

int的变量不需要实例化,Interger的变量需要实例化。

int的默认值为0,Integer的默认值为null。

int一般做数值参数,Integer一般做类型转换。

Integer是对象,用一个引用指向这个对象,而int是基本类型,直接存储数值。

java 为每个原始类型提供了包装类型:

- 原始类型: boolean,char,byte,short,int,long,float,double

- 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

代码块如下:

举例说明

ArrayList al=new ArrayList();

int n=40;

Integer nI=new Integer(n);

al.add(n);//不可以

al.add(nI);//可以

并且泛型定义时也不支持int: 如:List list = new ArrayList();可以 而List list = new ArrayList();则不行。

int 是在栈里创建的,Integer是在堆里创建的。栈里创建的变量要比在堆创建的速度快得多

热点问题四:==”与equals()的区别

1.Java里面“==”与equals()的区别:前者比较的是地址,后者比较的是内容。

==是指对内存地址进行比较 ,equals()是对字符串的内容进行比较

==指引用是否相同,equals()指的是值是否相同

==针对的是整数类型的判断。equals()针对的是string类型的判断

string类型的数据 每一个都是储存在不同的栈中 相同内容的string数据都会储存在不同的地址中 所以一定要使用equals().

代码块如下:

public static void main(String[] args) {

String str1 = "hello";

String str2 = "hello"; //str1 和 str2 都指向了匿名对象"hello"

//str1 == str2;

System.out.println(str1==str2);

System.out.println(str1.equals(str2));

String str3 = new String("hello");

String str4 = new String("hello"); //str3 和 str4 很明显指向的是不同的对象

System.out.println(str3.equals(str4));

System.out.println(str3==str4);

}

运行结果如下:true true true false

若是使用String类来创建对象,由于String类里对equals()进行了重写(overwrite/override),所以比较的是两个对象的成员。比如String str1=new Sting(1,2,3)和String str2=new String(1,2,3) 那么str1.equals(str2)结果就是true!

热点问题五:数组有没有length()方法?String有没有length()方法?

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

热点问题六:String s = new String(“xyz”);创建了几个字符串对象?

答:两个对象,一个是静态区的”xyz”,一个是用new创建在堆上的对象。

热点问题七:接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?

答:接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,抽象类可继承具体类也可以继承抽象类。

热点问题八:Java 中的final关键字有哪些用法?

答:(1)修饰类:表示该类不能被继承;(2)修饰方法:表示方法不能被重写;(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

热点问题九:怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?

答:代码如下所示:

s1========>>>你好

s2========>>>????

热点问题十:列出一些你常见的运行时异常?

- ArithmeticException(算术异常)

- ClassCastException (类转换异常)

- IllegalArgumentException (非法参数异常)

- IndexOutOfBoundsException (下标越界异常)

- NullPointerException (空指针异常)

- SecurityException (安全异常)

热点问题十一:List、Map、Set三个接口存取元素时,各有什么特点?

答:List以特定索引来存取元素,可以有重复元素。Set不能存放重复元素(用对象的equals()方法来区分元素是否重复)。Map保存键值对(key-value pair)映射,映射关系可以是一对一或多对一。Set和Map容器都有基于哈希存储和排序树的两种实现版本,基于哈希存储的版本理论存取时间复杂度为O(1),而基于排序树版本的实现在插入或删除元素时会按照元素或元素的键(key)构成排序树从而达到排序和去重的效果。

热点问题十二:java中的堆与栈

java中堆和栈都是用来存放数据的地方,下面来讲讲这两种存储方式的特点。

栈中主要存储八大基本类型的数据:bolean、byte、short、int、long、float、double、char,以及对象的引用

inta=1;//step1intb=1;//step2

intb=2;//step3

很明显,int类型属于八大基本类型,将存储在栈中。系统会先执行step1,首先创建一个a的

引用,再查找栈中是否已经存在int类型的值1,如果存在,将a指向它;如果不存在,则将1

放进栈中,再将a指向它。

然后再执行step2,过程雷同step1,不过因为栈中已经存在1,所以b直接指向已存在的1。

最后执行step3,它会先判断栈中是否已存2,若存在,则将b指向2;若不存在,则现在栈中

存入2,再指向它。而a的值不受影响,仍然是1;

堆在运行时动态分配内存,它的优势是可以动态地分配内存大小,

生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。

但缺点是,由于要在运行时动态分配内存,存取速度较慢。

String a=newString("abc");

//step1String b=newString("abc");

//step2System.out.println(a==b);

//step3 output:false

java中创建的对象都保存在堆中,通常以new的方式创建。与栈不同的是,

它不会判断创建的对象的值是否已存在,直接重新分配空间存储。

所以上面代码中step3的结果为false。

以上总结的热点问题仅供参考,

后面还会继续整理相关热点问题

敬请期待吧

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180318G1CBZU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券