JavaSE总结——Java应用程序设计

参考资料

Java开发实战经典_百度百科

 

知识梳理:

1、线程:

thread与runnable——状态——同步与死锁

2、io

字节:Inputstream(Outputstream)——File——FileInputstream(FileOutputstream)——write()和reader()

字符:Writer(Reader)——File——FileWriter(FileReader)——writer()和reader()

3、类集

collection——list——set——map

4、输出map

entrySet——keySet——values

5、查询

forName——getConnection——preperStatement——excuteQuery——next

 

第九章——多线程

1、进程与线程

所谓多线程是指一个进程在执行过程中可以产生多个更小的程序单元,这些更小的单元称为线程

2、线程的实现

  • Thread类

a、覆写run()方法,调用shtart()方法启动线程

b、如果一个类通过继承Thread来实现,那么同一个对象只能调用一次start()方法

  • Runnable接口

Runnable接口中只定义了一个抽象方法:public void run()

  • 关系
  1. Thread类是Runnable接口的子类
  2. 实现Runnable接口可以实现资源共享

2、线程的状态

创建:在程序中创建了一个线程对象后,新的线程对象处于新建状态

就绪:调用start()方法启动线程

运行:当线程被调用获得处理器资源时,线程就进入了运行状态,自动调用该线程的run()方法

阻塞:特殊情况下,如被人为挂起或需要执行耗时的输入/输出操作时,会让出CPU并暂时中止自己的执行

终止:调用stop()方法或run()方法执行结束

3、线程常用的相关方法

方法摘要

 String

getName()
          返回该线程的名称。

 int

getPriority()
          返回线程的优先级。

 void

interrupt()
          中断线程。

 boolean

isAlive()
          测试线程是否处于活动状态。

 void

join(long millis)
          等待该线程终止的时间最长为 millis 毫秒。

 void

run()
          如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。

 void

setName(String name)
          改变线程名称,使之与参数 name 相同。

 void

setPriority(int newPriority)
          更改线程的优先级。

static void

sleep(long millis)
          在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。

 void

start()
          使该线程开始执行;Java 虚拟机调用该线程的 run 方法。

static void

yield()
          暂停当前正在执行的线程对象,并执行其他线程。

  • 线程的优先级:Priority

4、同步与死锁

  • 同步

多个操作在同一时间段内只能有一个线程进行,其他线程要等待此线程完成之后才能继续操作

同步代码块

synchronized(同步对象){

    需要同步的代码;

}

同步方法
synchronize 返回值 方法名(参数){
}
  • 死锁

线程之间互相等待而造成的程序停滞







第十章——泛型

Object类可以接收任意的子类对象

1、泛型的基本应用

class 类 <泛型>{
    修饰符 泛型 属性;
    public 泛型 getter();
    public void setter(泛型 变量){}
}

2、通配符

  1. 在进行引用传递时泛型类型必须匹配才可以传递
  2. 无法使用Object进行操作
  3. 通配符“?”可以接收任意泛型对象,但不能给泛型对象的属性设置内容,可以设置null值

3、泛型的上限extends和下限super

上限
对象参数:泛型类 <? extends 类> 对象
定义类:class 类 <泛型 extends 类>{}
下限
对象参数:泛型类<? super 类> 对象
定义类:class 类<泛型 extends 类>{}

4、泛型与子类继承的限制

子类泛型类型无法使用父类泛型类接收

5、其他泛型应用

  • 泛型接口
inter face 接口<泛型>{}
  • 泛型方法
<泛型> 泛型 方法(泛型 参数)

 

第十一章——Java常用类库

1、常用类

  • StringBuffer

方法摘要

 StringBuffer

append(StringBuffer sb)
          将指定的 StringBuffer 追加到此序列中。

 char

charAt(int index)
          返回此序列中指定索引处的 char 值。

 StringBuffer

delete(int start, int end)
          移除此序列的子字符串中的字符。

 StringBuffer

deleteCharAt(int index)
          移除此序列指定位置的 char

 int

indexOf(String str, int fromIndex)
          从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。

 StringBuffer

insert(int offset, String str)
          将字符串插入此字符序列中。

 int

lastIndexOf(String str)
          返回最右边出现的指定子字符串在此字符串中的索引。

 int

length()
          返回长度(字符数)。

 StringBuffer

replace(int start, int end, String str)
          使用给定 String 中的字符替换此序列的子字符串中的字符。

 StringBuffer

reverse()
          将此字符序列用其反转形式取代。

 void

setCharAt(int index, char ch)
          将给定索引处的字符设置为 ch

 void

setLength(int newLength)
          设置字符序列的长度。

 String

substring(int start, int end)
          返回一个新的 String,它包含此序列当前所包含的字符子序列。

 String

toString()
          返回此序列中数据的字符串表示形式。

 

注意:

三者的继承结构

三者的区别

StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象,而且用到了缓存机制

  • Runtime

每一个JVM对应着一个Runtime类的实例,由JVM运行时为其实例化,构造方法私有化

  • 日期操作类

new SompleDateFormat("格式").format(new Date());

  • Math

