JAVA基础

 

JAVA复习

一、面向对象

继承

主要作用:让类与类产生了父子的关系,子对父类的的属性和方法进行引用

封装

对对象的属性,方法进行统一的管理,利于代码的复用,更好的体现万物皆对象。

多态

继承和实现接口都是多态的体现,多态主要是为了对原有的方法进行扩展和维护

抽象类与接口

 区别:

抽象类中既有抽象方法,也有非抽象方法,抽象类中如果有一个方法是抽象方法,那这个类就是抽象类,抽象类要求继承他的子类必须实现所有的抽象方法

接口:接口中所有的方法都是抽象方法,实现他的子类必须实现其所有的抽象方法

方法重写和重载

区别:

方法重写又称覆盖,要求要写的方法和父类的方法必须完全一至

方法重载:要求方法名相同,参数类型不同,修饰符比和原方法一致或比原先的权限大,对返回值没有要求。

 

二、集合

结构:

java.util
接口 Collection<E>

所有超级接口:
Iterable<E>
所有已知子接口:
List<E>, Queue<E>, Set<E>, SortedSet<E>
 

java.util
接口 List<E>

所有超级接口:
Collection<E>, Iterable<E>
所有已知实现类:
, ArrayListLinkedListVector
 

java.util
接口 Set<E>

所有超级接口:
Collection<E>, Iterable<E>
所有已知子接口:
SortedSet<E>
所有已知实现类:
, HashSet, LinkedHashSet, TreeSet

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

java.util
接口 Map<K,V>

所有已知实现类:
HashMap, HashtableLinkedHashMapTreeMap

 

List.Set.Map各自特性:

List存储的是不唯一的、有序的集合元素。

Set存储的是唯一的、无序的集合元素。
Map是以键值对的形式存储元素。

 

总结:

List

集合接口List、Set继承自接口collection.接口collection继承自Iterator接口

List的实现类有ArrayList,Vector,LinkedList。

各自特性:

ArrayList 以数组方法存储数据,是不同步的,非线程安全的,操作数据速度较快

Vector存储数据是使用的是同步的方法,是线程安全的,操作数据速度较慢

LinkedList 是以链表的形式存储数据,存储进去的数据是按自然顺序排列的,取出的时候也是按自然顺序排列,因为是链表的形式存储,所以操作时面的数据速度较快,但查询数据较慢

Set

Set的实现类有HashSet,TreeSet,LinkedHashSet

各自特性:

HashSet是按Hash算法存储一组唯一的,无序的元素,内部实现了equals()和和hashCode()方法

TreeSet在存储的数据的时候,会先对数据过行排序后再进行存储,实现了Comparable接口,并复写了Compare和CompareTo方法

LinkedHashSet:存储数据的时候按自然顺序存储一组唯一的,有序的元素

 

Map

Map的实现类有:HashMap,HashTable,TreeMap,LinkedHashMap;

HashMap 以键值对的形式 存储键为唯一,值不唯一的集合元素,父类为AbstractMap,非线程安全,键可以允许一个空键

HashTable 以键值对的形式 存储键为唯一,值不唯一的集合元素,父类为Dictionary是线程安全 来自于1.2之前

TreeMap:以键值对的形式,存储数据的时候会先对元素进行排序后再储存

LinkedHashMap::以键值对的形式,按自然顺序储存集合元素

 

三、范型

范型的使用:

当一个集合需要固定类型的值,而不想要其它类型的时候,可以将这个集合定义为范型。在执行添加方法的时候必须添加定义好的数据类型,如果定义别的类型,则会编译异常。在取出范型集合元素的时候不用再对类型进行强制转换

使用注意:范型在编译完成后,字节码文件会去掉范型的定义。这时如果使用反射向集合中添加值,则可以不受范型类型限制。

 

四、文件流

文件流类型:Reader Writer InputStream OutputStream

Reader 字符流读取---对字符文件操作---对应的缓存流BufferedReader

Writer 字符流写入---对字符文件操作---对应的缓存流BufferedReader

InputStream 字节流读取---对二进制文件操作---对应的缓存流BufferedReader

OutputStream 字节流写入---对二进制文件操作---对应的缓存流BufferedReader

InputStreamReader 将输入流转换为字符流(主要用于字符设置或更改字符编码)

OutputStreamWriter 将字符流转换为字节流输出(主要用于字符设置或更改字符编码)

 

Reader实现类

FileReader StringReader CharArrayReader 

 

Writer实现类

