java基础知识总结
1、--Java语言的特点是什么?
简单 面向对象 跨平台 多线程 健壮性安全性 垃圾回收机制
2、如何编译和执行java文件?产生帮助文档用什么命令?
编译: javac 文件名
执行: java 类名
产生帮助文档 javadoc 文件名
3、虚拟机的工作流程是什么?
编写源文件(*.java)------编译成*.class字节码文件------类加载--------字节码校验----解释器----操作系统。
4、main方法怎么书写?
Public static void main(String[] aaa){}
Static public void main(String sss[]){}
5、什么是标识符?标识符有几种?标识符的命名规则是什么?
凡是可以命名的地方叫标识符。我们可以使用标识符命名类、方法、变量。
标识符分两种:系统标识符(关键字)和用户标识符。
标识符命名规则:以字母、数字、下划线、$组成。不能以数字开始。
6、Java中基本数据类型有哪些?各占几个字节?Java中引用数据类型有哪些?基本类型和引用类型的区别是什么?
Java基本数据类型,变量本身存放数据。byte(1)取值在-128~127。Short(2)、int(4)、long(8)、float(4)、double(8)、char(2)、boolean(1)
Java引用类型,变量存放对象的地址。类、数组,接口。
基本类型中存放具体的数据,引用类型存放对象的地址
7、Java中char类型用什么编码?
unicode
8、变量三要素是什么?
变量类型 变量名 变量值
9、Java的注释有几种?
//单行注释
/* */多行注释
/** */文档注释
10、定义常量用什么关键字?
final
11、什么是对象?什么是类?对象和类的关系是什么?
对象是存在的一个实体,具有明确的特征和行为。
类是具有相同特征和行为的一组对象的集合。
类是对象的抽象。对象是类的实例和具体表现。
12、变量按作用域划分有哪几种?局部变量使用时需要注意什么问题?
局部变量、成员变量(属性)、静态变量(类变量)
局部变量使用前需要注意:1、变量必须初始化 2、作用域 3、局部变量的修饰符只能是默认,或final
13、静态变量和成员变量有什么区别?应该怎么调用?
成员变量从属于对象,是对象的一部分,放在堆中。
静态变量是很多对象共享的,放在数据段中。
成员变量是对象特有的,彼此独立,一个对象成员变量值的更改,不会影响别的对象。
静态变量是对象共享的,一个对象更改后,会影响所有的对象。
静态变量在类加载时产生,加载时机在对象之前;成员变量在对象产生时加载。所以静态方法不能直接访问成员方法。
成员变量调用通过 对象名.成员变量
静态变量调用通过 对象名.静态变量 类名.静态变量
14、垃圾回收GC回收什么样的对象?
回收没有被变量指向的对象。
15、什么是包?包的作用是什么?如何导入别的包中的类?什么样的类不需要导入?
包就是文件夹。通过包可以组织相关的类、可以作到信息隐藏。
import 类的全路径;(包名+类名)
本包中的类和java.lang.*无需导入可以直接使用。
16、静态方法能直接调用成员方法或属性吗?为什么?
不行。静态的东西加载时机在对象之前。
17、当传递和返回对象,传递和返回的是什么?
引用。
18、什么是构造方法?构造方法的作用是什么?
构造方法的方法名和类名相同,没有返回类型。
作用:1、为对象分配空间
2、如果该类没有加载,则加载类。
3、初始化成员变量
4、返回引用。
19、创建对象有几种方式?
new 类名(); 反射:Class对象.newInstance() 克隆(通过Object中clone())
反序列化(调用ObjectInputStream中readObject())
20、this和super各代表什么含义?
this表示当前对象。super表示父类对象。
21、数组如何定义?数组、字符串、集合各自的长度如何获得?
int[] I = new int[3]; int[] I = {1,2,3};
数组长度:length属性
字符串长度:length()方法
集合长度:size()方法
22、数组有哪些特点?
1、 数组是一个连续的空间,通过下标访问元素,下标从0开始,最大下标为长度-1;
2、 数组的元素都是变量,变量的类型就是定义数组的类型。
3、 数组的元素在创建时都会做初始化。int----0 double----0.0 引用类型----null
4、 数组的长度不可改变。
23、私有属性+get/set方法和公有属性的区别
私有属性+get/set方法,可以在设置属性值之前,做出数据合法性验证,公有属性无法做到。
私有属性+get/set方法,可以删除get或set方法,让属性成为只读或只写属性,公有属性无法做到。
24、继承用什么关键字?子类继承父类,构造方法第一句应该如何书写?
继承使用extends关键字。子类继承父类,构造方法第一句是super(),产生父类对象,在父类对象基础上扩展子类的方法和属性。
25、重写和重载的区别是什么?重写有什么要求?
重载发生在同一个类中,方法名相同,参数列表不同(参数的类型、参数的个数、参数的顺序),和返回类型无关。
重写发生在父类和子类之间。方法名相同,参数列表相同,返回类型也相同。访问修饰符子类要大于或等于父类,而抛出的异常,子类要小于或等于父类。子类重写了父类的方法,在调用时会优先调用子类重写的方法。
26、Java中一个类能同时继承多个类吗?所有类的父类是什么?
不能,在java中类只能单根继承,所有类的父类是Object。
27、构造方法能继承吗?构造方法能重载吗?
构造方法不能继承,但可以被子类所调用。构造方法可以重载。
28、final、finally、finalize的区别是什么?
final可以修饰类、方法、变量。修饰类,表示该类不能被继承。修饰方法,表示该方法不能被子类重写。修饰变量表示该变量是常量,内容不能更改。
finally是异常处理时,无论是否有异常都会执行的代码块。一般作资源回收。
finalize是Object中定义的方法。在垃圾回收该对象之前,会执行该方法。
29、访问修饰符有哪些?各自作用范围是什么?
private(私有) 只能在本类中访问
默认 本包中可以访问
protected(受保护类) 本包和不同包的子类可以访问
public (公有) 所有的类都可访问。
30、什么是内部类?内部类class文件是怎样命名的?
内部类就是在一个类中再定义一个类。内部类相当于外部类的属性,可以有public 、private、protected、static。它的产生必须依赖于外部类的对象。
内部类class文件命名 外部类名$内部类名.class
31、什么是多态?多态有什么特点?
多态是指可以用父类变量指向子类对象,可以用接口变量指向实现类对象。
多态的特点:相同的行为不同的表现方式,可以动态绑定子类的行为。
32、面向对象的特征有哪些?
继承、封装、多态、抽象
33、什么是抽象类?什么是抽象方法?定义抽象类的关键字是什么?
如果一个方法在定义时,只有方法定义,没有方法实现,这个方法叫做抽象方法,拥有抽象方法的类叫抽象类。抽象类是不能直接实例化的。定义抽象类的关键字是abstract
34、接口如何定义?实现接口用什么关键字?一个类实现接口必须做什么?
接口定义用interface。
实现接口用implements
一个类实现接口,必须实现接口中所有的抽象方法,否则该类只能是抽象类。
35、接口中定义的方法修饰符是什么?接口中定义的变量修饰符是什么?
接口中方法修饰符是 public abstract
接口中变量修饰符是 public static final
36、抽象类和接口的区别是什么?
1、 抽象类可以有方法的定义(抽象方法),也可以有方法的实现(具体方法)。而接口中只能有方法的定义。
2、 抽象类中的变量是属性,而接口中的变量是public static final
3、 抽象类只能被单根继承,而接口可以多实现。
37、异常的API结构是怎样的?Error和Exception有什么区别?
Throwable父类,下面两个子类,Error(错误,能捕获,不能处理)和Exception(异常,能捕获,能处理)
38、异常的执行顺序怎样?如果在try块中有return,finally会执行吗?
先执行try块,顺序执行,如果有异常,转去catch块执行,同时中止try块中其他代码。无论是否有异常,都会执行finally内容。如果在try块或catch块有return,finally同样会执行,在跳出方法前执行。
39、finally是否在任何时候都会执行?
不是,在虚拟机关闭时不会执行。System.exit(0);
40、throw 和throws的区别是什么?
throw是语句,表示显示抛出异常对象 throw new Exception();
throws是方法修饰符,表示该方法可能要抛出某种异常,调用该方法时,就需要处理该方法抛出的异常。
41、异常分为几种?如何区分?
异常分为编译期异常、运行期异常。编译期异常,必须要处理,否则编译无法通过。运行期异常可处理,可不处理,所有的运行期异常都是RuntimeException的子类。
42、如何得到当前工作目录?
System.getProperty(“user.dir”);
43、String x = "abc" 和 String x = new String("abc")有什么区别?
String x = “abc”。x指向数据段中的字符串常量。
String x = new String(“abc”); x指向堆中的字符串对象。但该对象必须以对应字符串常量为模版。
44、String和StringBuffer的区别?
String具有长度不可以变的特性,当对字符串作添加、删除、替换会产生新对象。
而StringBuffer是缓冲区的对象,当对其进行添加、删除、替换时不会产生新对象。
45、如何将字符串转化为基本数据类型?
int x = Integer.parseInt(“23”);
double x = Double.parseDouble(“23.3”);
46、如何将日期对象进行"2011-12-10"格式化输出?如何将"2011-12-10"字符串转化为日期类型?
SimpleDateFormat s = new SimpleDateFormat(“yyyy-MM-dd”);
String str = s.format(new Date());
Date date = s.parse(“2011-12-10”);
47、javaBean规范有哪些内容?
1、 有公共的无参构造方法。
2、 私有属性加上get/set方法进行访问和设置。
3、 对象是可序列化的。
48、什么是反射?
反射是在编译时,不清楚应该加载哪个类,类的加载是在运行期进行的。通过反射我可以对类进行加载、探知、自审。
49、如何得到Class对象?如何利用Class对象产生该类的对象?
类名.class 对象名.getClass() Class.forName(“类的全路径”)
Class对象.newInstance();
50、线程和进程的区别?
进程有自己独立的内存空间,进程一开启就会消耗内存。而线程是进程内部的顺序控制流。多个线程共享一个进程内存空间。
51、创建线程有几种方式?如何启动线程?调用start()和调用run()的区别?
创建线程:1、继承Thread类,重写run() 2、实现Runnable接口,实现run()。
启动线程:start();
启动线程用start,这时会在主线程之外产生新的线程,多个任务同时执行。而直接调用run(),不会产生新线程。
52、线程有几种状态?
新建 就绪 运行 死亡 休眠 等待 挂起 阻塞
53、什么是线程优先级?分为几级?
当两个或两个以上的线程同时要求启动时,优先级高的线程优先得到CPU的使用权。优先级分为10级,数字越大,优先级越高。
54、什么是线程同步?同步会造成什么结果?
线程同步是指当两个或两个以上的线程同时访问同一个资源,为了保护数据的安全,只允许在同一时间一个线程去访问。
线程同步会造成1、数据安全 2、效率低下。
55、wait和sleep的区别?
1、 sleep在Thread中定义,而wait在Object中定义。
2、 wait只能放在同步方法或同步块中,而sleep可以放在任何位置。
3、 wait会释放对象锁,而sleep不会。
4、 wait需要唤醒线程才会继续执行,而sleep在休眠结束后,自动恢复运行。
56、集合的作用是什么?集合框架的API结构是怎样的?
集合的作用是对数据进行存储、检索、操作、传输。
集合框架分为:接口、实现类、算法。
接口:Collection为父接口,下面两个子接口:List、Set,另外还有Map接口
57、List、Set、Map集合各自有什么特点?
List特点:线性,元素可以重复
Set特点:元素不可重复
Map特点:键值对,一个元素包含两个对象。键不能重复。
58、集合元素如何添加?如何删除?如何遍历?
添加:add() put()
删除:remove()
遍历:
1、 for(int i =0;i<list.size();i++){
Object obj = list.get(i);
}
2、 Iterator it = list.iterator();
while(it.hasNext()){
Object obj = it.next();
}
3、 for(Object obj : list){
}
59、List接口实现类ArrayList、Vector、LinkedList的区别?HashMap和Hashtable区别?
ArrayList底层由数组实现。是连续的空间,遍历、尾部追加速度快,中间插入、删除速度慢。
Vector底层也由数组实现。是线程安全的类。
LinkedList是不连续空间,中间插入、删除速度快,遍历速度慢。
HashMap允许空键和空值,线程不安全。Hashtable不允许空键和空值,线程安全。
60、集合如何进行排序?
Collections.sort(list,Comparator c);
61、awt和swing有什么区别?
awt是利用操作系统的风格构建组件,跨平台时显示风格不一致。
swing是单独的组件,跨平台时风格一致。
62、GUI常见布局管理器有哪些?
绝对布局,边框布局,流式布局,网格布局
63、如何进行事件的添加?
确定事件源,确定监听器(实现监听接口) 注册(建立事件源和监听器的联系)
64、流按照输入输出方向分有几种?相对于什么而言?
流按照输入输出方向分有两种,相对于内存而言,当将数据从数据源中读取到内存时,叫读取流。当将数据从内存写入数据源时,叫写入流。
65、流按照传输内容分有几种?各自的父类是什么?
流按照传输内容有 字节流、字符流、对象流。但其本质都是字节流。字符流和对象流是在字节流基础上作了一层封装,以便更好对字符和对象进行操作。
字节流的父类:InputStream和OutputStream
字符流的父类:Reader和Writer
66、操作流时,如果文件不存在会出现什么情况?如果流不关闭会出现什么情况?
操作流时,如果文件不存在,对于读取流而言,会抛出文件未找到异常。对于写入流而言,会创建新文件。如果流使用完成后不关闭,会浪费内存资源。而且对于写入流而言,如果流不关闭也不刷新,有可能写不进数据。
67、如何判断一个文件是否存在?如何创建一个目录?如何知道一个目录中有多少文件?
使用File类中exists()判断文件是否存在。
创建新目录:mkdir();
列出目录中的文件:listFiles();
68、什么是对象序列化?如何实现对象序列化?
当需要传输对象时,由于对象中数据很庞大,所以需要将对象打散成字节序列,以利传输。这个过程叫做序列化。到达目的地时,又需要将字节序列还原成对象,叫反序列化。
这时,需要序列化的对象必须实现java.io.Serializable接口
69、TCP/IP协议分为几层?
TCP/IP分为四层:应用层、传输层、网络层、网络接口层
70、什么是端口?常见端口有哪些?
端口是一个应用程序输入输出数据的通道。每个应用程序都会有固定的端口。
常见的端口:Telnet协议:23 ftp:21 smtp:25 http:80
71、TCP和UDP的区别是什么?掌握TCP编程流程。
TCP是比较可靠的传输协议,提供三次握手机制,如果信息在传输中丢失或耗损,会要求发送方重新发送,保证数据传输的完整性。
UDP是比较不可靠的传输协议,当信息在传输中丢失或耗损,不会要求发送方重新发送。优点是速度快。
72、什么是XML?XML声明是怎样的?XML注释是怎样的?
XML叫做可扩展的标识语言,以标记和子标记的方式描述对象。
声明<?xml version=”1.0” encoding=”utf-8”?>
注释<!-- - ->
73、一个格式良好的XML有哪些规定?
1、 必须要有声明
2、 有且只有一个根元素
3、 大小写区分
4、 属性必须加引号
5、 标记成对出现
6、 标记要正确嵌套。
7、 空标记要关闭
74、格式良好的XML和有效的XML有什么区别?
有效的XML除了满足XML基本规范外,还要满足DTD和Schema定义的元素规则。有效的XML一定是格式良好的XML,但格式良好的XML不一定有效。
75、DOM和SAX有什么区别?
DOM是以树状方式的一套API,可以读取可以写入;可以随机访问XML中元素;大型文档占用内存较多。
SAX是一套基于事件方式的API。占用内存小,只能读取不能写入,不能随机访问元素,文档只能遍历一次。
76、静态块和实例化块分别在什么时候执行?
静态块在类加载时执行,只执行一次。实例化块在产生对象时执行。每产生一个对象,就执行一次,在super()之后执行。
77、什么是一对一、一对多、多对多?
一对一指的是一条主表记录对应一条从表记录。一对多指的是一条主表记录对应多条从表记录。多对多指的是一条主表记录对应多条从表记录,同时一条从表记录也对应多条主表记录,通过中间表来描述多对多关系。
78、数据库完整性有哪些?
实体完整性:每条记录都要有所区别,不能存在一模一样的记录。通过主键和唯一约束实现
域完整性:保证每一列的值是有效的。通过默认约束、非空约束和检查约束实现
引用完整性:保证从表的外键必须引用主表的主键。通过外键约束实现
用户自定义完整性:用户自定义的规则
79、什么是主键,主键有什么特点?
主键是用于标识一个表中两条记录不能完全一样的列,它有两个特点:非空和值不能重复。
80、什么是外键,它和外键约束有什么区别
外键是指从表的某列与主表的某列存在的关联关系
外键约束是指在从表的外键列上加上一个约束,强制要求从表的外键必须引用主表的主键。如果违反该约束,则不允许该条数据的添加修改。
81、增、删、改、查的基本SQL语句
添加:insert into 表名(字段列表) values(值)
删除:delete from 表名 where id=1
修改:update 表名 set 字段名=新值 where id=1
查询:select * from 表名
82、DELETE和TRUNCATE的区别
Delete可以有选择性的对记录进行删除,要写日志文件,可以回滚删除的记录
Truncate只能清空表中所有记录,不写日志文件,删除的记录不能回滚,但执行效率高。
83、排除重复记录用什么关键字?如何限制查询数据的返回限定行数?
DISTINCT
Select * from 表名 limit 0,3;
84、如何查询null值
查询null值用 is null 或is not null
85、SQL语句的聚合函数有哪些?
Count:统计行数量 Sum:计算单个列的总和
Avg:计算单个列的平均值 Max:计算单个列的最大值
Min:计算单个列的最小值
86、在分组语句中,查询的列可以有哪些?
只能有分组字段列和聚合函数
87、where和having的区别
Where在分组之前执行,所以不能使用聚合函数。Having在分组之后执行,对分组的结果进行条件过滤,只能用聚合函数。
88、描述SQL查询语句执行顺序
第一步:执行FROM
第二步:WHERE条件过滤
第三步:GROUP BY分组
第四步:执行SELECT投影列
第五步:HAVING条件过滤
第六步:执行ORDER BY 排序
89、内连接和外连接区别
内联接是指使用比较运算符根据每个表共有的列的值匹配两个表中的行。
外联接是指不管有没有匹配,被定义了外联接的表数据都要出现在结果中。
内连接:
Select e.*,d.deptName from t_employee e,t_dept d where e.deptId=d.id;
Select e.*,d.deptName from t_employee e join t_dept d on e.deptId=d.id;
外连接:
Select e.*,d.deptName from t_employee e left join t_dept d on e.deptId=d.id;
90、如何删除主表记录?
由于有外键约束存在,如果主表记录有从表记录进行引用,那么无法删除主表记录。
删除主表记录有两种方式:
1、级联删除,先删除主表记录对应的所有从表记录,然后再删除主表记录。
2、外键置空,先将主表记录对应的所有从表记录外键设置为null,然后再删除主表记录。
91、书写case when语句
CASE WHEN price>=1000 THEN '高价商品'
WHEN price>=100 AND price < 1000 THEN '中档商品'
ELSE '低档商品'
END
92、什么是JDBC
JDBC是JAVA连接数据库的一套规范。该规范定义了一系列的接口,由数据库厂商实现,由用户根据接口调用。用户根据接口方法就可以屏蔽不同数据库的差异,无论连接什么数据库都是一套API。
93、JDBC开发流程
加载驱动
建立连接
执行SQL语句
关闭连接
94、什么是SQL注入
SQL注入是指在执行SQL语句时,如果以拼接字符串方式进行值的注入,那么如果值中有非法字符或数据库关键字时,就会导致执行错误或执行结果不正确的情况。
95、Statement和PreparedStatement的区别
Statement是PreparedStatement的父接口,使用拼接字符串的方式填充SQL语句中的值,所以,当值不同的时候,JDBC会重新编译SQL语句,效率低,而且容易造成SQL注入。
PreparedStatement提供了占位符方式设置SQL语句,JDBC不会重新编译SQL语句,而且无论是什么值都当做字符串处理,不会造成SQL注入。
96、什么是三层架构
三层架构即:表现层、业务层、持久层。每一层完成即定的功能,层与层之间用接口做耦合。每一层的组件可以单独测试,当其中一个组件更换或修改后,不会影响别的层的组件。
持久层:用于完成数据库相关的操作。采用DAO模式,创建实体类和数据库表做映射,也就是哪个类对应哪个表,哪个属性对应哪个列。而持久层的目的就是完成对象数据和关系数据的转换。
业务层:用于业务处理。采用事务脚本模式。将一次请求中所有的业务封装成一个方法,保证方法中所有的数据库更新操作同时成功,同时失败。不允许部分成功,部分失败,这样引起数据混乱的情况发生。
表现层:采用MVC模式。M表示模型,就是实体类,用于数据的封装和数据的传输。V表示视图,用于展示数据和接收数据。C表示控制,用于调用业务组件,完成业务流程的控制。
97、书写单例模式
public class Man {
private static Man m = new Man();
private Man(){}
public static Man getMan(){
return m;
}
}