1、pubic权限
可以修饰类、成员变量和成员函数
同一个包中或者不同包中的类都可以自由访问
包括不同包中的继承的父类也必须由public修饰,不然无法继承
2、private 可以修饰成员变量和成员函数
只能在本类当中使用
3、defualt权限:默认权限
在同一个包中可以自动访问
如果子类和父类不在一个包中,子类无法继承到父类当中的default权限的变量和成员函数
4、protected权限
protected权限首先拥有和default一样的功能,但是该权限只能修饰成员变量和成员函数
protected权限允许跨包的继承(仅限与子类和父类)。
为什么不用public权限继承呢?因为public权限太泛,所有的类都可以访问到,用protected修改的变量和方法,仅限继承访问。
-----28-----接口
抽象类:不能生成对象,但是子类可以继承,然后复写其中的抽象方法
1、接口其实就是一个特殊的抽象类
2、接口里面的方法全部都是抽象方法
3、接口里面的方法全部使用public修饰
4、接口使用interface修饰
5、一个类可以继承多个接口
6、一个接口可以继承多个接口
--USB.java
interface USB{
void read();
void write();
}
--WiFi.java
interface WiFi{
void open();
void close();
}
interface USBWiFi extends USB,WiFi{//这里的一个接口可以继承多个接口
void test();
}
--USBPhone.java
class USBPhone implements USB,WiFi{ //一个类可以继承多个接口
public void read(){
System.out.println("USBPhone read");
}
public void write(){
System.out.println("USBPhone write");
}
public void open(){
System.out.println("WiFi open");
}
public void close(){
System.out.println("WiFi close");
}
}
--Test.java
class Test{
public static void main(String args[]){
USBPhone usbPhone = new USBPhone();
USB usb = usbPhone;//这里是一个向上转型
usb.read();
usb.write();
WiFi wifi = usbPhone;
wifi.open();
wifi.close();
//这里的usbPhone同时继承了USB接口和WiFi两个接口,可以同时向上转型
}
}
-----简单静态工厂模式
把生成对象的的模式,封装在一个静态工厂类里面。
---PrinterFactory.java
class PrintFactory{
public static Printer getPrinter(int flag){
Printer printer = null;
if (flag == 0){
printer = new HPPrinter();
}
else if (flag == 1){
printer = new CanonPrinter();
}
return printer;
}
}
-----java的异常(exception)指的是运行的异常,而非编译的异常。
运行异常时虚拟机会生成一个异常对象,所有的异常类的父类都是Throwable.
-----i/o-----
字节流
InputStream<-FileInputStream
int read(byte[] b,int off, int len)
读进来的数据就放在b的数组里面
off表示从b的数组的第几位开始存放
返回值是一共读取的字节数
OutputStream<-FileOutputStream
int write(byte[] b,int off, int len)
往文件里面写数据
off表示从数组b的第几个字节开始往硬盘里面写
import java.io.*
class Test{
public static void main(String args []){
FileInputStream fis = null;//声明输入流引用
FileOutputStream fos = null
try{
fis = new FileInputStream("e:/src/from.txt");//生成代表输入流的对象
fos = new FileOutputStream("e:/src/to.txt");
byte[] buffer = new byte[100];//生成一个字节数组
int temp = fis.read(buffer,0,buffer.length);//调用输入流的read方法,读取数据
fos.write(buffer,0,temp);//读了多少字节,就写多少字节
for(int i=0; i < buffer; i++){
System.out.println(buffer[i]);
}
}
catch(Exception e){
System.out.println(e);
}
}
}
-----内部类------
一个类定义在另一个类的内部,称为内部类。
class A{
int i;
class B{//B就是一个内部类
int j;
public int funB(){
int result = i+j;//内部类可以直接使用外部类的成员变量
//result =A.this.i + this.j;
return result;
}
}
}
class Test{
public static void main(String args[]){
A a = new A();
A.B b = new A().new B();
}
}
-----匿名内部类-----
b.fun(new A(){
public void doSomething(){
System.out.println(匿名内部类);
}
//A是一个接口,作为fun的参数导入,复写了接口内部的函数
});
------多进程与多线程
多进程:
在操作系统中能够同时运行多个程序
多线程:
在同一个应用程序中有多个顺序流执行
创建线程的方法:
方式一:
定义一个线程类,它继承类Thread并重写其中的run()方法,方法run称为线程体。
由于Java只支持单继承,用这种方法定义的类不能在继承其它类。
class FirstThread extends Thread{
public void run(){
for (int i=0; i < 100; i++){
System.out.println("-------"+i);
}
}
}
class Test{
public static void main(String args[]){
//生成线程类的对象
FirstThread ft = new FirstThread();
//启动线程
ft.start();//这才是真正启动一个新的线程,这里执行线程中的run方法
//ft.run();//千万不能这样写,这样写还在一个线程里面
//此时共有三个线程,主函数main一个线程,ft.run()一个线程,垃圾回收一个线程。
}
}
实现线程的第二种方法:
提供一个实现接口Runnable的类作为线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体。
class RunnableImpl implements Runnable{
public void run(){
for (int i=0; i < 100; i++){
System.out.println("Runnable-->" + i);
}
}
}
class Test{
public static void main(String args[]){
//生成一个Runnable接口
RunnableImpl ri = new RunnableImpl();
//生成一个Thread对象,并将Runnable接口实现类的对象作为参数传递给该Thread对象
Thread t = new Thread(ri);
t.setPriority(Thread.MAX_PRIORITY);//设置最大优先级,最大为10,最小是1
System.out.println(t.getPriority());//获取优先级
t.start();
}
}
Thread.yield();会让当前线程让出cpu
getPriority();
setPriority();
引用放在栈内存当中,对象放在堆内存当中。
==
基本数据类型判断值是否相等,引用数据类型判断指向堆内存的同一个地址。
equals 主要用来比较两个对象的内容是否相等
对象的内容相等需要符合两个条件:
1、对象的类型相同(可以使用instanceof操作符进行比较);
2、两个对象的成员变量的值完全相同
intent.putExtra("org.mobiletrain.s02e04_intent.age", 20);
包名里面变量注意
intent.putExtra("test","test");//字符串键值对
int age = intent.getIntExtra("org.mobiletrain.s02e04_intent.age", 10);
可以修饰类、成员变量和成员函数
同一个包中或者不同包中的类都可以自由访问
包括不同包中的继承的父类也必须由public修饰,不然无法继承
2、private 可以修饰成员变量和成员函数
只能在本类当中使用
3、defualt权限:默认权限
在同一个包中可以自动访问
如果子类和父类不在一个包中,子类无法继承到父类当中的default权限的变量和成员函数
4、protected权限
protected权限首先拥有和default一样的功能,但是该权限只能修饰成员变量和成员函数
protected权限允许跨包的继承(仅限与子类和父类)。
为什么不用public权限继承呢?因为public权限太泛,所有的类都可以访问到,用protected修改的变量和方法,仅限继承访问。
-----28-----接口
抽象类:不能生成对象,但是子类可以继承,然后复写其中的抽象方法
1、接口其实就是一个特殊的抽象类
2、接口里面的方法全部都是抽象方法
3、接口里面的方法全部使用public修饰
4、接口使用interface修饰
5、一个类可以继承多个接口
6、一个接口可以继承多个接口
--USB.java
interface USB{
void read();
void write();
}
--WiFi.java
interface WiFi{
void open();
void close();
}
interface USBWiFi extends USB,WiFi{//这里的一个接口可以继承多个接口
void test();
}
--USBPhone.java
class USBPhone implements USB,WiFi{ //一个类可以继承多个接口
public void read(){
System.out.println("USBPhone read");
}
public void write(){
System.out.println("USBPhone write");
}
public void open(){
System.out.println("WiFi open");
}
public void close(){
System.out.println("WiFi close");
}
}
--Test.java
class Test{
public static void main(String args[]){
USBPhone usbPhone = new USBPhone();
USB usb = usbPhone;//这里是一个向上转型
usb.read();
usb.write();
WiFi wifi = usbPhone;
wifi.open();
wifi.close();
//这里的usbPhone同时继承了USB接口和WiFi两个接口,可以同时向上转型
}
}
-----简单静态工厂模式
把生成对象的的模式,封装在一个静态工厂类里面。
---PrinterFactory.java
class PrintFactory{
public static Printer getPrinter(int flag){
Printer printer = null;
if (flag == 0){
printer = new HPPrinter();
}
else if (flag == 1){
printer = new CanonPrinter();
}
return printer;
}
}
-----java的异常(exception)指的是运行的异常,而非编译的异常。
运行异常时虚拟机会生成一个异常对象,所有的异常类的父类都是Throwable.
-----i/o-----
字节流
InputStream<-FileInputStream
int read(byte[] b,int off, int len)
读进来的数据就放在b的数组里面
off表示从b的数组的第几位开始存放
返回值是一共读取的字节数
OutputStream<-FileOutputStream
int write(byte[] b,int off, int len)
往文件里面写数据
off表示从数组b的第几个字节开始往硬盘里面写
import java.io.*
class Test{
public static void main(String args []){
FileInputStream fis = null;//声明输入流引用
FileOutputStream fos = null
try{
fis = new FileInputStream("e:/src/from.txt");//生成代表输入流的对象
fos = new FileOutputStream("e:/src/to.txt");
byte[] buffer = new byte[100];//生成一个字节数组
int temp = fis.read(buffer,0,buffer.length);//调用输入流的read方法,读取数据
fos.write(buffer,0,temp);//读了多少字节,就写多少字节
for(int i=0; i < buffer; i++){
System.out.println(buffer[i]);
}
}
catch(Exception e){
System.out.println(e);
}
}
}
-----内部类------
一个类定义在另一个类的内部,称为内部类。
class A{
int i;
class B{//B就是一个内部类
int j;
public int funB(){
int result = i+j;//内部类可以直接使用外部类的成员变量
//result =A.this.i + this.j;
return result;
}
}
}
class Test{
public static void main(String args[]){
A a = new A();
A.B b = new A().new B();
}
}
-----匿名内部类-----
b.fun(new A(){
public void doSomething(){
System.out.println(匿名内部类);
}
//A是一个接口,作为fun的参数导入,复写了接口内部的函数
});
------多进程与多线程
多进程:
在操作系统中能够同时运行多个程序
多线程:
在同一个应用程序中有多个顺序流执行
创建线程的方法:
方式一:
定义一个线程类,它继承类Thread并重写其中的run()方法,方法run称为线程体。
由于Java只支持单继承,用这种方法定义的类不能在继承其它类。
class FirstThread extends Thread{
public void run(){
for (int i=0; i < 100; i++){
System.out.println("-------"+i);
}
}
}
class Test{
public static void main(String args[]){
//生成线程类的对象
FirstThread ft = new FirstThread();
//启动线程
ft.start();//这才是真正启动一个新的线程,这里执行线程中的run方法
//ft.run();//千万不能这样写,这样写还在一个线程里面
//此时共有三个线程,主函数main一个线程,ft.run()一个线程,垃圾回收一个线程。
}
}
实现线程的第二种方法:
提供一个实现接口Runnable的类作为线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体。
class RunnableImpl implements Runnable{
public void run(){
for (int i=0; i < 100; i++){
System.out.println("Runnable-->" + i);
}
}
}
class Test{
public static void main(String args[]){
//生成一个Runnable接口
RunnableImpl ri = new RunnableImpl();
//生成一个Thread对象,并将Runnable接口实现类的对象作为参数传递给该Thread对象
Thread t = new Thread(ri);
t.setPriority(Thread.MAX_PRIORITY);//设置最大优先级,最大为10,最小是1
System.out.println(t.getPriority());//获取优先级
t.start();
}
}
Thread.yield();会让当前线程让出cpu
getPriority();
setPriority();
引用放在栈内存当中,对象放在堆内存当中。
==
基本数据类型判断值是否相等,引用数据类型判断指向堆内存的同一个地址。
equals 主要用来比较两个对象的内容是否相等
对象的内容相等需要符合两个条件:
1、对象的类型相同(可以使用instanceof操作符进行比较);
2、两个对象的成员变量的值完全相同
intent.putExtra("org.mobiletrain.s02e04_intent.age", 20);
包名里面变量注意
intent.putExtra("test","test");//字符串键值对
int age = intent.getIntExtra("org.mobiletrain.s02e04_intent.age", 10);