sqrt(),max(),min(),pow(),round()

  • Ramdom

构造方法摘要
Random()
          创建一个新的随机数生成器。
Random(long seed)
          使用单个 long 种子创建一个新的随机数生成器。

 

方法摘要
protected  intnext(int bits)
          生成下一个伪随机数。
 booleannextBoolean()
          返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。
 voidnextBytes(byte[] bytes)
          生成随机字节并将其置于用户提供的 byte 数组中。
 doublenextDouble()
          返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.01.0 之间均匀分布的 double 值。
 intnextInt()
          返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
  • Arrays

2、对象克隆技术

实现Cloneable接口,此接口没有定义任何方法,要覆写Object类的clone()方法来实现克隆

 







第十二章——Java IO

 

1、File

方法摘要

 int

compareTo(File pathname)
          按字母顺序比较两个抽象路径名。

 boolean

createNewFile()
          当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

 boolean

delete()
          删除此抽象路径名表示的文件或目录。

 void

deleteOnExit()
          在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。

 boolean

equals(Object obj)
          测试此抽象路径名与给定对象是否相等。

 boolean

exists()
          测试此抽象路径名表示的文件或目录是否存在。

 String

getName()
          返回由此抽象路径名表示的文件或目录的名称。

 String

getParent()
          返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null

 File

getParentFile()
          返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null

 String

getPath()
          将此抽象路径名转换为一个路径名字符串。

 boolean

isDirectory()
          测试此抽象路径名表示的文件是否是一个目录。

 boolean

isFile()
          测试此抽象路径名表示的文件是否是一个标准文件。

 long

length()
          返回由此抽象路径名表示的文件的长度。

 String[]

list()
          返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。

 File[]

listFiles()
          返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

static File[]

listRoots()
          列出可用的文件系统根。

 boolean

mkdir()
          创建此抽象路径名指定的目录。

 boolean

mkdirs()
          创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。

2、字节流

操作时必须接受File类的实例,指明文件路径

  • 输出

  • 输入

2、字符流

一个字符等于两个字节

  • 输出

true表示追加内容,而不是覆盖

  • 输入

3、字节流与字符流的区别

a、字符流在操作时使用了缓冲区,字节流在操作时不会用到缓冲区,是文件本身直接操作的

b、关闭字符流时会强制性地将缓冲区中的内容进行输出,不关闭字符流缓冲区的内容是无法输出的,而不关闭字节流依然可以输出

通过缓冲区在操作文件,不关闭字节流依然可以进行操作

4、转换流

输出流
Writer wrier=new OutputStreamWriter(new FileOutputStream(f));
输入流
Reader reader=new InputStreamReader(new FileInputStream(f));

 

5、打印流

打印流是输出信息最方便的类,可以打印任意数据类型,如小数、整数、字符串等。

PrintStram ps=new PrintStream(new FileOutputStram)(new File(路径));
ps.print(数据);

6、System类对IO的支持

System表示系统类

  • System.out

System.out是PrintStream的对象

OutputStream out=System.out;
out.write(内容);
  • System.err

System.err表示的是错误信息输出

System.err.println(e);

与System.out的区别

  • System.in

System.in实际上是一个键盘的输入流

7、BufferReader

用于从缓冲区中读取内容,所有的输入字节数都将放在缓冲区中

 

8、Scanner

Scanner类可以接收任意的输入流

9、对象序列化

对象序列化就是把一个对象变为二进制的数据流的一种方法,必须实现Serializable,结合对象流进行输入和输出

10、对象流

可以操作单个对象,也可以操作对象数组

  • 输出

  • 输入







第十三章——Java类集

所谓类集就是一个动态的对象数组,类集框架本身不受对象数组长度的限制

1、Collection接口

方法摘要

 boolean

add(E e)
          确保此 collection 包含指定的元素(可选操作)。

 boolean

addAll(Collection<? extends E> c)
          将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。

 void

clear()
          移除此 collection 中的所有元素(可选操作)。

 boolean

contains(Object o)
          如果此 collection 包含指定的元素,则返回 true。

 boolean

containsAll(Collection<?> c)
          如果此 collection 包含指定 collection 中的所有元素,则返回 true。

 boolean

equals(Object o)
          比较此 collection 与指定对象是否相等。

 boolean

isEmpty()
          如果此 collection 不包含元素,则返回 true。

 Iterator<E>

iterator()
          返回在此 collection 的元素上进行迭代的迭代器。

 boolean

remove(Object o)
          从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。

 boolean

removeAll(Collection<?> c)
          移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。

 boolean

retainAll(Collection<?> c)
          仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。

 int

size()
          返回此 collection 中的元素数。

 Object[]

toArray()
          返回包含此 collection 中所有元素的数组。

<T> T[]

toArray(T[] a)
          返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

Collection接口是单值存放的最大父类接口

2、List接口

List是Collection的子接口,可以保存各个重复的内容

  • List接口的常用子类

a、Arraylist是List子类,可以直接通过对象的多态性为List接口实例化

b、LinkedList表示的是一个链表的操作类

 

3、Set接口

