20150801

一、抽象类:

1.没有方法体:public abstract void eat();
2.特点:
1)只有方法名,没有方法体。
2)抽象类不能实例化(即不能创建对象)
3)抽象方法一定在抽象类中,即抽象类不一定包含抽象方法,但抽象方法一定在抽象类中。
4)抽象类中的方法要被使用,必须由子类复用其所有“抽象方法”。
如果子类只覆盖了部分方法,那么子类也是抽象类,需要加abstract修饰。
3.作用:
强迫子类去实现一些功能。
不让类建立对象。

public abstract class People {

    public void run(){

    }

    public abstract void eat(); //
    public abstract void drink();

}
子类:
public class Men extends People {

    public void eat(){
        System.out.println("run");
    }
    public void drink(){

二、接口:

接口:/注:无返回值一定写void,而无参数列表不写。/
1.声明格式:【修饰词列表】interface 接口名

2.特点:
1)接口中全部是“抽象方法”,省略abstract。
2)由于子类复写父类抽象方法,所以加标注:@Override
3)接口中不含构造方法。所以不可以直接通过接口来生成实例对象。

3.接口成员域:
默认成员域都有public,static和final属性。(不能包含protected和private属性);
默认成员方法都有public,abstract属性。

//例如:
//Paper接口:
public interface Paper {  //接口Paper,仅一个paperSize的抽象方法
    public abstract void paperSize();

}
//Ink 接口:
public interface Ink {
    public abstract void inkColor();
}
//Print 接口:
public interface Print {
    public abstract void print(Paper paper,Ink ink);
}

//PaperQingdao 继承:
public class PaperQingdao implements Paper,Ink {
    @Override
    public void paperSize(){
        System.out.println("青岛纸张大小A4"); //必须实现接口中抽象方法

    }
    @Override
    public void inkColor(){
        System.out.println("青岛墨盒颜色:绿色");
    }


}
//测试:
public class Test03 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Paper paper = new PaperQingdao();  //多态性:接口指向子类对象。面向接口编程,这样方便以后扩展
        Ink ink = new PaperQingdao();

        Print priq = new PrintQingdao();
        priq.print(paper, ink);


    }

}
/*要面向接口编程,这里创建Print priq = new PrintQingdao();创建打印机时,可以利用一个类printFctory()来返回一个打印机对象。
即:
public class printFctory{
    public static Paper creatPaper(){
        return new Paper();
    }
}
//这样在用时:
Paper paper = printFctory.creatPaper(); //这样并不知道用的哪个纸
*/

4.接口和类的区别:
基本功能定义到类中;(隶属)
扩展功能定义到接口中。(象)

三、内部类

一)一般内部类
1.访问规则:
内部类:可以直接访问外部类的成员,包括私有。
外部类:要访问内部类,必须建立内部类对象。
2.实例化方法:
1)People peo = new People(); //第一种实例化方法
peo.name = “zhangsan”;
BeijPeople beijp = peo.new BeijPeople();
2) People.BeijPeople p = new People().new BeijPeople(); //第二种实例化方法
3.内部类若要使用外部类,可以用:外部类名称.this.
4.使用:
当描述事物时,其内部还有事物。
实例化演示:
这里写图片描述
内部类使用外部类
这里写图片描述
二)局部类:
局部类:(在方法中的类)
1.只能在本方法中创建对象。
2.注意:
1)不能用static修饰。
这里写图片描述
三)匿名内部类:
1.适用:仅适用对象一次
2.前提:匿名内部类必须是继承一个类或者实现接口。
3.格式:new 父类型名(){父类型构造方法的调用参数列表};、
4.注意:
1)匿名内部类里面的方法不要超过三个,否则就不要匿名了。
2)类不能具有abstract和static属性。
不能派生子类。
匿名内部类的成员域具有static时,则必须同时具有final属性。
不能含有static属性的成员方法。
3)//不能调用内部类中建的自己的方法,除非在自己内部类中使用。
这里写图片描述
这里写图片描述

四、正则表达式:

1.调用顺序:
Pattern p = Pattern.compile(“a*b”);//生成一个匹配的格式
Matcher m = p.matcher(“aaaaab”);
boolean b = m.matches();
或者直接: boolean b = Pattern.matches(“a*b”, “aaaaab”);
这里写图片描述

五、异常

附:
这里写图片描述

1.解决异常:
这里写图片描述
理解:
对捕获到的异常进行的常见的方法操作:
1)String getMessage(); //获取异常信息
2)String toString(); //异常名称:异常信息
3)void printStackTrace();//异常名称,信息,异常出现的位置。
注:当多个catch时,父类catch放在后面。
2.抛出异常:
格式:方法后接 throws 异常名称
3.自定义异常:
1>

/*
 * 自定义FailScores这样一个异常类,继承Exception类
 * */
public class FailScores extends Exception {
    public FailScores(){  //构造函数
        super("不及格!");

    }

    @Override
    public void printStackTrace(){   //复写printStackTrace方法:将此 throwable 及其追踪输出至标准错误流。
        System.err.println("成绩不理想!");
        super.printStackTrace();  //调用父类printStackTrace方法输出错误流

    }

}
/*在一个方法中使用这个异常*/
public class Student {
    private String name;
    private int score;

    public int getScore(){
        return score;
    }

    public void setScore(int score) throws FailScores{  //某个方法使用这个异常用throws
        if(score<60)
            throw new FailScores();  //如果发现这个错误就抛出这个异常(创建对象)
        this.score = score;

    }


}
/*测试这个方法*/
public class Test04 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Student stu = new Student();
        try {
            stu.setScore(50);  //setScore()方法有异常,所以用try,catch
        } catch (FailScores e) {    //当捕捉到FailScores异常时,运行catch
            // TODO Auto-generated catch block
            e.printStackTrace();   //FailScores中的printStackTrace方法已被重写。
        }

    }

}

2>
自定义类继承RuntimeException时,用自定义类的方法可以不用throws,直接throw就行,且测试时不需要用try和catch。

六、输入输出流

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileInputOut {

    public static void main(String[] args) {

        /*写入文字,用输出流*/
        File file = new File("d://abc.txt"); //建文件对象
    /*  
        if(!file.exists()){    //判断文件是否存在,不存在就创建
            try {
                file.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        String word = "我写入了文字!";
        byte[] array = word.getBytes(); //将字符串变成字节输出

        try {
            FileOutputStream fos = new FileOutputStream(file); //产生FileNotFoundException异常
            fos.write(array);  //产生IOException异常
            fos.flush();
            fos.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        */

        /*读文件中字节*/
        byte[] array2 = new byte[1024];  //创好字节数组
        try {
            FileInputStream fis = new FileInputStream(file);  会有异常
            int num = fis.read(array2); //产生的是IOException异常,这里read(array2)返回的是读入缓冲区的字节总数
            while(num!=-1){  //当读完了就为-1,所以这里只要没读完就
                //System.out.println(num);
                System.out.println(new String(array2,0,num));
                num = fis.read(array2);         //继续读   

            }
            fis.close();
            } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 





    }

}

小知识:

1.对象的常量:final int i = 10;
类的常量 :static final int j = 10;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值