1.内部类
Java支持在一个类中定义另一个类,这样的类称作内部类,包含内部类的类称为内部类的外嵌类。
2.匿名类(被认为是一个子类去掉声明后的类体)
Bank是类,下列代码用Bank
的一个子类(匿名类)创建对象。
new Bank(){
匿名的类体
}
board.showMess(new OutputAlphabet()
//向参数传递OutputAlphabet的匿名子类对象
{ public void output()
{ for(char c='α';c<='ω';c++) //输出希腊字母
System.out.printf("%3c",c);
}
}
);
Example7_2.java的以上即为使用匿名类的部分。
machine.turnOn( new SpeakHello(){
public void speak() {
System.out.println("hello,you are welcome!");
}
}
);
machine.turnOn( new SpeakHello(){
public void speak() {
System.out.println("你好,欢迎光临!");
}
}
);
3.异常类
Java允许定义方法时声明该方法调用过程中可能出现的异常,即允许方法调用过程中抛出异常对象,终止当前方法的继续执行。
另外,异常对象可以调用以下方法得到或输出有关异常的信息:
public String getMessage();
public void printStackTrace();
public String toString();
将可能出现的一场操作放在try部分,一旦try部分抛出异常对象,那么try部分立刻结束执行,转向执行相应的catch部分。
try{
可能发生异常的语句
}
catch(ExceptionSubClass1 e) {
…
}
catch(ExceptionSubClass2 e) {
…
}
一个方法在声明时可以使用throws关键词声明要产生的若干个异常,并在该方法体中具体给出产生异常的操作。如下:
public void income(int in,int out) throws BankException {
if(in<=0||out>=0||in+out<=0) {
throw new BankException(in,out); //方法抛出异常,导致方法结束
}
int netIncome=in+out;
System.out.printf("本次计算出的纯收入是:%d元\n",netIncome);
money=money+netIncome;
}
4.断言
在代码调试阶段中,断言语句一般用于程序不准备通过捕获异常来处理的错误。
assert booleanExpression;
assert booleanExpression:messageException;
与上一种类似,,另外的输出messageException
表达式的值。
java -ea mainClass
启用断言语句1. File类
public String getName()
获取文件的名字。
public boolean canRead()
判断文件是否是可读的。
public boolean canWrite()
判断文件是否可被写入。
public boolean exits()
判断文件是否存在。
public long length()
获取文件的长度(单位是字节)。
public String getAbsolutePath()
获取文件的绝对路径。
public String getParent()
获取文件的父目录。
public boolean isFile()
判断文件是否是一个普通文件,而不是目录。
public boolean isDirectroy()
判断文件是否是一个目录。
public boolean isHidden()
判断文件是否是隐藏文件。
public long lastModified()
获取文件最后修改的时间。
创建目录 public boolean mkdir()
public String[] list()
用字符串形式返回目录下的全部文件。
public File [] listFiles()
用File对象形式返回目录下的全部文件。
public String[] list(FilenameFilter obj)
用字符串形式返回目录下的指定类型的所有文件。
public File [] listFiles(FilenameFilter obj)
用File对象形式返回目录下的指定类型所有文件。
上述两方法的参数FilenameFilter
是一个接口,该接口有一个方法:
public boolean accept(File dir,String name);
File file=new File("c:\\myletter","letter.txt");
如果c:\myletter目录中没有名字为letter.txt文件,
文件对象file调用方法
public boolean createNewFile();
文件对象调用方法 public boolean delete()
可以删除当前文件,
例如:file.delete();
用Runtime 类声明一个对象( Runtime类在java.lang包)
Runtime ec;
然后使用该类的getRuntime()静态方法创建这个对象:
ec=Runtime.getRuntime();
ec可以调用exec(String command)
方法打开本地机的可执行文件或执行一个操作。
2.文件字节输入流
使用输入流通常包括4个基本步骤:
(1)设定输入流的源
(2)创建指向源的输入流
(3)让输入流读取源中的数据
(4)关闭输入流。
3.文件字节输出流
(1)给出输出流的目的地
(2)创建指向目的地的输出流
(3)让输出流把数据写入到目的地
(4)关闭输出流。
4.文件字符输入、输出流
(1)Reader类提供的read方法以字符为单位顺序地读取源中的数据。
int read():
int read(char b[]):
int read(char b[], int off, int len):
void close():
long skip(long numBytes):
(2) Writer流以字符为单位顺序地写文件,每次调用write方法就顺序地向目的地写入内容。 Writer类有如下常用的方法。
void write(int n):
向输出流写入一个字符。
void write(byte b[]):
向输出流写入一个字符数组。
void write(byte b[],int off,int length):
从给定字符数组中起始于偏移量off处取len个字符写到输出流。
void close():
关闭输出流。
5.缓冲流
(1)BufferedReader
和BufferedWriter
类创建的对象称作缓冲输入、输出流。二者的源和目的地必须是字符输入流和字符输出流。
构造方法:
BufferedReader(Reader in);
BufferedWriter (Writer out);
(2)BufferedReader
和BufferedWriter
类读写文件的方法:
readLine()
读取文本行
write(String s,int off,int len)
把字符串s写到文件中
newLine();
向文件写入一个回行符
6.随机流
使用RandomAccessFile
类来创建一个随机访问文件流。RandomAccessFile
类创建的流的指向既可以作为源也可以作为目的地。
构造方法
RandomAccessFile(String name,String mode) ;
RandomAccessFile(File file,String mode) ;
相关方法:
seek(long a)
定位RandomAccessFile
流的读写位置
getFilePointer()
获取流的当前读写位置
7.数组流
(1)字节数组流
字节数组输入流ByteArrayInputStream
和字节数组输出流ByteArrayOutputStream
分别使用字节数组作为流的源和目标。
ByteArrayInputStream构造方法及常用方法
ByteArrayInputStream(byte[] buf);
ByteArrayInputStream(byte[] buf,int offset,int length);
public int read();
顺序地从源中读出一个字节
public int read(byte[] b,int off,int len);
顺序地从源中读出参数len指定的字节数
ByteArrayOutputStream流构造方法及常用方法
ByteArrayOutputStream();
ByteArrayOutputStream(int size);
public void write(int b);
顺序地向缓冲区写入一个字节
public void write(byte[] b,int off,int len);
将参数b中指定的len个字节顺序地写入缓冲区
public byte[] toByteArray();
返回输出流写入到缓冲区的全部字节
(2)字符数组
CharArrayReader
和CharArrayWriter
类是字符数组流,使用字符数组作为流的源和目标。
8.数据流
DataInputStream
和DataOutputStream
类创建的对象称为数据输入流和数据输出流。
构造方法:
DataInputStream(InputStream in)
创建的数据输入流指向一个由参数in指定的底层输入流
DataOutputStream(OutnputStream out)
创建的数据输出流指向一个由参数out指定的底层输出流
9.对象流
ObjectInputStream
和ObjectOutputStream
类创建的对象称为对象输入流和对象输出流。
它的构造方法是:
ObjectInputStream(InputStream in)
ObjectOutputStream(OutputStream out)
相关方法:
writeObject(Object obj)
将一个对象obj写入到一个文件
readObject()
读取一个对象到程序中
所谓序列化:一个类如果实现了Serializable
接口,那么这个类创建的对象就是所谓序列化的对象。
10.使用Scanner解析文件
(1)使用默认分隔标记解析文件
创建Scanner
对象,并指向要解析的文件,例如:
File file = new File("hello.java");
Scanner sc = new Scanner(file);
sc
将空白作为分隔标记
(2)使用正则表达式作为分隔标记解析文件 :
创建Scanner
对象,指向要解析的文件,并使用useDelimiter
方法指定正则表达式作为分隔标记。
11.文件对话框
构造方法JFileChooser()
创建初始不可见的有模式的文件对话框。然后文件对话框调用下述2个方法:
showSaveDialog(Component a);
showOpenDialog(Component a);
都可以使得对话框可见,只是呈现的外观有所不同,showSaveDialog
方法提供保存文件的界面,showOpenDialog
方法提供打开文件的界面。
上述两个方法中的参数a指定对话框可见时的位置,当a是null时,文件对话框出现在屏幕的中央;如果组件a不空,文件对话框在组件a的正前面居中显示。
11.带进度条的输入流
如果读取文件时希望看见文件的读取进度可以使用javax.swing
包提供的输入流类:
ProgressMonitorInputStream
它的构造方法是:
ProgressMonitorInputStream(Conmponent c,String s,InputStream);
12.文件锁
FileLock
、FileChannel
类处理Java提供的文件锁功能。它们分别在java.nio
和java.nio.channels
包中。
输入、输出流读写文件时可以使用文件锁。
RondomAccessFile创建的流在读写文件时使用文件锁的步骤如下:
(1)先使用RondomAccessFile
流建立指向文件的流对象,该对象的读写属性必须是rw,例如:
RandomAccessFile input=new
RandomAccessFile("Example.java","rw");
(2)input流调用方法getChannel()
获得一个连接到地层文件的FileChannel
对象(信道),例如
FileChannel channel=input.getChannel();
(3)信道调用tryLock()
或lock()
方法获得一个FileLock
(文件锁)对象,这一过程也称作对文件加锁.
例如:FileLock lock=channel.tryLock();
board.showMess(new OutputAlphabet()
//向参数传递OutputAlphabet的匿名子类对象
{ public void output()
{ for(char c='α';c<='ω';c++) //输出希腊字母
System.out.printf("%3c",c);
}
}
);
中,对于匿名类的使用格式存有疑惑
run->configrations->VM options:-ea
之后成功调试并启用assert语句
interface Some{
void dosome ();
}
class SomeImpl implements Some {
public void dosome(){
System.out.println("做一些事");
}
}
public class Main {
public static void main (String [] args) {
Some s= new SomeImpl();
s.dosome ();
}
}
以下描述正确的是
A
.
编译失败
B . 显示“做一些事”
C
.
发生ClassCastException
D
.
执行时不显示任何信息
原因和分析:对接口的理解不很到位。在此题中简单的将接口Some
作为父类,并最后调用在子类中重写的方法即可。
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
基于评分标准,我给本博客打分:XX分。得分情况如下:xxx
xxx
xxx
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 6/6 | 1/1 | 20/20 | |
第二周 | 245/251 | 1/2 | 18/38 | |
第三周 | 633/884 | 1/3 | 22/60 | |
第四周 | 305/1189 | 1/4 | 30/90 | |
第五周 | 410/1599 | 3/7 | 30/120 | |
第六周 | 1135/2734 | 3/10 | 30/150 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
原文:https://www.cnblogs.com/thz666/p/10665240.html