java基础概念梳理(二)

【读Java:A Beginner’s Guide后对基础概念的整理,已熟练掌握的不展开,仅提一下,都写在纸质笔记本上。基础不牢,地动山摇!】

ch7 继承

Java不支持多重继承(一个子类多个超类)
子类可用访问器来访问类的私有成员

  1. 调用超类构造函数
    super(w,h);

  2. 子类成员名隐藏了超类的同名成员
    super.member

按继承顺序来调用构造函数
<超类引用可以引用子类对象>
X x;//超类
Y y;//子类
x=y;
但是赋之后,x的类型还是X

超类构造函数:A(A ob)
子类:B(int a)
B(B ob){super(ob);}
在主函数中 B ob1=new B(int a);
B ob2=new B(ob1);

方法重写
子类方法与超类方法具有相同返回类型和签名时会重写
不一致就是方法重载
方法重写→动态方法分配→多态性

  • 创建超类和子类对象
  • 再建一个超类对象
  • 将子类赋给超类再调用方法

占位符
如果要创建多个对象
A ob[]=new A[5];
ob[0]=new B(10);//超类引用可以引用子类对象

抽象类abstract
只适用于实例方法,子类必须要重写

final
防止被重写或者类的继承



ch8 包和接口

命名类:namespace中分配一个名字
包.类名 避免冲突
protected 对所有子类可见,对不同包的非子类不可见。
导入:

import package.calssname;
import package.*;

标准类类库:API 存在包里顶部是java
下面是子包
java.lang(自动导入)包含System

实现接口用implements
接口引用

  1. 创建类的对象ob1
  2. 接口名 ob;
  3. ob=ob1;

定义共享常量,定义一个无方法接口。
接口可拓展

默认方法/拓展方法
加上default修饰符

如果B接口继承了A,用A中的reset方法:
A.super.reset();

static接口方法不可被类或子接口继承,但不需要实例对象

私有接口方法:允许多个默认方法使用多个代码段



ch9 异常处理

异常类throwable 有两个子类:Error、Exception

  • Exception:程序活动导致:除0、数组越界、文件错误
  • Exception有子类:RuntimeExecption
  • Error发生在虚拟机中

异常产生条件

  • 内部错误,虚拟机异常
  • 标准异常:除0等
  • 手动产生的异常:throw产生

常见异常
ArrayIndexOutOfBoundsException
ArithmeticeException 处理除0异常
IOException
FileNotFoundException
NumberFormatException
InterruptedException(多线程Thread)

try catch finally
如果想捕捉超类和子类异常,把子类异常放前面,把超类(Throwable)放在后面
手动抛出异常:创建异常后抛出,throw new name();
重新抛出异常:允许多重程序访问异常 throw exc;
finally的作用:异常使方法提前返回,但是已经打开文件或者网络连接,finally可以退出代码块

Throwable 定义的方法:

名称 描述
void printStackTrace 显示错误信息以及方法调用
String toString 返回字符串

throws:无法处理/自己不做处理,从main()抛出
RuntimeException的子类都不必指定
如果throws了必须处理该异常

多重捕获
在异常名称们之间加|

可以创建异常子类
如果方法中调用了异常,方法名加throws,方法内部用throw并创建对象。



ch10 I/O

流是产生信息的抽象

  • 字节流
    InputStream、OutputStream
  • 字符流
  • Reader、Writer
  • 预定义流:In out err

字节流
int read(byte data[],int start,int end)throws IOException
读取字节数组
控制台输入输出 read write/println/printf/format

字节流读写文件

FileInputStream fin=new FileInputStream(args[0]);
i=fin.read();
fin.close();

打开文件的时候注意FileNotFoundException
读和关闭注意IOException
fin可初始化为null 最后如果fin不为null则为成功打开

FileOutputStream fout=new FileOutputStream(args[0]);
i=fout.write();
FileOotputStream(String filename,boolean append)
append==true 则添加到文件的结尾

自动资源管理try with resources

try(FileOutputStream fout=new FileOutputStream(args[0]){
...
}catch{...}

读写二进制数据

try(DataOutputStream dataout=new DataOutputStream(FileOutputStream("..")){
dataout.writeInt();
dataout.writeBoolean();
}catch{...}

随机访问
RandomAccessFile(String name,String type)
“r” “w” “rw”
寻找指针
seek(long pos)
注意double为8字节

java字符流

BufferedReader br=new BufferedReader(InputStreamReader(System.in)

注意读的都是Int类型
读取字符串

br.readline();

控制台输出

PrintWriter pw=new PrintWriter(System.out,true);//true为刷新
pw.println();

字符流文件

FileWriter fw=new FileWriter(System.out,true);
BufferedReader br=new BufferedReader(FileReader("...")

类型封装器
n=Integer.parseInt(str);
NumberFormatException



ch11 多线程

多任务

  1. 基于进程
  2. 基于线程

创建线程

  • 实例化Thread对象
  • 实现Runnable接口

注意InterruptedException

实现Runnable流程:

  • 创建MyThread implements Runnable的时候,引用线程。

  • Thread thrd;

  • 构造函数创建Thread对象
    MyThread(String name){
    Thrd=new Thread(this,name);}

  • 静态工厂方法

public static MyThread createAndStart(String name){ 
 MyThread myThrd=new MyThread(name);
 myThrd.thrd.start();
 return myThrd;}
  • public void run();
  • 主函数中再建一次对象
    MyThread mt=MyThread.createAndStart("…");

可以直接用thrd.getName();

拓展Thread

  • 用super(name)
  • 直接getname()
  • 主函数中建了MyThtread对象mt后,mt.start();

确定线程何时结束的方法

  • boolean isAive()
    比如mt.thrd.isAlive()
  • mt.thrd.join();

设置优先级

mt.thrd.setPriority(Thread.NORM_PRIORITY);

NORM_PRIORITY
MIN_PRIORITY
MAX_PRIORITY

同步:只能一个线程共享资源/等另一个线程所以要挂起

  1. 在方法前加synchronized
    调用名称 Thread.currentThread().getName()

  2. syn代码块
    synchronized(ob){}

线程通信
wait() notify()
wait(long ms,int ns)

当另一个不运行,wait()



ch12枚举、自动装箱、静态导入和注解

枚举enum A{a,b,c,d}
自我类型化,自我:枚举常量的枚举

A tp;
tp=A.a;

枚举是类类型
获得A常量数组

A aa[]=a.values();
for(A i:aa)//foreach
tp=A.valueof("a");

可有构造函数
自动继承java.lang.Enum;

获取位置

tp.ordinal();

常量间比较

tp.compareTo(tp1);

自动装箱/拆箱

Integer iob=new Integer.valueOf(100);
int i=iob.intValue();
////
Integer iob=100;
int i=iob;

静态导入
导入静态成员
import static java.lang.Math.*;
然后可以直接引用静态成员名



ch13 泛型

Gen<T>{
Gen(T ob){
...}}

Gen<String> ob=new Gen<String>("SCDCS");
ob.getClass().getName();

约束类型

class Gen<T extends Number>

通配符实参
Gen<?> ob;

约束通配符
Gen<? extends A>

泛型方法

static <T extends Comparable<T>,v> boolean aequal(T[] X,V[] Y){..}

菱形运算符
擦除



ch14 lambda

函数式接口

  1. interface MyValue{double getValue();}
  2. MyValue myval=()->98.6;
  3. myvalue.getValue();

测试是否是子串

a.indexOf(b)!=-1;

块lambda必须用return
方法引用
类::方法名→接口名 对象名

构造函数引用

猜你喜欢

转载自blog.csdn.net/qq_34287121/article/details/88601924