java概述
1.何为编程?
让计算机为解决某个问题而使用程序设计语言编写程序代码,并得到结果的过程。
2.什么是java?
java是面向对象的编程语言,具有功能强大、简单易用的特征。
3.jdk、jre、jvm
jdk:java的开发工具(包含jre)
jre:java的运行环境(包含jvm和核心类库)
jvm:java 虚拟机
4.什么是跨平台?原理是什么?
跨平台:一次编译,多个系统运行
原理:只要系统安装了对应的java虚拟机,该系统就可以运行java程序
5.java语言特点
简单易学
面向对象
无关平台
支持多线程
安全
6.什么是字节码?字节码的好处?
字节码:电脑里数据的计量单位
好处:字节码解决了java程序无需重复编译,便可以在不同的系统数运行
7.什么是java主类?应用程序和小程序的主类有什么不同?
java主类:只能有一个主类,包含main方法
区别:小程序中主类必须继承JApplet或Applet类,必须是public,应用程序不固定;主类是java程序的入口
基础语法
数据类型
1.什么是基础数据类型?
整数类型:byte(1)、short(2)、int(4)、long(8)
浮点类型:float(4)、double(8)
字符型:char(2)
布尔型:boolean(1)
2.什么是引用数据类型?
类
接口
数组
编码
1.java采用的编码方式?特点?
采用Unicode编码标准
为每个字符制定一个唯一的数值,在任何平台、语言都可使用
注释
1.java注释及作用?
单行注释://
多行注释:/* */
文档注释:/** */
作用:增加代码的可读性,有利于修改和交流
2.访问修饰符的区别?
public:所有类、接口、变量、方法都可见
protected:同一包内的类,以及子类可见,不能修饰类
default:同一包内可见,不使用修饰符
private:仅当前类可见
关键字
1.final作用
修饰的类不能被继承
修饰的方法不能被重写
修饰的变量不能被改变
2.final、finally、finalize的区别?
final:可以修饰类、方法、变量
finally:作用于try-catch代码块中,不管是否出现异常,都要执行
finalize:jvm中垃圾回收器调用finalize方法,回收垃圾
3.this的用法?
指向本身的一个指针;
直接引用,指向对象本身
形参和成员名字重名,用this来区分
引用本类的构造函数(放在构造函数的第一条语句)
4.super的用法?
指向父类的一个指针(最近);
直接引用,指向当前父类的对象
子类中成员变量或方法与父类中成员变量或方法重名时,用于区分
调用父类的构造函数(应放在第一行)
5.this和super的区别?
本质来讲,this是指针,但super是关键字
this引用自身对象、变量、构造函数,super引用父类中对象、变量、方法、构造方法
6.static的应用及原理?
会在类加载的时候执行一次,加载时分配空间,大多数时候会将一些只需要进行一次的初始化操作放在其中;
被修饰的变量或方法是独立的,被所有实例共享;
修饰成员变量
修饰成员方法
静态代码块
修饰类(内部类)
静态导包
流程控制语句
1.break、continue、return的区别及作用?
break:跳出循环,执行下面代码
continue:跳出本次循环,继续执行下次循环
return:跳出循环,不在执行下面代码,直接返回
2.如何跳出多重嵌套循环?
使用break即可跳出循环,继续执行下面代码
面向对象
1.什么是面向对象?
面向对象(行为化):把现实中的事务都抽象成对象,后完成拼装,具有封装、继承、多态,性能低,易于维护。
2.面向对象的三大特征?
封装:把一个对象的属性私有化,同时提供外界访问的方法
继承:在已有类的基础上建立新类,新类可以新增功能。通过继承可以方便的复用以前代码
多态:父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,提高程序的拓展性
3.抽象类与接口的区别?
抽象类可以有方法实现;接口不存在方法和构造器
抽象类用extends继承;接口用implement实现;
接口默认用public;抽象方法不固定;
抽象类可以继承一个类或实现多个接口;接口可以继承一个或多个其他接口
抽象类新增方法不需要改变实现类;接口新增方法,必须改变实现类;
4.什么是构造方法?
作用是完成对类对象的初始化工作,如果没有什么构造方法也会有默认的不带参数的构造方法;
特性:
名字与类名相同;
没有返回值,但不能用void什么
自动执行,无需调用
5.成员变量和局部变量的区别?
成员变量整个类都有效;局部变量一般在方法或语句内有效
成员变量随着对象的创建而存在,随着对象的消失而消失;局部变量当方法用完或语句结束自动释放
成员变量有默认初始值;局部变量没有,使用前必须赋值
6.什么是内部类?内部类的种类
将一个类的定义,放在另一个类的内部;内部类本身是一个属性,与其他属性定义方式一样。
成员内部类:定义在类内部,非静态的;可以访问外部的所有方法和变量;使用方式:外部类实例.new 内部类();
局部内部类:定义在方法中的内部类;可以访问外部的所有方法和变量;如果定义在静态方法中,只能访问外部类的静态方法和变量;使用方式:在对应的方法内,new 内部类();
匿名内部类:没有名字的内部类;必须继承一个抽象类或实现一个接口;不能定义静态;参数申明为final;不能是抽象的;使用方式:new 类{}
静态内部类:定义在类内部的静态类;可以访问外部类的所有静态变量;使用方式:new 外部类.静态内部类();
7.内部类的优点及使用场景
优点:
不为其他类所见,局域封装性
实现了多重继承
方便定义回调
可以访问创建它的外部类对象的内容,包括私有数据
使用场景:
使代码更加灵活,富有扩展性;
除了外部类,不能被其他类访问
解决一些非面向对象的语句块
8.重写与重载的区别
重载是相同方法名,参数不同;重写是子类重写父类方法;
重载定义在类中;重写定义在父类和子类之间
重载对返回没有要求;重写要求返回类型,有兼容的返回类型
重载的参数个数、类型、顺序都可以不同;重写父子类必须相同
重载对访问修饰符没有要求;重写的访问修饰符必须大于父类
9.==和equals的区别
==:基本数据类型比得是值,引用数据类型比得是内存地址
equals:
没有重写:等价于==
重写:比较内容是否相同
10.hashCode与equals
hashCode:确定对象在哈希表中的位置,返回int;加入对象是,先计算对象的hashcode来判断加入的位置,如果hashCode已存在,调用equals来检查对象是否相同。
两个对象相同,hashCode一定相同;hashCode相同,对象也不一定相同。
11.对象相等和引用相等
对象相等:指的是内容是否相等;引用相等:指的是内存地址是否相等。
12.什么是值传递
调用方法是时进实际参数负责复制一份传到方法中,就算修改参数,也不会影响实际参数
13.值传递与引用传递的区别
值传递:方法调用时,传递的参数是直接拷贝,传递后互不相关;
引用传递:方法调用时方法调用时,传递的参数是引用地址,传递前后都指向同一个引用地址;
14.instanceof关键字的作用
双目运算符,检测对象是否为一个类
15.java自动拆箱与装箱
拆箱:将包装器类型,转化为基本数据类型
装箱:将基本数据类型,转化为包装器类型
16.深拷贝与浅拷贝的区别
浅拷贝:对于基础数据类型是直接进行值传递,在另一个空间存放,修改值不会影响拷贝值;对于引用数据类型是进行的地址传递,不开辟新空间,所以两个值会指向同一个内存地址,修改后会影响拷贝源的值。
深拷贝:新分配一块内存,会拷贝所有的属性,并拷贝属性指向的内存,速度慢,花销大
17.泛型中super和extends的区别
泛型中extends是设定类型通配符的上限;super是设定类型通配符的下限
18.java类加载器有哪些
1.引导类加载器(启动类加载器)
2.拓展类加载器
3.系统类加载器
4.自定义加载器
19.双亲委派原则
一个类加载器收到请求后不会立即加载自己,而是先检查父类加载器是否已经加载,层层迭代,到顶层加载器没有了,会往下进行委派去加载指定的类
反射
1.什么是反射?
能够动态的获取信息以及调用对象的方法;对于任意类和任意方法都能知道所有的方法和属性;
2.反射的方式
通过new对象实现
通过路径实现
通过类名实现
3.反射的优缺点
优点:能动态加载类,提高代码灵活度
缺点:消耗资源,性能是瓶颈
4.反射的应用场景
动态配置属性
可以获取某个类的实例
将xml或配置文件加载到内存中
异常
1.异常分类
Error:错误
Exception:异常
运行时异常
编译时异常
2.异常的处理方式
抛出异常:throw
声明异常:throws
捕获异常:try-catch-finally
3.throw和throws的区别
throw用在方法内部,只能用于抛出一种异常;throws用在方法声明上,可以抛出多个异常;
throws表示可能出现异常;throw则一定会抛出某种异常对象
4.Error和Exception的区别
Error:错误,编译器不进行检测,也不进行捕捉,一旦发生,程序通常终结
Exception:异常,可以在程序中进行捕捉并处理,处理成功后,正常运行
5.运行时异常和一般异常的区别是什么
运行时异常:运行期间出现的异常
一般异常:除了运行时异常之外的所有异常
区别:
如果强制要求必须处理,使用一般异常,否则使用运行时异常
6.try-catch-finally可以省略哪一部分
catch可以省略
因为try处理运行时异常,try+catch处理运行时异常+普通异常,所以当处理运行时异常,catch可以省略
7.常见的运行时异常有哪些?
类转换异常
数组越界
空指针
数据存储异常