Java 基础知识大全(二)

 

File

Java.io.File代表了计算机中的文件夹和文件。

boolean

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

 boolean

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

boolean

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

 String

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

 String

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

 File

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

String

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

boolean

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

boolean

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

 boolean

isHidden()
          测试此抽象路径名指定的文件是否是一个隐藏文件。

 long

lastModified()
          返回此抽象路径名表示的文件最后一次被修改的时间。

 long

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

String[]

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

 File[]

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

 boolean

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

 boolean

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

 boolean

renameTo(File dest)
          重新命名此抽象路径名表示的文件。

 

输入流和输出流

Input/Output(输入和输出)

Java中对于操控输入和输出的工具类统称为IO流系统

放在java.io包下

Java中的输入和输出是相对于当前运行的程序。

Io流分为:输入流和输出流

输入流的作用:将外部的数据读到程序中。

输出流的作用:将程序中的数据写到外部。

 

System.in是一个输入流,标准输入流,代表了控制台的输入。

System.out是一个输出流,标准输出流,代表向控制台的输出。

字节流和字符流

IO可以分为字节流和字符流。

字节流读和写的是字节,字符流读和写的是字符。

字节输入流、字节输出流、字符输入流、字符输出流

PrintWriter是字符输出流

FileInputStream是字节输入流

FileOutputStream是字节输出流

FileReader是字符输入流

FileWriter是字符输出流

 

过滤流和节点流

直接与节点相关联的流叫做节点流 节点指的就是要读的源数据或者写入的目标数据

不与节点相关联而是与其他流相关联的流叫过滤流

过滤流是用来包装节点流的

BufferedInputStream 字节输入过滤流。

BufferedOutputStream 字节输出过滤流。

BufferedReader 字符输入过滤流。

BufferedWriter 字符输出过滤流。

 

流的继承结构

Io流系统有四个顶层的超类,都是抽象类。

InputStream  是所有字节输入流的超类。

OutputSteam 是所有字节输出流的超类。

Reader 是所有字符输入流的超类。

Writer 是所有字符输出流的超类。

 

ByteArrayInputStream 字节数组输入流。

ByteArrayOutputStream 字节数组输出流。

 

InputStreamReader 是字节流通向字符流的桥梁。

OutputStreamWriter 是字符流通向字节流的桥梁。

 

什么时候用字节流:

什么时候用字符流:

如果需要在程序中看文件的内容,就用字符流。

如果只拷贝、上传、下载,不牵扯文件内容的就用字节流。

集合

ArrayList 集合的一种,表现为一个列表。长度可变的,添加元素和删除元素,集合会自动的伸缩,它始终维持一个列表。

 boolean

add(E e)
          将指定的元素添加到此列表的尾部。

 void

add(int index, E element)
          将指定的元素插入此列表中的指定位置。

 void

clear()
          移除此列表中的所有元素。

boolean

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

 E

get(int index)
          返回此列表中指定位置上的元素。

 int

indexOf(Object o)
          返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。

 boolean

isEmpty()
          如果此列表中没有元素,则返回 true

 int

lastIndexOf(Object o)
          返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。

 E

remove(int index)
          移除此列表中指定位置上的元素。

 E

set(int index, E element)
          用指定的元素替代此列表中指定位置上的元素。

 int

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

 

ArrayList和LinkedList的区别

ArrayList  是List接口的一种实现,它是使用数组来实现的。

LinkedList 是List接口的一种实现,它是使用链表来实现的。

ArrayList 遍历和查找元素比较快。LinkedList遍历和查找元素比较慢。

ArrayList 添加、删除元素比较慢。LinkedList添加、删除元素比较快。

 

List的排序

List是有序列表

使用Collections类的sort方法可以对List进行排序,前提是:List中的元素必须实现Comparable接口。

使用Arrays类的sort方法可以对数组进行排序,前提是数组中的元素必须实现Comparable接口。

 

Set

一个不能包含重复元素的集合。重复的元素是:set 不包含满足 e1.equals(e2) 的元素对 e1 e2,并且最多包含一个 null 元素。

Set接口不允许重复。

HashSet是无序的,迭代时,元素的顺序和加入的顺序无关。

