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;
    }
    }

image.png

11.数组中有没有length()这个方法?String有没有length()这个方法?

数组中没有这个方法,但又这个属性,表示数组的长度。
String中有这个方法,用来获取字符串的长度。

12.构造器是否可被重写?

构造器Constructor不能被继承,所有不能被重写,但可以被重载。
每一个类都必须有自己的构造函数,负责自己部分的构造,子类不能覆盖父类的构造函数,相反必须在一开始就调用父类的构造函数。


!大个
7 声望0 粉丝

下一篇 »
JT01