Java学习报告
由于之前有了C++的基础,所以学习Java十分的简单,语法和C++非常相似。并且有些地方做了简化,比C++更加简单。因此,与C++相似的语法就不会赘述,而是讲一讲个人了解的一些不同点。
Java的编译
先编译后解释的,先用javac将.java 源文件编译成在字节码,即为.class文件,再将该文件放在解释器执行。
String
String对象表示的字符串是不能修改的。如果要对字符串修改,应该使用StringBuffer和StringBuilder类
装箱和拆箱
Java语言中,所有对象型(Java数据类型仅有两类:基本类型和对象类型)的数据类型的基类是java.lang.Object。Java提供了一种叫做包装类(wrapper)的东西,使基本类型,有着相应的对象类型Integer, Long, Character等。这样就可以把基本类型转为对象(装箱),也可以从对象转为基本类型(拆箱)。同样有该语法的语言还有Python
注意:
public class Test {
public static void main(string[]args) {
Integer i1 = 256;
Integer i2 = 256;
if (i1 == i2)
System.out.println("equal");
else
System.out.println("not equal");
结果是“not equal”, 原因在于两个对象在内存中开辟的是两个地址,因此不相等。
打印数组
如何实现打印数组时不要循环和判断?
- 打印一维数组时,用toString(array)方法
- 打印二维数组时,用deepToString(array)方法
继承
用关键字extend表示。Java不同于C++,只有单继承(唯一父类)
多态
- 上溯造型:所有的子类都可以作为父类的类型(同一种类型)来对待
Employee[] staff = new Employee[3];
staff[0] = new Manager();
staff[1] = new Secretary();
staff[2] = new Employee();
- 重载
重载与重写
- 方法重载:是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同
- 方法重写:子类不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
多个相同类型的参数,用“…”代替
public void pri(String...strings) {
for(String str: strings)
System.out.print(str);
}
感觉这个就是变长数组。。。
static关键字
- 子类不能重写父类的静态方法。想隐藏父类的静态方法,在子类中声明和父类相同的方法就行。
- static可以用来修饰程序块(这个好像没什么用)
final关键字
1. 在类的声明中使用final
不能派生子类,也不能被继承(如java.lang.String),类中所有方法不能被重写
2. 在方法声明中使用final
不能被重写
3. 在变量声明中使用final
变量成为常量,不可修改
输入输出
在Java中,I/O方式是流的方式。有以下几种常见的流
- 字节流:以InputStream和OutputStream为基础类。以字节为单位进行读写。
- 字符流:以Reader和Writer为基础类。以16位字符为单位读写。
- 文件流:传文件。属于节点流,对文件进行读写,传输
- 序列化:将对象序列化为二进制。
文件流的例子:
InputStream f = new FileInputStream("path"); //从文件中读取数据 //InputStream方法 public void close() throw IOException{} //关闭此文件输入流 protected void finalize() throw IOException{} //清楚与该文件的链接,不再引用文件时便调用close方法 public int read(int r)throws IOException{} //从InputStream对象读取指定字节的数据 public int available() throw IOException{} //返回下一次对此输入流调用的方法可以不阻塞地从输入流中读取的字节数。
OutputStream f = new FileOutputStream("path"); //打开path指定的文件并往其中写数据(假如path不存在,则创建文件) //OutputStream方法 close: 略 public void write(int w)throws IOException{} //把指定的字节写到输出流中
序列化的例子
利用文件流创建对象流。例1:将对象写入文件
Date d = new Date(); FileOutputStream f = new FileOutputStream("date.ser"); ObjectOutputStream s = new ObjectOutputStream(f); s.writeObject(d); s.close();
例2:从文件读出对象
FileInputStream f = new FileInputStream("date.ser"); ObjectInputStream s = new ObjectInputStream(f); d = (Date)s.readObject();
注意,Input和Output都是相对于流而言的。从流中抽取出来,为Output,用write方法;输入到流中,为Input,用read方法