TreeSet是有序的,它在加入元素的时候就会按照元素的自然顺序排序,或者根据比较器的结果进行排序。

如果构造TreeSet时没有传入比较器,那么它加入的元素必须要实现Comparable接口。

如果构造TreeSet时传入了比较器,那么它加入的元素就不必实现Comparable接口。

队列

队列是一种先进先出的数据结构。

单端队列:Queue接口。在尾部插入,在头部删除。

双端队列:Deque接口。可以在两端插入和删除。

优先级队列:PriorityQueue类。每次调用remove总是移出最小的元素。

LinkedList实现了Deque接口。Deque继承于Queue。

PriorityQueue实现了Queue。

栈是一种先进后出的数据结构。

Stack类是栈的一种实现。

Deque接口及其实现提供了关于栈更完整的操作,应该优先使用这个接口。

Deque<Integer> stack = new ArrayDeque<Integer>();

 

映射表

映射表是存放键值对,可以通过键来快速的查找对应的值。

Map接口有两个实现类:

HashMap 无序

TreeMap 有序,迭代的顺序按照comparable或者comparator的比较结果来排。

 

多线程

进程和线程

单用户单任务:在某一时间段,只能有一个用户执行一个任务。

多用户多任务:在某一时间段,多个用户可以共享计算机,每个用户可以执行多个任务。用户感觉不到其他用户存在,就好像他自己在独享计算机。

进程:一个正在执行的程序。                                                         

线程:一个进程可以同时运行多个线程,每个线程完成一项任务。

时间片:cup把时间分为一个个时间片,同一时间只有一个线程在占用cpu。由于时间片很短,就会感觉到多个线程在同时运行。

 

进程和线程的区别:

进程大线程小。进程创建和执行开销比较大。线程的创建和执行开销比较小。

进程和进程之间没有关系。同一进程的线程他们共享同样的内存空间和资源。

 

线程的创建

当执行main方法时,java虚拟机会创建一个线程名字为“main”。这个线程会执行main方法的代码。这个线程叫做主线程。当main方法的代码全部执行完毕,或者main方法抛出了一个异常,主线程就会终止。

// 创建一个线程对象

                            Thread t1 = new MyThread();

                            // 启动线程

                            t1.start();

                            //新的线程执行其run方法,主线程继续往下执行

线程一旦启动,就会执行其run方法,当run方法执行完毕,或者抛出了一个异常,线程就终止

 

创建线程的两种方式

一种继承Thread类,并实现run方法。

另外一种是实现Runnable接口。

实现接口比较好,因为java只能单继承,如果继承了Thread类,就不能继承其他的类。

 

 

线程的状态

 

 

线程并发问题

多个线程同时同一数据进行存取,就会导致数据丢失。

线程同步

使用线程同步,使得多个线程不能同时对同一数据进行存取。

方式一:

//同步代码块

//只有获得了d对象的锁,才能进入同步代码块

synchronized (d) {

//在同步代码块没有执行完毕之前

//线程一直持有这个锁

d.setI(d.getI() - 1);

//当同步代码块执行完毕

//线程释放这个锁

}

 

// 同步方法,锁的是当前对象 就是this

public synchronized void transfor(int form, int to, double amount) {

//同步方法,将整个方法体的代码都同步了

}

相当于

// 同步方法,锁的是当前对象 就是this

public void transfor(int form, int to, double amount) {

Synchronized(this){

}

}

 

run方法不能声明异常,只能捕获异常,如果run方法内部出现了没有处理的异常,run方法就会停止,线程就会终止。

 

网络编程

URL

统一资源定位符,它描述的是互联网上资源的位置,以及浏览器应该如何处理这个资源。

一个url包含两方面的内容:协议和资源名称。

http://www.baidu.com http是协议 www.baidu.com是资源名称

协议有很多种:

http:超文本传输协议,描述网页在互联网上应该如何传输。

ftp:文件传输协议

https:安全的超文本传输协议。

 

TCP协议是传输层的协议,它是面向连接的,可靠的,基于字节流的。

UDP协议是传输层的协议,它是无连接的,不可靠的,基于数据包的。

TCP传输速度慢,开销大,UDP传输速度快,开销小。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值