您的位置:首页 > 编程语言 > Java开发

java学习笔记

2014-09-16 11:18 197 查看
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
4000
()方法,方法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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: