1.基本数据类型
byte 8位; shout 16位; int 32位; long 64位;
float(浮点型) 32位 ; double(双精度) 64位;
char(字符型) 16位; boolean(布尔) 1位
2.基本数据类型和封装类的区别
1.内存位置:基本数据类型在栈中;封装类对象在堆中;
2.默认值:基本数据类型0或false;封装类:null;
3.传参方面:基本数据类型传递值;包装类传递地址;
4.装箱和拆箱:装箱:integer i =1;拆箱:int a=new Integer(10);
3.接口和抽象类的区别
1.接口多实现,抽象类单继承;
2.接口中只有方法的定义没有方法的实现
3.接口中只有常量,抽象类中可以有变量;
4.实现接口需要实现接口中的所有方法,继承抽象类不需要实现所有的方法;
5.抽象类中可以定义非抽象方法;
6.接口中没有构造方法,抽象类可以有构造方法。
4.Java中重载和重写的区别
1.重载要求方法名相同,参数列表不同;重写方法名相同,参数列表相同;
2.重写用在具有继承关系的子类中;重载用在本类中。
5.文件输入,输出分别是什么流
文件输入:FileInputStream、FileReader、BufferedInputstream、BufferedReader;
文件输出:FileOutputStream、FileWriter、BufferedOutputstream、BufferedWriter
按照流划分:
字节 字节流,字符流
方向 输入流,输出流
功能 字节流 处理流
6.常见的异常
运行异常:
NullpointerException空指针异常
ArrayIndexOutofBoundsException数组下标越界
FileNotFoundException
受检异常:
SQLException;IOException;ClassNotFoundException
7.二分查找
要求:(1)必须采用顺序存储(2)必须按关键字大小有序排列
原理:
将数组分为三部分,依次是中值(所谓中值就是数组中间位置的值)前,中值,中值后;
将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,等于中值直接返回,然后依次是一个递归循环的过程,前半部分或后半部分继续分解为三部分。
8.递归及用法
自己调用自己的方法,要求:必须有表示结束的条件;
应用:查询后代数据;阶乘;斐波那契数列
9.多态的理解
分为赋值多态和传参多态两种
赋值:通过多态,只能调用子类中的重写的方法,不能表用子类特有的方法
传参:形参为父类,实参为子类。
接口和类中存在多态
建立耦合(联系),用在赋值传参。
条件:继承,重写,向上转型
10.异常和错误的区别
Error(错误)是系统中的错误,程序员不能改变和处理的,是在程序编写时的错误,只能通过修改代码才能修正;
Exception(异常)表示程序可以处理的异常,可以捕获且可以恢复。
11.equals底层是怎么实现
比较地址,返回true,判断是不是字符串,(value当前字符串的变量)拿到数组长度,判断长度,赋值数组,比较每一个值
12.谈谈对面向对象的理解
面向对象是向现实世界模型的自然延伸,这是一种“万物皆对象”的编程思想。在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例。面向对象的编程是以对象为中心,以消息为驱动,所以程序=对象+消息。
面向对象有三大特性,封装、继承和多态。
封装就是将一类事物的属性和行为抽象成一个类,使其属性私有化,行为公开化,提高了数据的隐秘性的同时,使代码模块化。这样做使得代码的复用性更高。
继承则是进一步将一类事物共有的属性和行为抽象成一个父类,而每一个子类是一个特殊的父类--有父类的行为和属性,也有自己特有的行为和属性。这样做扩展了已存在的代码块,进一步提高了代码的复用性。
如果说封装和继承是为了使代码重用,那么多态则是为了实现接口重用。多态的一大作用就是为了解耦--为了解除父子类继承的耦合度。
(如果说封装和继承是面向对象的基础,那么多态则是面向对象最精髓的理论。)
13.Java中异常处理机制的实现原理和应用
捕获异常 try catch finally
1,try是尝试运程代码块,如果有异常会被随后的catch捕获,异常发生后代码不执行。
2,catch代码块是异常处理代码,注意:异常的大小关系,大类型的放到后面处理。
3,finally代码块中,经常用来处理现场清理。例如:数据库连接关闭。
3,处理异常有一个基本原则:能够底层处理的尽量处理,但是如果不能处理,必须抛出
到方法。
14.object里的tostring方法的实现
getClass().getName()+"@"+Integer.toHexString(hashCode());
15.java的三大特性和五大原则
特征:封装,继承,多态
原则:单一原则,开闭原则,替换原则,依赖倒置原则,接口隔离原则。
16.string,stringbuffer,stringbuilder区别
1.string长度不可变,底层是final修饰的char[]数组,用于拼接较少的情况
2.stringbuffer JDK1.0 长度可变,底层是没有final修饰的char[]数组线程安全,效率低,多用于多编程情况;
3.stringbuilder JDK1.5长度可变,底层是没有final修饰char[]数组,非线程安全,效率高,用于拼接较多的情况
17.隐式转换(自动转换)和显示转换(强转)
隐士转换特征:从小到大,可以隐士转换,数据类型将自动提升
强制转换特征:从大到小(如果你明确知道数据是可以用该数据类型来表示的,可以用强制转换)
byte + byte = int; 拿byte存储以Int计算
byte + short = int;
byte,short,int,char,都是以Int来计算。
Int + long = long;
float + short = float;(double也可以)
float + int = float;
float + long = float;(损失精度)
char + double = double;
18如何不用new实例化对象(反序列化和克隆)
通过I/O流(包括反序列化),如运行反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法
19.collection和collections
collection抽象的集合概念,实现它有list和set
collections集合静态工具类,包含集合的工具方法,sort()等
19 final,finalize和finally的不同之处
final 是一个修饰符,可以修饰变量、方法和类。如果 final 修饰变量,意味着该变量的值在初始化后不能被改变。
finalize 方法是在对象被回收之前调用的方法,给对象自己最后一个复活的机会,但是什么时候调用 finalize 没有保证。
finally 是一个关键字,与 try 和 catch 一起用于异常的处理。finally 块一定会被执行,无论在 try 块中是否有发生异常。
20 final的用法
1.被final修饰的类不可以被继承
2.被final修饰的方法不可以被重写
3.被final修饰的变量不可以被改变,如果修饰引用,那么表示引用不可变,引用指向的内容可变
4.被final修饰的方法,JVM会尝试将其内联,以提高运行效率
5.被final修饰的常量,在编译阶段会存入常量池中
21 static用法
1.static修饰的变量,存储在常量池,公共访问;
2.static修饰的方法为静态方法,存放在方法区,可以通过“类型.方法名”来调用
3.static修饰的类不能调用非静态变量或方法,但是非静态方法或变量可以访问静态变量或方法
4.static优先于对象创建,只能修饰成员变量
拓展:静态代码块>main方法>构造代码块>构造方法
储存于堆内的方法区,在主方法执行之前加载
声明的变量储存在常量池中,修饰的方法为静态方法,类方法
非static修饰的变量及方法能够访问static修饰的变量和方法
22.截取字符串
Substring(int startindex ,int endindex)前包含,后不包含
Substring(int startindex,int length)
split(",");(用“,”截取)
23.泛型的理解
泛型是具有占位符(类型参数)的类,机构,接口和方法,占位符就是先占住一个固定的位置,再往里面添加内容的符号,就是约束数据类型的
24 请求转发和重定向的区别
转发:
req.getRequestDispatcher("***.jsp";)
服务器内部转发,访问该项目下的文件,一次请求,URL不变
重定向:
resp.sendRedirect("http://baidu.com");
可以访问任何资源,由jsp文件发出的两次请求,URL变化
25.JVM运行顺序
1.运行class文件((静态变量、静态初始化块)–>(变量、初始化块)–> 构造器;如果有父类,则顺序是:父类static方法 –> 子类static方法 –> 父类构造方法- -> 子类构造方法 )
2.管理并分配内存
3.执行垃圾回收
26.连接池的作用
减少创建连接的时间,更快响应,统一管理。