1.java语言特点
面向对象
(1)两个基本概念:类、对象
(2)三大特性:封装、继承、多态
简单性
自动内存管理机制,不易造成内存溢出,简单流程处理,语义清晰
跨平台
操作系统,服务器,数据库
健壮性
吸收了c/c++语言的优点,但去掉了其影响程序健壮性的部分,提供了一个相对安全的内存管理和访问
2.java的执行机制
先编译,在解释 将源文件编译成字节码文件(平台中立文件.class),再将字节码文件进行解释执行
HashMap和Hashtable的区别
Hashtable是同步的(线程安全),而HashMap线程不安全,效率上Hashmap更快
HashMap允许空键值,而Hashtable不允许
3.List集合和Set集合和Map集合
list中的元素是有序的,可重复的。
List<Object> list = new ArrayList<Object>();
set中的元素是无序的,不可重复的
Set hs = new HashSet();
map是一个键值对,值可以可重复但键不可重复
Map<String, Object> map = new HashMap<String, Object>();
4.ArrayList、LinkedList的区别
1.随机存取:ArrayList是基于可变大小的数组实现,LinkedList是链接类别实现。随机访问get和setArrayList要优于LinkedList。
2.插入和删除:LinkedList要好一些,ArrayList要移动数据更新索引。
3.内存消耗:LinkedList需要更多的内存,因为需要维护指向后继结点的指针。
5.对一组对象进行排序
一个对象数组:Arrays.sort()
一个对象列表:Collections.sort()
默认根据元素的自然排序:Comparable
public class Student implements Comparable//该接口强制对实现它的每个类的对象进行强制整体排序
6.final关键字
修饰的变量是常量,必须进行初始化,可以显示初始化,也可以通过构造进行初始化,如果不初始化编译会报错。
7.接口与抽象类
一个子类只能继承一个抽象类,但能实现多个接口
抽象类可以有构造方法,接口没有构造方法
抽象类可以有普通成员变量,接口没有普通成员变量
抽象类可以没有抽象方法,抽象类可以有普通方法,接口中都是抽象方法
抽象类可以有静态方法,接口不能有静态方法
8.重写与重载
重写:子类重写父类的方法
重载:一个类里方法名相同参数不同
9.异常
常用异常关键字throw、throws、try/catch、finally
throws用在方法签名上,以便抛出异常可以被调用者处理
throw方法内部通过throw抛出异常
try用于检测包住的语句块,若有异常,catch子句捕捉并执行catch代码块
finally不过用没用异常都要处理finally要先于return执行
10.this和super
this指当前类
super指父类
this和super不能出现在同一方法中,否则编译不通过
this和super不可以在static环境中使用
11.修饰符
修饰符 类内部 同一个包 子类 任何地方
private yes
default yes yes
protected yes yes yes
public yes yes yes yes
12.内部类与静态内部类的区别
package test; class Enclosingone { public class Insideones { public void a(){ System.out.println("内部类"); } } public static class Insideone{ public void b(){ System.out.println("静态内部类"); } } } public class test { public static void main(String[] args) { // 构造内部类对象需要外部类的引用 Enclosingone.Insideones obj1 = new Enclosingone().new Insideones(); obj1.a(); // 构造静态内部类的对象 Enclosingone.Insideone obj2 = new Enclosingone.Insideone(); obj2.b(); } }
静态内部类不需要有外部类的引用,只能访问外部类的静态成员。
内部类需要用=有外部类的引用,可以访问外部类的静态和非静态成员。
13.序列化
static和transient类型的数据不能被序列化,反序列化需要一个无参构造函数
14.面向对象的特点
封装、继承、多态
15.null可以被强制转型为任意类型的对象
16.数组复制方法
1.for逐一复制
int[] array1 = {1,2,3,4,5}; int[] array2 = new int[5]; for(int i = 0;i < array1.length;i++) { array2[i] = array1[i]; }
2.clone方法
返回Object[],需要强制类型转换
17.数组去重
Set set = new HashSet(); for(int i=0;i<arr.length;i++){ set.add(arr[i]); } return set.toArray();
18.多态
java通过方法重写和方法重载实现多态
19.java文件
java文件可以包含多个类,只允许有一个公开类,文件名与公开类名相同。
20.形参与实参
形参只有在方法中使用,只能用final修饰符,形参在调用时可以改变,实参根据自身的值去改变形参。
21.java语言的特点
1.简单易学
2.面向对象
3.与平台无关性
4.安全可靠
5.支持多线程
22.equals与==的区别
== 比较对象的内存地址
equals 比较对象的类型和值
23.装箱与拆箱
装箱:基本数据类型转换为包装器类型(int-->integer)
拆箱:包装器类型转换为基本数据类型(integer-->int)
24.foreach遍历
int[] scores = { 89, 72, 64, 58, 93 }; // 使用foreach遍历输出数组中的元素 for (int score:scores){ System.out.println(score); }
25.Java 中应该使用什么数据类型来代表价格?
BigDecimal和duoble
double出现误差可以使用BigDecimal进行运算
26.B/S和C/S架构
B/S 浏览器/服务器
C/S 客户端/服务端
27.java有哪些开发平台?
JAVA SE: 客户端开发
JAVA EE: web应用程序开发
JAVA ME:嵌入式应用开发
28.什么是JDK,JRE
JDK:java开发工具包
JRE:java运行环境
29.数据结构
计算机保存,组织数据的方式
30.java的数据结构
1.线性表 2.链表 3.栈 4.队列 5.图 6.树
31.类与对象的关系
类是对象的抽象与模板,对象是类的具体和实例
32.java中的数据类型
整形:byte,short,int,long
浮点型:float,double
字符型:char
布尔型:boolean
33.instanceof关键字的作用
instanceof是java中的一个双目运算符,测试一个对象是否是一个类的实例
boolean result = obj instanceof Class
34.隐式转换与显式转换
显式转换:类型强转把大类型的数据强转赋值给小类型的数据。
隐式转换:自动类型转换,大范围的数据能够接受小范围的数据。
35.一个java类中包含哪些内容
属性、方法、内部类,构造方法、代码块
36.String是基本的数据类型吗?
不是
37.++i与i++的区别
i++:先赋值后计算
++i:先计算后赋值
38.程序的结构有那些
顺序结构、选择结构、循环结构
39.数组实例化有几种方式
静态实例化:创建数组的时候已经指定数组中的元素
动态实例化:创建数组的时候指定数组长度,,所有元素都是数组类型的默认值
40.java中各种数据默认值
byte,short,int,long:0
Boolean:false
char:''
float,double:0.0
对象类型:null
41.java常用包有那些
java.long,java.io,java.sql,java.util,java.net,java.math
42.Object类常用方法有那些
equals,toString,clone,getClass,hashcode
43.java中有没有指针
有但隐藏了,开发人员无法直接操作指针,由jvm来操作
44.java中是值传递还是引用传递?
理论上都是引用传递
45.实例化数组后,能不能改变数组长度?
不能数组初始化后长度是固定的
46.数组反序
创建一个新数组,从后向前循环遍历每个元素,将取出的元素依次放入新数组
int[] a={2,77,-4,6,11}; for (int i = a.length-1; i >=0; i--) { //注意:数组的最后一个位置为数组长度-1,因为数组的下标是从0开始的 System.out.print(a[i]+"\t"); }
47.构造方法能不能显示调用?
不能,只有在创建的时候调用
48.static关键字
可以修饰内部类(静态内部类)、方法(静态方法)、变量(静态变量)、代码块(静态代码块)
53.String、StringBuffer与StringBuilder的区别
String:只读字符串
StringBuffer:线程安全
StringBuilder:线程不安全
54.java中math类的常用方法
幂运算、平方根、四舍五入、求绝对值
55.String类的常用方法
charAt、indexOf、equals、length
56.java中的继承是单继承还是多继承
既有单继承又有多继承
57.普通类与抽象类的区别
普通类没有抽象方法,抽象类有。
58.什么是接口,为什么用接口
接口就是某个事物对外提供一些功能的声明,弥补java单继承的缺点。
59.接口的特点
使用的方法只有抽象方法,没有构造方法,不能被实例化,接口可以多继承
60.java的四种引用,强弱软虚
强引用:程序内存不足时也不会被回收
软引用:程序内存不足时会被回收
弱引用:只要jvm垃圾回收器发现就会被回收
虚引用:回收之前会被放入引用队列
61.java创建对象
1.new
2.反射机制
3.clone
4.序列化
62.有没有可能2个不相等的对象有相同的hashcode
可能hash冲突的时候会出现
解决办法:在哈希、开发定值法
63.深拷贝和浅拷贝的区别
深拷贝:整个对象一起拷贝
浅拷贝:引用对象不拷贝
64.final、finalize()、finally
1.final为关键字
2.finalize()为方法
3.finally区块标志
65.JDBC操作步骤
加载数据库驱动类、打开数据库连接、执行sql语句、处理返回结果、关闭资源
66.使用jdbc,怎么防止出现sql注入
使用PreparedStatement
67.jdbc调用一个存储过程
使用CallableStatement
68.使用连接池有什么好处
连接池是用来分配、管理、释放数据库连接的,避免数据库因为创建太多的连接而造成的连接遗漏问题,提高程序性能。
69.目前了解的数据源技术有那些?使用数据源的好处
c3p0和dbcp
c3p0比dbcp更加稳定、安全
通过配置文件的形式来维护数据库信息,不需要再更改程序代码实现数据库信息的更新
70.&和&&的区别
&:位运算符
&&:布尔逻辑运算符
逻辑判断是&处理的前面为false后面的内容仍需要处理
用&&处理前面为false不再处理后面的内容
71.静态内部类
在类名前加上static
72.成员内部类
定义在类里面的非静态类
73.内部类(inner class)
75.assert
软件调试方法
76.goto
java中的保留字,并没有使用
77.length和length()的区别
length是数组的属性
length()是String类型的方法
78.排序方法
插入排序、交换排序、选择排序、归并排序、分配排序
79.跳出循环
break
80.构造器是否可以被重写
只能被重载
81.String类是否可以继承
不能 String类型最好是用关联关系和依赖关系