您的位置:首页 > 编程语言 > Java开发

java部分知识小总结

2013-06-23 22:10 281 查看

面向对象

一、多态

1.方法的重载

在类中定义了二个或以上的相同名称方法,但它们拥有不同的参数列表(参数列表不同指以下方面:参数的个数不同、参数的类型不同、参数的顺序不同)

重载的条件:和方法的返回类型,方法的访问修饰符无关.只跟方法的参数列表有关

2.方法的重写

在子类中声明了一个和父类相同的方法,父类的方法在子类中就被覆盖了

子类重写父类的方法时访问修饰符要大于或者等于父类的,绝对不能小于。

如果要在子类中调用父类被重写的方法,可以使用super.方法名(参数列表)

3.父类的引用指向子类的对象时

根据指向的对象不同,同样的方法会有不同的表现。

二、继承

1.子类继承父类就拥有了父类的非私有属性和方法。但是父类的构造方法子类不能继承。

2.使用关键字extends

3.调用子类的构造方法时,会先调用父类的构造方法。默认隐式调用父类无参数的构造方法

4.如果要在子类的构造方法中显式调用父类的构造方法。使用super(参数列表),但是这行代码必须是在子类的构造方法的第一行。

三、方法修饰符

1.static

1.1.static :修饰的属性是类的属性,修饰的方法是类的方法。不需要创建对象就可以访问

1.2.静态块中不能访问非静态的内容。

1.3.静态块中不能使用this,super关键字

2.final

2.1final:能修饰类,方法,属性

2.2:final修饰的类,此类不能被继承。

2.3:final修饰的方法,该方法不能被重写。

2.4:final修饰的变量,变量的值不能更改。

如果类中的成员属性是final的,必须在声明的时候赋值或者在构造方法中显式赋值。

如果类的属性是final的,必须在声明的时候就赋值。

如果fianl修饰的变量是局部变量,声明的时候没有赋值,接下来,有一次给它赋值的机会,赋完值后,再也不能更改了.

3.abstract

父类中的方法无法进行具体的实现。方法的具体实现由其子类完成。

3.1:抽象方法只能在抽象类中声明。

3.2:子类继承抽象类时,必须实现父类所有的抽象方法,否则自己也要变成抽象类.

3.3:抽象类不能实例化对象。但是可以创建抽象类的引用,指向子类的对象。

4.interface

解决java不能多重继承的不足。

接口中的所有方法都是抽象的,不允许实现方法。

接口中的方法默认为:public abstract(可省)

接口中的属性默认为:public static final

实现接口时必须实现接口中的所有抽象方法,否则自己就要变成抽象类。

常用类库

一、Object类

Object的构造方法

Object类只有一个无参的构造方法 Object()

Object中常用的方法

booleanequals(Object o) 比较两个对象是否相同

inthashCode() 返回一个对象的哈希码

StringtoString() 将一个对象转换为字符串

二、String类

String类代表字符串,提供了开发中常用的字符串处理的方法,如:求字符串的长度、截取字符串、替换字符串等方法

字符串是常量,它的值创建之后就不可以再修改了。

String类常用构造方法

String()无参构造方法

String(Stringstr) 有一个字符串参数的构造方法

String(char[]ch)有一个char类型数组参数的构造方法

String(byte[]b) 有一个byte数组参数的构造方法

String类常用方法

int length() 求字符串值的字符个数

boolean equals(Object o) 比较两个字符串是否相同

String replace(char old,char n) 字符串替换

char charAt(int index) 返回指定字符串指定位置的字符

int compareTo(String s)按字典顺序比较字符串大小

boolean endsWith(String s) 比较字符串是否以指定的参数结尾

boolean beginsWith(String s)比较字符串是否以指定的参数开头

String valueOf(int i)将基本数据类型转换为字符串

三、StringBuffer和StringBuilder类

StringBuffer和StringBuilder都是带有缓冲区的可变字符串。

一个String对象的长度是固定的,不能改变它的内容,也不能附加新的字符至String对象中。可以使用加号“+”运算符来连接字符串以达到附加新字符或字符串的目的,但使用加号“+”运算符会产生一个新的String实例,即需要另外分配空间。如果既想节省开销,又能改变字符串的内容,则可以使用StringBuilder类。

StringBuffer类的构造方法

StringBuffer()

StringBuffer(String s)

StringBuffer的常用方法

StringBufferappend(int i)在可变字符串末尾追加I

StringBufferinsert(int offset,String s)在可变字符串指定位置插入另外一个字符串s

int length() 返回可变字符串中字符的个数

String toString() 将可变字符串转化为字符串对象

String类、StringBuffer和StringBuilder之间的区别:

String字符串是常量,一旦创建无法修改

StringBuffer和StringBuilder是可变字符串,创建之后仍可以修改

