JavaSE基础教程 (9)

轻烟薄雾 分享 2020-04-14 下载文档

public static void main(String[] args) { Season1 spring = Season1.SPRING; System.out.println(spring); spring.show(); System.out.println(spring.getSeasonName()); System.out.println(); //1.values() Season1[] seasons = Season1.values(); for(int i = 0;i < seasons.length;i++){ System.out.println(seasons[i]); } //2.valueOf(String name):要求传入的形参name是枚举类对象的名字。 //否则,报java.lang.IllegalArgumentException异常 String str = \ Season1 sea = Season1.valueOf(str); System.out.println(sea); System.out.println(); Thread.State[] states = Thread.State.values(); for(int i = 0;i < states.length;i++){ System.out.println(states[i]); } sea.show(); } }

interface Info{ void show(); }

//枚举类

enum Season1 implements Info{

SPRING(\春暖花开\ public void show(){ System.out.println(\春天在哪里?\ } },

SUMMER(\夏日炎炎\ public void show(){ System.out.println(\生如夏花\ } },

AUTUMN(\秋高气爽\ public void show(){ System.out.println(\秋天是用来分手的季节\ } },

WINTER(\白雪皑皑\ public void show(){

System.out.println(\冬天里的一把火\ } }; private final String seasonName; private final String seasonDesc; private Season1(String seasonName,String seasonDesc){ this.seasonName = seasonName; this.seasonDesc = seasonDesc; } public String getSeasonName() { return seasonName; } public String getSeasonDesc() { return seasonDesc; } @Override public String toString() { return \ + seasonDesc + \ }

// public void show(){ // System.out.println(\这是一个季节\// } }

二、注解Annotation

1.JDK提供的常用的三个注解

@Override: 限定重写父类方法, 该注释只能用于方法 @Deprecated: 用于表示某个程序元素(类, 方法等)已过时 @SuppressWarnings: 抑制编译器警告

2.如何自定义注解

以SuppressWarnings为例进行创建即可

3.元注解:可以对已有的注解进行解释说明。 Retention: SOURCE CLASS RUNTIME Target:

Documented:javadoc Inherited 十、IO流

1.java.io包下

File类:java程序中的此类的一个对象,就对应着硬盘中的一个文件或网络中的一个资源。 File file1 = new File(\File file2 = new File(\

>1.File既可以表示一个文件(.doc .xls .mp3 .avi .jpg .dat),也可以表示一个文件目录!

>2.File类的对象是与平台无关的。

>3.File类针对于文件或文件目录,只能进行新建、删除、重命名、上层目录等等的操作。如果涉及到访问文件的内容,File

是无能为力的,只能使用IO流下提供的相应的输入输出流来实现。 >4.常把File类的对象作为形参传递给相应的输入输出流的构造器中!

2.IO 流的结构 3.IO流的划分

1) 按照流的流向的不同:输入流 输出流 (站位于程序的角度)

2) 按照流中的数据单位的不同:字节流 字符流 (纯文本文件使用字符流 ,除此之外使用字节流) 3) 按照流的角色的不同:节点流 处理流 (流直接作用于文件上是节点流(4个),除此之外都是处理流)

4.重点掌握 * 抽象基类 节点流(文件流) 缓冲流(处理流的一种,可以提升文件操作的效率)

* InputStream FileInputStream (int read(byte[] b)) BufferedInputStream (int read(byte[] b)) * OutputStream FileOutputStream (void write(b,0,len)) BufferedOutputStream (flush()) (void write(b,0,len))

* Reader FileReader (int read(char[] c)) BufferedReader (readLine()) (int read(char[] c))或String readLine()

* Writer FileWriter (void write(c,0,len)) BufferedWriter (flush()) (void write(c,0,len)或void write(String str))

注: 1.从硬盘中读入一个文件,要求此文件一定得存在。若不存在,报FileNotFoundException的异常

2.从程序中输出一个文件到硬盘,此文件可以不存在。若不存在,就创建一个实现输出。若存在,则将已存在的文件覆盖

3.真正开发时,就使用缓冲流来代替节点流

4.主要最后要关闭相应的流。先关闭输出流,再关闭输入流。将此操作放入finally 5.其它的流

1.转换流:实现字节流与字符流之间的转换

InputStreamReader:输入时,实现字节流到字符流的转换,提高操作的效率(前提是,数据是文本文件) ===>解码:字节数组--->字符串

OutputStreamWriter:输出时,实现字符流到字节流的转换。 ===>编码: 字符串---->字节数组

例子:从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续进行输入操作,直至当输入“e”或者“exit”时,退出程序。

2.标准的输入输出流

System.in: The \从键盘输入数据

System.out:The \:从显示器输出数据

3.打印流 (都是输出流) PrintStream(处理字节) PrintWriter(处理字符) 可以使用System.setOut(PrintStream p)重新设置一下输出的位置。 PrintStream p = new PrintStream(new FileOutputStream(\

4.数据流(处理基本数据类型、String类、字节数组) DataInputStream DataOutputStream

5.对象流(用来处理对象的)

>对象的序列化机制:允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,

或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象

ObjectInputStream(Object readObject();) ObjectOutputStream (void writeObject(Object obj))

如何创建流的对象:ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(\

ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File(\ 实现序列化机制的对象对应的类的要求:①要求类要实现Serializable接口②同样要求类的所有属性也必须实现Serializable接口

③ 要求给类提供一个序列版本号:private static final long serialVersionUID;

④属性声明为static 或transient的,不可以实现序列化

6.随机存取文件流:RandomAccessFile

6.1既可以充当一个输入流,又可以充当一个输出流:public RandomAccessFile(File file, String mode) 6.2支持从文件的开头读取、写入。若输出的文件不存在,直接创建。若存在,则是对原有文件内容的覆盖。

6.3 支持任意位置的“插入”。

十一、多线程

1.理解程序、进程、线程的概念 程序可以理解为静态的代码 进程可以理解为执行中的程序。

线程可以理解为进程的进一步细分,程序的一条执行路径

2.如何创建java程序的线程(重点) 方式一:继承于Thread类 class PrintNum extends Thread{ public void run(){ //子线程执行的代码 for(int i = 1;i <= 100;i++){ if(i % 2 == 0){ System.out.println(Thread.currentThread().getName() + \ } } } public PrintNum(String name){ super(name); } }

public class TestThread { public static void main(String[] args) { PrintNum p1 = new PrintNum(\线程1\

PrintNum p2 = new PrintNum(\线程2\ p1.setPriority(Thread.MAX_PRIORITY);//10 p2.setPriority(Thread.MIN_PRIORITY);//1 p1.start(); p2.start(); } }

方式二:实现Runnable接口

class SubThread implements Runnable{ public void run(){

//子线程执行的代码 for(int i = 1;i <= 100;i++){ if(i % 2 == 0){ System.out.println(Thread.currentThread().getName() + \ } } } }

public class TestThread{ public static void main(String[] args){ SubThread s = new SubThread(); Thread t1 = new Thread(s); Thread t2 = new Thread(s); t1.setName(\线程1\ t2.setName(\线程2\ t1.start(); t2.start(); } }

两种方式的对比:联系:class Thread implements Runnable 比较哪个好?实现的方式较好。①解决了单继承的局限性。②如果多个线程有共享数据的话,建议使用实现方式,同时,共享

数据所在的类可以作为Runnable接口的实现类。 线程里的常用方法:start() run() currentThread() getName() setName(String name) yield() join() sleep() isAlive()

getPriority() setPriority(int i); wait() notify() notifyAll()

3.线程的生命周期

4.线程的同步机制(重点、难点)

前提:如果我们创建的多个线程,存在着共享数据,那么就有可能出现线程的安全问题:当其中一个线程操作共享数据时,还未操作完成,

另外的线程就参与进来,导致对共享数据的操作出现问题。 解决方式:要求一个线程操作共享数据时,只有当其完成操作完成共享数据,其它线程才有机会执行共享数据。


JavaSE基础教程 (9).doc 将本文的Word文档下载到电脑

下一篇:数控车工初级试卷01

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7 元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xxxxxx QQ:xxxxxx