CharArrayWriter,OutputStreamWriter,StringWriter ,FileWriterPrintWriter

PrintWriter将字符流文件写到不同的目标当中(控制台、输出字符流、输出字节流、文件)

 

InputStream

ByteArrayInputStream,FileInputStream,ObjectInputStream,SequenceInputStream,StringBufferInputStream

SequenceInputStream  组合流,可以将多个输入流通过输入流整合成一个输入流,对输入流进行操作

PipedInputStream 管道输入流 主要用到两个线程这之前传输文件或数据

 

OutputStream

ByteArrayOutputStream,DataOutputStream,PrintStream

PrintStream将字节流文件写到不同的目标当中(控制台、输出字节流、文件)

PipedoututStream 管道输入流 主要用到两个线程这之前传输文件或数据

 

 

五、异常

结构:

java.lang
类 Throwable

java.lang.Object
  java.lang.Throwable
所有已实现的接口:
Serializable
直接已知子类:
Error, Exception

异常与错误的区别:

Error异常是一般是系统异常,不是不可修复,但是修复起来非常困难的,遇到此类的异常一般程序都不再往下执行,常用的错误异常有OutOfMemoryError

Exception 异常一般是由程序设计不当而引起的,是可以修复的异常

Exception

Exception分为运行时异常和非运行异常

非运行异常必须要被处理,抛出或try处理

运行异常可以不抛出或处理,但程序如果遇到运行时异常的时候会报错,终止程序的进行,如果不抛出,一般用来提醒调用人的调用错误,常见的运行时异常有:

NullPointerException、indexOutOfException、metodNotFoundException等

 

 

异常处理:

try处理

1、try{}catch{}fannlly{}

2、try{}catch{}

3、try{}finnally{}

4、throw

throws throws处理

throw 用于方法中 抛出异常、后面跟的是对象

throws 用于方法后面,用于声明异常、后面跟的是方法实体,声明的多个异常之间用逗号分隔

 

六、反射

 反射就使用方法,通过字节码将一个对象中的所有元素映射成相应的类。

取得有参构造    类的字节码.getContractor(构靠中参数字节码.....);

取得无参构造    类的字节码.getContractor();

取得方法 类的字节码.getMethod();

取得参数 类的字节码.getDeclaredFields(); 修饰符私有的也可以取得 但是设置setAccessible为true

取得参数 类的字节码.getFields(); 修饰符 必须取得公有的才可以取得

取得包   getPackage(); 

 

数组反射(通过对象Array进行反射读取)

如果数组的位数(都是一维或二维)并且类型一致的话,那么这两个数组的字节码相同

 

 数组反射示例:

  1. int[] a = new int[] { 123 };  
  2. String[] b = new String[] { "a""c""b" };  
  3.   
  4. System.out.println(Arrays.asList(a));  
  5. System.out.println(Arrays.asList(b));  
  6.   
  7. Class cl = a.getClass();  
  8. if (cl.isArray()) {  
  9.     for (int i = 0; i < Array.getLength(a); i++) {  
  10.   
  11.         System.out.println(Array.get(a, i));  
  12.   
  13.     }  
  14. }  

基本类型不是Object类型,数组和String都是object类型,二维数组是Object类型,因为二维数组里面存放的一个数组,数组是object类型的

 因为int是基础类型而不是Object类型,在jdk1.5中该方法要求传入一个Object数组,因为不是Object数组,所以会返回jdk1.4处理,并返回一个数组对象。

而String是object所以此方法会直接将String数组转换成List并打印出来

 

七、动态代理

 代理:就是对某个对象的某个方法使用代理的对象,进行方法增强,对方法增加特定的代理功能,以及对原方法参数进行改变,实现对原方法的控制

代理的核心方法是invoketionHander对象的invoke方法,当对象执行特定方法的时候,会找到invoketionHander对象的invoke()方法,并执行

添加代码可以在原方法的前面、后面、前面和后面、异常产生时添加代理方法

示例:

		Collection coll = (Collection)Proxy.newProxyInstance(Collection.class
				.getClassLoader(), new Class[]{Collection.class},
				new InvocationHandler() {
					@Override
					public Object invoke(Object proxy, Method method,
							Object[] args) throws Throwable {
						Object o = method.invoke(list, args);
						return o;
					}
				});
		coll.add("aa");

 八、注解

 

 

 

 

九、类加载器

 

十、网络编程

 

十一、多线程

 

十二、内部类

十三、枚举

 

十四、设计模式

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值