StringBuffer是线程安全的、StringBuilder线程不安全

四、System类

System类代表运行时系统,提供了一些获取设置和获取当前系统运行环境的方法

System有三个成员变量

in 标准输入流

out 标准输出流

err 错误输出流

System中的方法

System.arrayCope()//快速复制数组的方法

System.exit();//退出Java虚拟机的方法

五、Math类

Math类表示的是数学的计算操作,在Math类中提供类很多的操作方法,在此类中有一个方法很重要:四舍五入,public static longround(double a)

六、random类

Java.util.Random类的作用就是生成随机数,方法有:

public Random() 实例化对象。

public int nextInt(int n) 取出不大于n的整数。

public float nextFloat() 取出小数。

七、Arrays类

java.util.Arrays类在之前的数组排序的操作中了解过,实际上此类是一个专门操作数组的类。

八、Date类

Java.util.Date类的使用非常简单,此类使用的时候直接输出即可。如:

Datedate = new Date();

九、Calendar类

使用此类可以将时间精确到毫秒显示,此类也是一个抽象类,既然是抽象类则使用的时候肯定要依靠其子类进行实例化操作,使用“GregorianCalendar”类就能够完成。

IO

J2SE提供的I/O类库中,主要分为两大继承体系:InputStream/OutputStream和Reader/Writer。

一、inputStream

StringBufferInputStream-- 把一个String对象作为InputStream .注释:不推荐使用StringBufferInputStream 方法。此类不能将字符正确的转换为字节。同 JDK 1.1 版中的类似,从一个串创建一个流的最佳方法是采用 StringReader 类。

construct---StringBufferInputStream(String)据指定串创建一个读取数据的输入流串。

FileInputStream -- 把一个文件作为InputStream,实现对文件的读取操作

construct---FileInputStream(File)创建一个输入文件流,从指定的 File 对象读取数据。---FileInputStream(FileDescriptor)创建一个输入文件流,从指定的文件描述器读取数据。---FileInputStream(String)创建一个输入文件流,从指定名称的文件读取数据。

method ---- read() 从当前输入流中读取一字节数据。 read(byte[]) 将当前输入流中 b.length 个字节数据读到一个字节数组中。 read(byte[], int,int) 将输入流中 len 个字节数据读入一个字节数组中。

二、OutputStream

ByteArrayOutputStream:把信息存入内存中的一个缓冲区中.该类实现一个以字节数组形式写入数据的输出流。当数据写入缓冲区时,它自动扩大。用 toByteArray() 和 toString() 能检索数据。

construct ---ByteArrayOutputStream() 创建一个新的字节数组输出流。--- ByteArrayOutputStream() 创建一个新的字节数组输出流。 ---ByteArrayOutputStream(int) 创建一个新的字节数组输出流,并带有指定大小字节的缓冲区容量。 toString(String) 根据指定字符编码将缓冲区内容转换为字符串,并将字节转换为字符。 write(byte[], int,int) 将指定字节数组中从偏移量 off 开始的 len 个字节写入该字节数组输出流。
write(int) 将指定字节写入该字节数组输出流。 writeTo(OutputStream)用 out.write(buf, 0,count) 调用输出流的写方法将该字节数组输出流的全部内容写入指定的输出流参数。

FileOutputStream:文件输出流是向 File 或 FileDescriptor 输出数据的一个输出流。

FileOutputStream(File)创建一个文件输出流,向指定的 File 对象输出数据。FileOutputStream(FileDescriptor) 创建一个文件输出流,向指定的文件描述器输出数据。 FileOutputStream(String) 创建一个文件输出流,向指定名称的文件输出数据。FileOutputStream(String, boolean) 用指定系统的文件名,创建一个输出文件。

PipedOutputStream:管道输出流是指一个通讯管道的发送端。 一个线程通过管道输出流发送数据,而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。

PipedOutputStream() 创建一个管道输出流,它还未与一个管道输入流连接。PipedOutputStream(PipedInputStream) 创建一个管道输出流,它已连接到一个管道输入流。

以字符为导向的stream Reader/Writer

以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream 中写入信息。Reader/Writer 为abstact类以Unicode字符为导向的stream包括下面几种类型:

三、Reader

1) CharArrayReader:与ByteArrayInputStream对应CharArrayReader(char[]) 用指定字符数组创建一个CharArrayReader。CharArrayReader(char[],int, int) 用指定字符数组创建一个 CharArrayReader。

2) StringReader:与StringBufferInputStream对应 StringReader(String) 创建一新的串读取者。3) FileReader:与FileInputStream对应

4) PipedReader:与PipedInputStream对应

四、Writer

1) CharArrayWrite:与ByteArrayOutputStream对应 2) StringWrite:无与之对应的以字节为导向的stream 3) FileWrite:与FileOutputStream对应 4) PipedWrite:与PipedOutputStream对应

