java学习笔记3
(1)类成员的访问控制权限
1 、 private 访问控制符
在前面已经介绍了private 访问控制符的作用, 如果一个成员方法或成员变量名前
使用了 private 访问控制符,那么这个成员只能在这个类的内部使用。
注意:
不能在方法体内声明的变量前加private 修饰符。
2 、 默认访问控制符
如果一个成员方法或成员变量名前没有使用任何访问控制符,就称这个成员所拥
有的是默认的(default)访问控制符。默认的访问控制成员可以被这个包中的其它类
访问。如果一个子类与其父类位于不同的包中,子类也不能访问父类中的默认访问控
制成员。
3 、 protected 访问控制符
如果一个成员方法或成员变量名前使用了 protected 访问控制符, 那么这个成员既
可以被同一个包中的其它类访问,也可以被不同包中的子类访问。
4 、 public 访问控制符
如果一个成员方法或成员变量名前使用了 public 访问控制符,那么这个成员可以
被所有的类访问,不管访问类与被访问类是否在同一个包中。
(2)Java 的命名习惯
通过查看 JDK 文档,可以发现,在 JDK 中类的声明、方法的声明、常量的
声明都是有一定规律的,规律如下:
◆ 包名中的字母一律小写,如:demo.java。
◆ 类名、接口名应当使用名词,每个单词的首字母大写,如:TestPerson。
◆ 方法名,第一个单词小写,后面每个单词的首字母大写,如:talkMySelf。
◆ 常量名中的每个字母一律大写,如:COUNTRY
(3)Jar 文件的使用
jar 文件就是 Java Archive File,而它的应用是与 Java 息息相关的。jar 文件就是一
种压缩文件,与常见的 ZIP压缩文件格式兼容,习惯上称之为 jar 包。开发者开
发了许多类,当需要把这些类提供给用户使用时,通常都会将这些类压缩到一个 jar
文件中,以 jar 包的方式提供给用户使用。只要别人的 classpath 环境变量的设置中包
含这个 jar 文件,Java 虚拟机就能自动在内存中解压这个 jar 文件,把这个 jar 文件当
作一个目录,在这个 jar 文件中去寻找所需要的类及包名所对应的目录结构。
从 JDK 的提示中可以发现, 只要在命令行中用以下命令就可以将一个包打成一个jar 文件:
jar –cvf create.jar demo
· -c:创建新的存档
· -v:生成详细输出到标准输出上
· -f:指定存档文件名
· create.jar:是生成 jar 文件的名称
· demo:要打成 jar 文件的包
(4) 进程和线程
多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个
基本单位。线程和进程的主要差别体现在以下两个方面:
(1) 、同样作为基本的执行单元,线程是划分得比进程更小的执行单位。
(2) 、每个进程都有一段专用的内存区域。与此相反,线程却共享内存单元(包
括代码和数据) ,通过共享的内存单元来实现数据交换、实时通信与必要
的同步操作。
( 5 )如何激活线程
如果在类里要激活线程,必须先做好下面两个准备:
(1) 、线程必须扩展自 Thread 类,使自己成为它的子类。
(2) 、线程的处理必须编写在 run()方法内。
通过继承 Thread 类实现多线程
使一个类可激活线程,必须按照下面
的语法来编写:
class 类名称 extends Thread // 从 Thread 类扩展出子类
{
属性
方法…
修饰符 run(){ // 复写 Thread 类里的 run()方法
以线程处理的程序;
}
}
Thread 存放在 java.lang 类库里, 但并不需加载 java.lang 类库, 因为它会自动加载。
此外, run()方法是定义在 Thread 类里的一个方法, 把线程的程序代码编写在 run()
方法内,
(6)实现 Runnable 接口相对于继承 Thread 类来说,有如下显著的优势:
(1) 、 适合多个相同程序代码的线程去处理同一资源的情况,把虚拟 CPU(线
程)同程序的代码、数据有效分离,较好地体现了面向对象的设计思想。
(2) 、 可以避免由于 Java 的单继承特性带来的局限。 开发中经常碰到这样一种
情况,即:当要将已经继承了某一个类的子类放入多线程中,由于一个
类不能同时有两个父类,所以不能用继承 Thread 类的方式,那么就只能
采用实现 Runnable 接口的方式了。
(3) 、 增强了程序的健壮性, 代码能够被多个线程共享, 代码与数据是独立的。
当多个线程的执行代码来自同一个类的实例时,即称它们共享相同的代
码。多个线程可以操作相同的数据,与它们的代码无关。当共享访问相
同的对象时,即共享相同的数据。当线程被构造时,需要的代码和数据
通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了
Runnable 接口的类的实例。
(7) 线程的状态
任何线程一般具有五种状态,即创建、就绪、运行、阻塞、终止。可用下面的图表示
(8) 后台线程与 setDaemon()方法
对 Java 程序来说,只要还有一个前台线程在运行,这个进程就不会结束,如果一
个进程中只有后台线程在运行, 这个进程就会结束。
后台进程:如果某个线程对
象在启动(调用start()方法)之前调用了setDaemon(true)方法,这个线程就变成了后
台线程。
实例:
public class ThreadDaemon { public static void main(String args[]) { ThreadTest t = new ThreadTest() ; Thread tt = new Thread(t) ; tt.setDaemon(true) ; // 设置后台运行 tt.start(); } }class ThreadTest implements Runnable { public void run() { while(true) { System.out.println(Thread.currentThread().getName()+"isrunning."); } }}
通过此示例可以看到:虽然创建了一个无限循环的线程,但因为它是后台线程,整个进程在主线程结束时就随之终止运行了。这验证了进程中只有后台线程运行时,进程就会结束的说法