安卓 java 基础知识_Android学习笔记(四) JAVA基础知识回顾

一、接口

1)接口中定义的方法都是public权限,并且默认为public,而不是default。

2)接口的实现(implements)是特殊的继承,类似于父类子类的关系,可以向上转型(非常重要)。

3)一个类可以实现多个接口;一个接口可以继承多个接口。

二、静态变量/方法

1)如果某方法(或变量)声明为static,则可以直接使用“类名.方法名(或变量名)”调用。

2)静态方法只能使用静态变量。

三、静态工厂模式

核心思想:把生成对象的代码(使用new来调用构造函数的方法)封装在工厂类中,降低代码重复率。

例如:HPPrinter类和CanonPrinter类继承自Printer类,两者都包含print()方法但实现方法不同。如果现在要分开实现print()方法,则要分开生成对象,然后调用该方法,并且如果新增一台其他类型的Printer的话还需要重复这一步骤。静态工厂模式就是使用一个方法(写到一个PrinterFactory类里),传入类型为Printer的参数,然后执行print()方法。利用向上转型,只要是Printer的子类都适用。

四、包

在命令行环境下编译java文件,如果声明了包名(package),命令需要修改为:

javac -d . Test.java  ("."是指新生成的文件夹放于当前目录,“-d”是指directory)

并且执行时需要加上包名,如

java pack.Test

五、权限

public > protected > default > private

1)public可以包外访问,而default只能包内访问。

2)private不能类外访问。

3)protected拥有default所拥有的权限(但不能用于修饰类),而且可以跨包继承。子类和父类不在一个包中,但是子类可以使用父类中被修饰为protected的成员变量和方法。

4)public类在一个文件中最多只能有一个,此时必须和java文件同名。没有public类则无此要求。

5)如果在权限不足的情况下继承,继承本身不会出错(编译不会报错),但是成员变量和方法不允许访问,访问时会报错。

六、异常

f1e338824e91c405017253b633db3d4d.png

1)throw:抛出异常

2)throws:声明有可能产生异常,一旦声明了就不需要在该函数内处理,而是可以在调用该函数时使用try...catch来处理。

七、内部类和匿名内部类

1)设B是A的内部类,则生成B的对象前需要先生成A的对象:A.B b = new A().new B();

2)内部类可以使用外部类的成员变量,每一个内部类都有与其相对应的外部类。内部类不能使用外部方法的局部变量,除非声明为final。

3)匿名内部类:

b.fun(newA(){public voiddoSomething(){

System.out.println("匿名内部类");

}//A是接口,这里直接生成一个实现了该接口的对象。

})

八、I/O

8f5059dc2682b90f4e6d133d9a9d0a07.png

注:输入和输出是相对程序而言的

1)字节流

FileInputStream继承自InputStream(抽象);FileOutputStream继承自OutputStream(抽象)。

InputStream: int read(byte[] b, int off, int len)

OutputStream: void write(byte[] b, int off, int len)

FileInputSream fis = null;try{

fis= new FileInputStream(""e:/src/from.txt);byte [] buffer = new byte[100];

fis.read(buffer,0,buffer.length);

}

声明输入流引用。

生成代表输入流的对象。

生成一个字节类数组。

调用输入流对象的read方法,读取数据。

注:buffer得到的都是ASCII值,若要打印出字符,需要

String s = newString(buffer);

s= s.trim();//调用String对象的trim()方法,将会去掉这个字符串的首位空格和空字符

2)大文件的读写方法

while(true){int temp = fis.read(buffer,0,buffer.length);if( temp = -1){//返回值表示读取的数量,为-1表示读取结束;

break;

}//每次调用read()(或者类似的readLine())读指针都会向后移

}

注:finally里要关闭fis和fos,而且这个语句也是要被包裹在try...catch里的。

3)字符流

FileReader继承自Reader(抽象),FileWriter继承自Writer(抽象)。

区别于字节流,buffer是char类型的数组。

4)节点流和处理流

BufferedReader——字符输入处理流

BufferedReader的初始化需要以FileReader(或其他Reader)为参数,即可以在普通的节点流的基础上添加新的功能。这被称为“装饰者模式”。

九、线程

1)创建线程的方法

方法一:

定义一个线程类,它继承Thread,并重写其中的run()方法,方法run()称为线程体;由于JAVA只支持单继承,用这种方法定义的类不能再继承其他类。

run()是public方法。

调用线程方法:生成线程类的对象,然后调用start()方法。

注:实际运行时存在3个(或以上)个线程:主程序线程、用户定义的线程和垃圾回收线程。主程序线程和用户定义的线程交替进行,无规律。

若调用时写的是run()而不是start(),程序会先执行完run()然后在执行其他,此时并不是多线程模型。

方法二:

提供一个实现接口Runnable的类作为线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体。用匿名内部类会简单很多。

-class RunnableImpl implements Runnable{run(){}}

-Runnable ri = new RunnableImpl()

-Thread t = new Thread(ri)

-t.start()

注:在实际开发中尽量少用继承,因为Java只支持单继承,故方法二更常用。

2)线程的简单控制方法

1.中断线程

Thread.sleep();

Thread.yield();//放弃CPU,然后和其他线程一起争夺CPU

//以上都是静态方法

2.设置线程的优先级

getPriority();

setPriority();

//线程的优先级最大是10,最小是1,可以使用Thread所提供的静态常量来设置(max_priority,min_priority)。

3)线程的同步控制

-.每个线程都有名字,可以通过getName()和setName()操作。

-Thread Thread.currentThread用于获取当前正在执行这段代码的线程。

-为避免同步错误,引入同步代码块

synchronized(this){

//该进程获得同步锁

//执行完该代码块才允许其他线程使用CPU

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值