两种不现导向的stream之间的转换InputStreamReader和OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream。一个 InputStreamReader 类是从字节流到字符流的桥梁:它读入字节,并根据指定的编码方式,将之转换为字符流。使用的编码方式可能由名称指定,或平台可接受的缺省编码方式。

InputStreamReader 的 read() 方法之一的每次调用,可能促使从基本字节输入流中读取一个或多个字节。为了达到更高效率,考虑用 BufferedReader 封装 InputStreamReader,BufferedReader in =new BufferedReader(new InputStreamReader(System.in));

InputStreamReader(InputStream)用缺省的字符编码方式,创建一个 InputStreamReader。InputStreamReader(InputStream, String) 用已命名的字符编码方式,创建一个 InputStreamReader。

OutputStreamWriter 将多个字符写入到一个输出流,根据指定的字符编码将多个字符转换为字节。 每个 OutputStreamWriter 合并它自己的 CharToByteConverter, 因而是从字符流到字节流的桥梁。

线程

一、线程的四种状态

就绪Runable——运行中Running——阻塞Blocked——死亡Dead(结束)

线程在一定条件下,状态会发生变化。线程变化的状态转换图如下:

1、新建状态(New):新创建了一个线程对象。

2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。

3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。

4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:

(一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。

(二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

(三)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

5、死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

二、两种模型的区别与联系

Runnable是Thread的接口,在大多数情况下“推荐用接口的方式”生成线程,因为接口可以实现多继承,况且Runnable只有一个run方法,很适合继承。

在使用Thread的时候只需要new一个实例出来,调用start()方法即可以启动一个线程。 Thread Test = newThread(); Test.start();

在使用Runnable的时候需要先new一个实现Runnable的类的实例,之后,创建线程时将线程与该实例关联(其本质是让该线程执行时调用该实例中的run方法)。



网络

一、ServerSocket类

ServerSocket类用来表示服务器套接字。服务器套接字通过指定的端口来等待连接的套接字,他的主要功能是等待来自网络上的连接“请求”。服务器套接字一次可以与一个套接字连接,如果多台客户机同时提出连接请求,服务器套接字会将请求连接的客户机存入队列中,然后从中取出一个套接字,与服务器新建的套接字连接起来,如果请求连接数大于最大容纳数,则多出的请求被拒绝。队列的默认大小为50.

三、Socket类

Socket类是套接字类。使用Socket类时需要制定待连接的服务器的ip和端口号。服务器套接字与客户端套接字连接成功后,则可以获取套接字的输入输出流,进行数据交换。

集合

集合collection,应分清三个概念:colection 集合,用来表示任何一种数据结构;Collection 集合接口,指的是 java.util.Collection接口,是 Set、List 和 Queue 接口的超类接口;Collections 集合工具类,指的是 java.util.Collections类。

一、Collection 接口

Collection接口是Set 、List 和Queue 接口的父接口,提供了多数集合常用的方法声明,包括 add()、remove()、contains()、size() 、iterator()等。

1、List接口
List 关心的是索引,与其他集合相比,List特有的就是和索引相关的一些方法:get(int index) 、add(int index,Object o) 、 indexOf(Object o) 。

ArrayList 可以将它理解成一个可增长的数组,它提供快速迭代和快速随机访问的能力。

LinkedList 中的元素之间是双链接的,当需要快速插入和删除时LinkedList成为List中的不二选择。

Vector 是ArrayList的线程安全版本,性能比ArrayList要低,现在已经很少使用

2、Set接口
Set关心唯一性,它不允许重复。

HashSet 当不希望集合中有重复值,并且不关心元素之间的顺序时可以使用此类。

LinkedHashset 当不希望集合中有重复值,并且希望按照元素的插入顺序进行迭代遍历时可采用此类。

TreeSet 当不希望集合中有重复值,并且希望按照元素的自然顺序进行排序时可以采用此类。

3、Queue接口
Queue用于保存将要执行的任务列表。

LinkedList 同样实现了Queue接口,可以实现先进先出的队列。

PriorityQueue 用来创建自然排序的优先级队列。

4、Map接口
Map关心的是唯一的标识符。他将唯一的键映射到某个元素。当然键和值都是对象。

HashMap 当需要键值对表示,又不关心顺序时可采用HashMap。

Hashtable 注意Hashtable中的t是小写的,它是HashMap的线程安全版本,现在已经很少使用。

LinkedHashMap 当需要键值对,并且关心插入顺序时可采用它。

TreeMap 当需要键值对,并关心元素的自然排序时可采用它。

二、ArrayList的使用

ArrayList是一个可变长的数组实现,读取效率很高,是最常用的集合类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: