1. 有了基本数据类型,为什么还需要包装类型
1.1有些场合不适合使用基本类型。比如集合能接受的类型为Object,泛型中也必须使用包装类。比如要定义一个分数。分数为空表示没参加考试。基本类型就不合适了,基本类型默认值为0,而包装类型Integer类型默认为空。
1.2包装类型是一个引用类型,是一个类,有属性和方法。比如想把String类型的数据转换为整型,``
String num1="123";
int num2=Integer.parseInt(num1);
parseInt是Integer包装类型提供的一个把字符串转换成int类型的方法。
1.3包装类还有一个重要特性:数据缓存
还是拿Integer来举例,在-128~127区间的数会被缓存,当类加载的时候就创建这256个数对应的对象,并放到名为cache的数组中,调用valueOf()方法时会先判断该数是否在-128~127的区间,如果在则直接获取数组中该对象的引用,如果不在则创建该对象
在自动装箱的时候调用的就是valueOf方法。我们来看下面这段代码:
public static void main(String[] args) {
Integer num1 = 4;
Integer num2 = 4;
System.out.println(num1==num2); //true
Integer num1 = 4,这里发生了自动装箱,调用了ValueOf()方法,因为4在-128~127之间所以num1和num2都指向了缓存中的同一地址,所以用==比较和equls比较返回的都是true.
System.out.println(num1.equals(num2)); //true
Integer num3 = 145;
Integer num4 = 145;
System.out.println(num3==num4);//false因为145不在-128---127区间内
System.out.println(num3.equals(num4));}//true
因为145不在这个范围区间,所以会在堆中生成对象num3和num4分别指向两个不同地址的对象
pojo类中用包装类型,定义局部变量用基本类型
2. 简单讲一下java的跨平台原理
java源程序(.java文件)通过编译器编译成为Class文件(字节码文件),而它的class文件是基于字节码(以byte为单位存储的文件)的,而字节码文件与任何的平台无关,Java虚拟机认识它(只要在不同的平台下部署相应的jre,运行jvm!就可以了)
3. 谈谈你对面向对象的理解
面向对象时一种编程思想。就是把我们的程序模块化、对象化;把具体事务的特征、属性,和通过这些属性来实现一些动作的具体方法放到一个类里,这就是封装(面向对象的三大特征之一);还有继承:子类的一些属性、方法是来自于父类的,只要继承父类就可以直接用,不必在自己的类中重新定义,实现了代码的复用性;如果子类要扩展一些父类没有的功能,就用到面向对象的另外一个特征:多态:重写和重载。重写是子类把从父类继承下来的方法重写一遍,重写后会覆盖父类原有的方法;重载是指一个类中有同名但参数列表不同的方法,可以是参数个数不同,也可以是参数类型或顺序不同。返回值类型可以相同也可以不同。
4.谈谈java跟你所知道的其它的语言相比,有什么优点
1.免费开源;
2.有JVM,跨平台;
3.java是面向对象的;C语言是面向过程的,所有的功能都包含在一个或几个模块中会导致程序单一,无法实现代码的复用。
4.java是功能完善、强大的程序设计语言,可以用来开发可靠,要求严格的应用程序。
5.多线程有几种实现方法?同步有几种实现方法?
1.多线程:继承Thread类和实现Runnable接口。
2.1同步方法:在方法的返回值类型前面加上synchronized关键字;
2.2同步代码块:synchronized(需要同步的对象){...}
6.java中会存在内存泄露吗?请简单描述
存在内存泄漏:指系统中存在无法回收的内存,会导致内存不足或系统崩溃。java中的内存泄漏是指:存在无用但是垃圾回收器无法回收的对象
7. Error和Exception有什么区别? 列出你见过的Exception并简要说明
error表示系统级错误和程序不必处理的异常,恢复不是不肯但是很困难的一种严重问题;比如内存溢出
exception表示需要捕捉或者需要程序进行处理的异常,是一种设计和实现的问题,也就是说,如果程序运行正常,从不会发生的情况。
常见的异常:
NullPointException当操作一个空引用是会出现此异常; NumberFormatException:数据格式转换出现问题是的异常;
ClassCastException:强制类型转换不匹配时出现的异常;
ArrayIndexOutOfBoundsException:数组下标越界异常,当使用一个不存在的数组下标时,出现此异常。
8. 类有哪三个基本特性?各特性的优点?
8.1封装:隐藏对象的属性和实现细节,仅对外暴露公共的访问方式
隐藏信息和细节,使代码模块化,提高安全性;
8.2继承:通过继承可以提高代码复用;
8.3多态:父类中的方法或属性被子类继承后,可以有不同的数据类型或表现出不同的行为。重写和重载。
9.手写冒泡排序
10.手写单例模式:懒汉式和饿汉式
public class mySingle{
public static void mani(String[] args){
mySingle m = mySingle.doGet();
System out println(m);
}
}
class mySingle{
//1.私有化构造方法,不让外界随意new
private mySingle(){};
//2.在类内部创建一个对象
private static mySingle single = new mySingle();
//3.对外提供全局访问点
synchronized static public mySingle doGet(){
return single;
}
}
11.数组中有没有length()这个方法?String有没有length()这个方法?
数组中没有这个方法,但又这个属性,表示数组的长度。
String中有这个方法,用来获取字符串的长度。
12.构造器是否可被重写?
构造器Constructor不能被继承,所有不能被重写,但可以被重载。
每一个类都必须有自己的构造函数,负责自己部分的构造,子类不能覆盖父类的构造函数,相反必须在一开始就调用父类的构造函数。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。