JAVA之美——javaSE知识点总结
1.你觉得java美么?为什么?
2.什么是java?
3.java具有哪些特性?
Java具有简单性,面向对象,分布式,多线程,动态性,体系结构中立和可移植性,健壮性,安全性。
(1)简单性:java语法简洁,方便使用;
(2)面向对象:java采用了面向对象技术,其核心是对数据进行封装和对程序代码的模块化组织,更大程度上支持代码复用;
(3)分布式:使用JDK的API,java程序可以更便捷的实现网络通信,实现程序间的协作,利用远程方法调用可以实现网络环境中的分布式运作。
(4)多线程:java程序的运行采用多线程技术,提高了运行效率。多线程就是指在一个应用程序内部再分成多个子任务,这些子任务作为多个顺序控制流并发运行。
(5)动态性:java的类只有在用到时才会被载入,即java运行时系统采用的是动态链接的方式
(6)体系结构中立和可移植性:java的设计理念就是“一次编写,到处运行”,就是同一份java程序可以不做任何修改就能运行在不同硬件平台和各种操作系统中。为保证java的可移植性,java语言的所有数据类型都是定长的。
(7)健壮性:为了开发出可靠的软件,java提供了广泛的编译时检查和运行时检查机制,java程序中的大多数问题都可以由编译器和运行时环境快速发现。保证了其健壮性。
(8)安全性:java应用程序在运行时,对数据的访问处理权限有严格的控制,保证了其安全性。
4.什么是面向对象,说说你是怎么理解封装,继承和多态的
(1)封装:
指的是将对象的实现细节隐藏起来,然后通过一些公用方法暴露该对象的功能;
因为每个类都有自己属性,为了不让外部的类随意改变自己属性的值,就将其属性私有化,但是这造成了不能初始化的问题,就在类里面写构造方法,而属性可以通过调用get和set方法来使用。
(2)继承:
是面向对象实现软件复用的重要手段,当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法;
(3)多态:
针对一消息,不同的对象可以以适合自身的方式加以响应
指的是子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征,这意味着同一个类型的对象在运行时可能表现出不同的行为特征
4.static关键字有什么特点?如何使用
被static修饰的方法叫着成员方法,被static修饰的变量叫着成员变量
使用static关键字修饰的方法和变量都可以直接通过类名.调用
5.方法的重载和方法的重写的异同:
Overload重载:在一个类当中,方法名相同,参数列表不能
Override重写:发生在子类继承父类当中,方法名,参数列表,返回值类型都必须相同,子类的访问修饰符必须要大于等于父类的访问修饰符,子类抛出的异常必须要小于等于父类抛出的异常
6.abstract关键字怎么用?
abstract用来修饰类,表示该类是抽象类,不能被实例化
abstract用来修饰方法,表示该方法是抽象方法,该方法不能有方法体,而且拥有该方法的类必须是抽象类
7.什么是静态内容,什么是非静态内容?
(1)所有的静态的内容都会在非静态内容执行之前执行。包括子类的静态内容都会在父类的非静态内容执行之前执行。
静态内容之间的顺序根据编写顺序。
所有静态内容只执行一次。类加载时执行。
(2)非静态内容:所有类的非静态变量和非静态块的执行顺序也按编写顺序执行。
父类非静态块/非静态变量赋值-》父类构造方法-》子类非静态块/非静态变量赋值-》子类构造方法。
非静态内容在每次创建对象时都执行
8.抽象类和接口有什么异同?
(1).两者都不能被实例化(new),都包含抽象方法,但是接口中如果有方法必须是抽象方法,而抽象类中可以有抽象方法和普通方法
(2).接口主要描述类有什么功能,是一组对类的需求表述;
抽象类主要是讲这个是什么东西,本质上还是一个类。
(3)一个接口继承多个接口,同一个类可以是吸纳多个接口,而抽象类毕竟是一个类,
只能继承一个类,如果这个类继承了一个类,它就不能再继承其他的类
(4)接口只能包含抽象方法,
(5)接口继承抽象类和实现接口都必须要实现其抽象方法,除非此类是抽象类。
9.== 和equals的区别?
== 在值类型中比较的是大小,在引用类型中比较的是地址
equals只能用在引用类型中,比较是的内容。
10.String string1 = null 和String string2 = ""的区别?
String string 1= null; 没有指向堆中任何地址,没有分配内存
String string2 = ""; 在堆中创建了一个空间,中间存放了一个空字符串
11.String 和String Buffer的区别?
String是不可变字符序列,每次改变都是在创建一个新的字符串
String Buffer是线程安全的可变字符序列,一个类似于 String的字符串缓冲区。
12.String Buffer和String Builder的区别?
String Buffer线程安全的可变字符序列,用于弥补String类追加、插入的时候效率低,所以主要的功能就是追加(append)、插入(insert)
String Builder是线程不安全的String Buffer,String Builder的速度比String Buffer快
13.值传递和引用传递的区别?
14.什么是装箱,什么是拆箱?
Boxing:装箱就是指值类型转换为引用类型
UnBoxing:拆箱就是指引用类型转换为值类型
15.ArrayList、LinkedList、Vector有什么区别?
(1)ArrayList底层是数组,增删慢,查找快。
线程不安全,效率高
(2)LinkedList底层是链表,增删快,查找慢。
线程不安全,效率高
(3)Vector底层是数组,增删慢,查找快。
线程安全的,效率低
16.List和Set、Map什么区别?
List有序的,可以重复的
Set无序的,不能重复的
Map是由键值对组成
17.Collection和Collections什么区别?
Collection是单列集合的顶层接口
Collections是操作集合的工具类,有对集合的查找、排序、洗牌等功能。
18.异常分为哪几种?有什么区别?
checked异常:编译时就报错
unchecked异常:编译时没有问题,运行时报错,是自己代码的问题
19.final、finallize、finally什么区别?
final是个修饰词,用来修饰类,表示该类不能有子类,用来修饰方法,表示该方法不能被重写,用来修饰变量,表示该变量变为常量
finallize是Object类里面的方法,表示垃圾回收
finally表示在异常抛出后,用来释放资源
20.throws和throw什么区别?
throws:.
用在方法后面,跟的异常的类名
可以有多个异常类名
表示可能有后面异常抛出,但是不一定会发生
throw:
用在方法体里面,跟的是异常对象
只能抛出一个具体的异常对象
表示抛出一个具体的异常了。只要执行到这里,一定会有异常抛出。
21.HashMap和TreeMap、Hashtable什么区别?
HashMap无序的,不能重复的,如果是自定义的类,需要重写Hashcode和equals方法,HashMap的键可以存储null,线程不安全的
TreeMap有序的,不能重复的,如果自定义的类,需要实现compable接口或者重写compare方法
Hashtable的键不可以存储null,线程安全的
22.HashMap和Hashtable什么区别?
HashMap的键可以存储null,线程不安全的
Hashtable的键不可以存储null,线程安全的
23.什么是进程?什么是线程?
进程:正在运行中的程序就叫着进程
线程:一个进程中有多个线程,一个进程中有多个任务可以同时进行。
24.run方法和start方法有什么区别?
start()方法启动一个线程,调用该Runnable的run()方法,不能多次启动一个线程
run()方法:是本线程中被调用Runnable里面的run()方法,可以重复多次调用
25.请简述下线程的生命周期。*****
线程状态:新建、就绪、运行、阻塞、终止
新建(没有执行资格,没有执行权)
通过调用start()方法,就绪(有执行资格,没有执行权)
抢到CPU,运行(有执行资格,有执行权)
通过调用sleep()和wait()方法,阻塞(没有执行资格,没有执行权)
通过调用notaify()方法,重新进入就绪状态
通过调用stop()和interrupt()方法,终止(没有执行资格,没有执行权)
26.(设计模式)懒汉模式,饿汉模式有什么区别:
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
27. JDK 1.5新特性
1.泛型(Generics)
2.增强的“for”循环(Enhanced For loop)
3.自动装箱/自动拆箱(Autoboxing/unboxing)
4.类型安全的枚举(Type safe enums)
5.静态导入(Static import)
6.可变参数(Var args)