不能加入重复的元素

  • Set接口常用子类
  1. 散列的存放HashSet
  2. 有序的存放TreeSet
  • 自定义的类排序

每个对象所在的类必需都实现Comparable,利用比较器才可以正常的使用

  • 自定义类去重

覆写equals和hashCode()

 

4、Map接口

a、Map接口中的每个元素都使用“key——value”的形式储存

b、Map.Entry接口是Map内部定义的一个接口,实际上每一个“key——value”的数据都保存在了Map.Entry接口实例之后,再在Map集合中插入一个Map.Entry的实例化对象

  • Map接口常用子类
  1. HashMap:无序存放,key不允许重复
  2. TreeMap:可以排序的Map集合
  • 保存对象

匿名对象

实例化对象

对象类覆写haseCode()和equals()

  • 输出Map

for(String key:map.keySet()){
                String value = map.get(key).toString();
                System.out.println("key:"+key+" vlaue:"+value);
            }

 

        for(Object m:map.values()){
          System.out.println(m);
        }

 







第十四章——枚举

1、定义枚举类

2、Enum

    

每一个枚举对象都可以包含多个属性,可以通过构造方法赋值,通过setter方法为属性赋值

第十五章——反射机制

一、什么是反射机制?

a、程序在运行时才能得知class的名称,得到所有属性和方法,并生成其对象实体、或对其属性设值、或调用其方法,

b、总结:反射就是加载一个运行时才知道的类以及它完整的内部结构。 

二、为什么要用反射机制?

a、首先反射的目的就是为了扩展未知的应用

b、如当需要扩展功能时,我们只需写一个插件,程序运行时,通过反射技术动态的创建和编译形成新类;

三、我们学习过的知识中哪些用了反射机制?

工厂模式、Spring中IOC(或DI)、AOP都使用到了java反射机制

第十六章——Java垃圾回收机制(GC)

1. 既有 GC 机制,为什么还会有内存泄露的情况

在实际开发中有些对象不能被 GC 回收, 如Session对象,如果不及时关闭(close)或清空(flush)就可能导致内存泄露。

2. 对于 Java 的 GC 哪些内存需要回收

Java内存主要包括 5 大部分:程序计数器、虚拟机栈、本地方法栈、方法区、堆。

  • 程序计数器、虚拟机栈、本地方法栈

每个线程私有的内存空间,随线程生亡,无需考虑内存回收的问题。

  • 方法区和堆

只有在程序运行期才知道会创建那些对象,这部分内存的分配和回收都是动态的,GC 主要关注的是这部分内存

3. Java 的 GC 什么时候回收垃圾

需要同时满足三个条件

a、该类所有的实例都已经被回收,也就是Java堆中不存在该类的任何实例。

b、加载该类的ClassLoader已经被回收,即类加载器,负责将class加载到JVM

c、在任何地方都不存在该类对象的引用

4、什么时候启动GC?

a、程序调用System.gc时可以触发;

b、系统自身来决定GC触发的时机。

注意:

内存溢出么原因有哪些?解决方法

a、内存中加载的数据量过于庞大,如一次从数据库取出过多数据;

b、集合类中有对对象的引用,使用完后未清空(通过将对象设置为null等),使得 JVM 不能回收

c、代码中存在死循环或循环产生过多重复的对象实体;

d、启动参数内存值设定的过小;

解决方案:

第一步,修改 JVM 启动参数,直接增加内存。

第二步,检查错误日志

第三步,找出可能发生内存溢出的位置。

第十七章——Java数据库编程

1、JDBC驱动分类

与平台无关的用于执行SQL语句的标准Java API

  • JDBC本地驱动:

使用各个数据库生产商提供的JDBC驱动程序,只能     应用在特定的数据库上,会丧失程序的可移植性

  • JDBC网络驱动:

将JDBC转换为与DBMS无关的网络协议,之后又被某个服务器转换为一种DBMS协议

能将JDBC的纯Java客户机连接到多种不同的数据库上,是最为灵活的JDBC驱动程序。

  • 本地协议纯JDBC驱动:

将JDBC调用直接转换为DBMS所使用的网络协议,从客户机器上直接调用DBMS服务器,用于Intranet访问

2、JDBC操作步骤

查询:加载驱动——建立连接——创建语句——执行语句——处理ResultSet

Class.forName("com.mysql.jdbc.Driver") ;
DriverManager.getConnection(url , username , password ) 
prepareStatement
ps.executeQuery
rs.next

 

第十九章——Java网络编程

  • URL与URLConnection

URL是统一资源定位符,可以直接使用此类找到互联网上的资源

URLConnection是封装访问远程网络资源一般方法的类,通过它可以建立与远程服务器的连接,检查远程资源的一些属性

  • URLEncoder与URLDecoder

URLEncoder可以为传递内容进行编码

URLDecoder可以为传递内容进行解码

  • TCP程序设计

每一个客户端都使用一个Socket对象表示

服务器端使用ServerSocket等待客户端的连接,

  • UDP程序设计

TCP的所有操作都必须建立可靠的连接,会浪费大量的系统性能。

UDP(不可靠的连接)协议,被广泛用于聊天工具。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值