1. JRE、JDK、JVM的关系。
JDK:包括了JAVA运行环境JRE,java工具和java基础类库
JRE:JAVA的运行环境,包括虚拟机JVM,运行时类库,java运用启动器
JVM:JAVA虚拟机,使得java文件编译成class文件,也是Java能够跨平台使用的基础
2. IDE是什么,你所使用的ide又是啥,为什么使用IDE工具
IDE是集成开发环境,用来帮助开发代码的工具,我使用的是Eclipse,用了ide可以提高我们的编码效率,提高我们代码的规范性,
也可以帮助我们快速查找bug,从而提高开发效率
3.Java编译的过程。
通过JDK翻译
开发人员编写java文件,然后通过javac将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟
机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执行,最后将信息输出到控制台上。
4、Java数据类型:
基本数据类型以及复合(引用)数据类型
区别:
基本数据类型:不同变量会分配不同存储空间,并且存储空间中存储的是该变量的值.赋值操作传递的是变量的值
.改变一个变量不会影响另一个变量的值. (传递值)
引用数据类型:(牵一发而动全身.之间有想通之处)赋值是把原对象引用传递给另一个引用.对数组而言当一个数组引用赋值给
另一个数组引用后,两个引用指向同一个数组,即指向同一块内存空间.(传递地址)
5、背诵基本数据类型以及复合(引用)数据类型的种类
复合引用类型:类类型,数组类型,接口类
byte:字节型,short:短整型,int:整形,long 长整型,boolean:布尔型,float:单精度浮点型,double:双精度浮点型,char:字符型
类型的作用:向计算机明确变量的属性(如整形、浮点型、字符串,限定变量的运算处理方式)、所需的存储空间大小、以及
类类型变量的内部结构和可用方法表等程序运行必须的信息
6. 表达式是什么,有哪些分类
表达式由声明、变量、方法和运算符组成,分为算术表达式、赋值表达式、关系表达式、逻辑表达式
以;结尾的一段代码,即为一个表达式
表达式的运行顺序为从左向右,从上向下逐句运行,按照表达式中的运算符的优先级顺序与变量结合求值
特别的,单目运算符"++"、"–“在使用时写在变量左边将被先执行再取值,写在变量右侧则是先取值后执行
三目运算符"表达式1? 表达式2 : 表达式3” 可以替代简单的if/else语句,当表达式1值为true时执行表达式2,值为false时执行
表达式3
7.Java数组
静态初始化和动态初始化的区别:前者是编译的时候就初始化,后者是先运行,再分配其内存空间,使之动态初始化
还有数组和集合框架的优缺点:
长度区别:
数组固定 集合可变
内容区别:
数组可以是基本类型,也可以是引用类型,但只能定义一种类型
集合一般只能是引用类型,但可以存放不同的类型的数据(规范下只能使用一种)
8、为什么需要使用程序控制语句?
控制语句即用来实现对程序流程的选择、循环、转向和返回等进行控制。
在java代码中常常使用if/else等来做程序的判断,也会使用for、while等来进行语句的循环输出
项目中例如注册的用户是否存在以及登入账号密码是否正确都需要程序控制语句来进行判断,
for、while的控制语句使得我们在页面上对用户列表数据进行循环输出,
而不用我们一对一每一个用户都要写一套代码
9、为什么需要使用类类型?
类类型属于复合(引用类型),他可以包含不同类型的基本数据类型,类类型其实就是对基本数据类型的封装。
当我们需要传参的时候,如果需要传递相同类型的值,可以使用集合或者数组,但是如果需要传递不同的基本数据类型的时
候,例如个人资料,就需要使用类类型封装,然后传参。
10、面向对象:
种类:四种(封装、继承、多态、抽象)
封装:把代码包裹起来,让代码安全性更高,例如private修饰的只能get,set访问
继承:儿子继承父亲,那么儿子可以调用父亲的方法
多态:就是对象的不同表现把,比如打印机,然后有色打印机和黑白打印机继承打印机的打印方法重写,打印出来的效果是
不一样的。
抽象:用abscract修饰,比如定义一个动物,知道他名字和年龄,但是不知道他的叫法怎么叫,那么可以把叫声作为抽象方
法,日后在具体实现。
继承的作用、特点、在继承中如何深入使用继承的,
什么是继承:继承就是父亲刚跟儿子之间的关系,子类继承父类,子类调用父类的方法
作用:借助继承,可以扩展原有的代码,应用到其他程序中,而不必重新编写这些代码(提高代码复用性)
特点:
1.只支持单继承,即一个子类只允许有一个父类。
2. 子类可以拥有父类的属性和方法
3. 子类可以拥有自己的属性和方法
4. 子类可以重写覆盖父类的方法
封装:是什么意思、封装的修饰符的范围、封装仅仅是对于属性吗?Protected
属性要注意
数据包裹起来,只能用特定方式访问,比如私有变量用get和set
Public:任何位置都可见
protected:当前包中可见
默认的:当前包内部可见
private:仅仅在类内部可见
不是,例如单例模式,封装自己类,还有方法的封装。
多态:能够和我说一下多态的工作原理吗?通过打比方的方式能说一下吗?
多态就是子类继承父类,重写父类方法后的不同表现
比如说父类打印机他有打印这个方法,然后子类继承了父类打印机,也就相当于有了打印方法,然后重写了方法,打印机比
如有彩色打印机和黑白打印机,那么他们都有打印功能,但是打印出来的东西呈现的结果不一样,当我们要打印东西的时
候,我们调的是子类的方法,比如要打印彩色还是黑白的。
11、static和final的作用,以及使用这两种修饰符后的效果
Static和final都是修饰类
final不能用来修饰构造函数
final 修饰的方法不能被重写;但是能够被重载
final 修饰的属性也不能被更改
final 修饰的类不能被继承
static 修饰的方法不能出现this关键字
static 修饰的属性通过"类名.属性"访问;全类共享,在类加载时被创建并初始化,类加载的过程只进行一次,也就是static修
饰的属性只会被创建一次
static 修饰的代码块叫静态代码块,这个代码块只在类加载的时候被执行一次
项目中一般用final修饰变量当做常量处理,static则是修饰一些不改变变量值,比如数据的连接关闭和driver预加载
12、接口类的作用、接口类如果有属性是什么效果、接口类和接口类是什么关系、接口类特点
什么是接口:就是被interface修饰的类,里边的方法全部是抽象方法
接口可以被编写的多个程序重复调用,可以节省电脑的存储空间,并且使用接口可以减少电脑代码运行时出现的错误,在运
行多个程序时,也能更有效率的进行。
一般我们项目dao层和service层就是接口+实现类的模式
特点:接口类中的方法都是抽象方法
接口中没有构造方法,也不能实例化接口对象
一个类可以实现多个接口
接口类和正常类的关系、
接口只能由抽象方法,接口被interface修饰
接口不能实例化
抽象类的使用
13、抽象方法是啥?
抽象方法:抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型,方法名称和所需要的参数
像我们项目中的dao层的接口类就是抽象方法
14、String和异常:String s = “1”;String s = new String(); 区别是什么?
String s1 = “a” 时,首先会在字符串常量池中查找有无 “a” 这个对象。 若没找到,就创建一个 “a” 对象,然后,以 s1 为它的
引用。若在字符串常量池中找到了 “a” 这个对象, 同样也将 s1 作为它的引用。若再执行一次 String s2 = “a” , 那么 s1 和 s2
都是同一个对象的引用,即 逻辑判断 s1 == s2 的结果是 true。
String s3 = new String(“a”) 时,将在字符串常量池外的堆里,创建一个 “a” 对象,然后,以 s3 为它的引用。这时,s3 对应
的是 字符串常量池外的一个对象。因此,无论 s3 == s2,还是 s3 ==s1,其结果都是 false
String的常用方法介绍(5种)、String和StringBuffered区别、
String str1 = “abcDRef”;
System.out.println(str1.length()); //字符串长度
System.out.println(str1.isEmpty()); //字符串是否为空
System.out.println(str1.charAt(4)); //检索某位置字符
System.out.println(str1.startsWith(“ab”)); //字符串是否以某个字符(串)开头
System.out.println(str1.endsWith(“sf”)); //同上,结尾
System.out.println(str1.substring(2)); //截取从某位开始以后的字符串
System.out.println(str1.toLowerCase());//全部转为小写字母
System.out.println(str1.toUpperCase());//大写字母
区别:String是不可变的,一旦被创建,值就不能改变
StringBuilder 是可变的,他修改值不用去重新new一个对象
String是final类,不能被继承
15、什么是异常什么是错误
(错误就是只要报错就是错误,异常是属于错误的一种,异常是属于人为性操作不当造成的错误)
16、throw和throws的区别
throw只能用于抛出一种异常,而throws可以抛出多个异常
throw用在方法实现中,而throws用在方法声明中
Throw:
作用在方法内,表示抛出具体异常,由方法体内的语句处理。
具体向外抛出的动作,所以它抛出的是一个异常实体类。若执行了Throw一定是抛出了某种异常。
Throws:
作用在方法的声明上,表示如果抛出异常,则由该方法的调用者来进行异常处理。
主要的声明这个方法会抛出会抛出某种类型的异常,让它的使用者知道捕获异常的类型。
出现异常是一种可能性,但不一定会发生异常。
17、你们在项目中如何使用异常的?
一种是try catch捕获异常,还有一种是直接抛出异常,让调用的处理
18、异常日志你是如何实现的
用AOP去写入异常日志
19、int和Integer有什么区别
Int是整型,而integer是int的封装类
int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况
项目中我们需要判断空值的时候我们需要用到封装类