抽象类(只有方法名,没有方法体)abstract
有抽象方法就是抽象类,抽象类不一定有抽象方法。抽象类无法创建对象。
父类有抽象方法,则父类必定为抽象类,子类中必须实现父类中的抽象方法。
如果掉用的父类里有相同的方法(非抽象方法),则用父类的类建立子类的对象后,
调用子类的方法,需要进行强制类型装换,将父类转换为子类;如果父类中只有抽象方法,则直接调用即可
package day0801up;
//父类abstract抽象类
public abstract class Animal {
//抽象方法,无方法体
public abstract void voice();
}
public void voice(String s){
System.out.println("动物叫");
}
//子类
package day0801up;
public class Dog extends Animal{
public void voice() {
System.out.println("wangwangwang");
}
public void voice(String s){
System.out.println("动物叫");
}
}
//测试类
package day0801up;
public class Text {
public static void main(String[] args){
Animal wangcai=new Dog();
wangcai.voice();
if (wangcai instanceof Dog) {
((Dog)wangcai).voice("看看到底是打印什么");
}
}
}
内部类 局部类
内部类:类内部的类。。。。
内部类是指对象包含的类
局部类: 在方法体中写的类
只能在方法中创建对象
package InnerClass;
public class Student {
// private int age;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void study(){
//局部类
class Book{
String auther;
public void read(){
System.out.println("读书");
}
}
Book book=new Book();//方法内部中的类,只能在方法中定义对象
book.read();
System.out.println("aaaa");
}
//内部类
class Pen{
String color;
String type;
//内部类调用 外部类的属性时,可是使用 “ 外部类.this.属性” 的方法,且在主方法执行的时候需要执行属性。
public void write(){
System.out.println(Student.this.name+"写东西");
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
}
//测试类
package InnerClass;
import InnerClass.Student.Pen;
public class Test {
public static void main(String[] args){
Student xiaoming=new Student();
//此处设置了名字,write()才能调用student中的属性名字,若此处不设置则显示null。
xiaoming.setName("zhangsan");
xiaoming.study();
//因为是内部类,所以需要导包 ,快捷键: ctrl+shift+o
Pen pen=xiaoming.new Pen();
pen.setColor("蓝色");
pen.write();
System.out.println(pen.getColor());
}
}
常用的类
正则表达式(Matcher+Pattern)
package day0801down;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CommonClass {
public static void main(String[] args) {
//Pattern
//手机号13 14 15 17 18+随机9位数
Pattern p = Pattern.compile("^1(3|4|5|7|8)\\d{9}$");//此处俩次\\相当于平常的一次\
Matcher m = p.matcher("123456789");
boolean b = m.matches();
System.out.println(b);
//身份证号18位,最后一位可能为x或者X;
Pattern p1 = Pattern.compile("^(\\p{Digit}{18})|(\\p{Digit}{17}(x|X))$");
Matcher m1 = p1.matcher("12345678912345678x");
boolean b1 = m1.matches();
System.out.println(b1);
//邮箱xxxx@xxx.com|.cn|.net
Pattern p2 = Pattern.compile("^\\w{4}@\\w{3}((.com)|(.cn)|(.net))$");
Matcher m2 = p2.matcher("456w@163.com");
boolean b2 = m2.matches();
System.out.println(b2);
}
}
Date+Calendar+SimpleDateFormat格式化输出
package day0801down;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Text {
public static void main(String[] args) {
//常用的类Date
Date date=new Date();//导包,快捷键:ctrl+shift+o。
Date date2=new Date();//新建Date类型对象date2
System.out.println(date.toString());
System.out.println(date.getTime());
System.out.println(date.after(date2));
System.out.println(date.before(date2));
System.out.println(date.equals(date2));
//常用的类Calendar
Calendar now=Calendar.getInstance();
//now.set(Calendar.DAY_OF_YEAR, now.get(Calendar.DAY_OF_YEAR)+50);把当前日期+50天设定为当前日期
System.out.println(now.get(Calendar.YEAR)+"年");
System.out.println(now.get(Calendar.MONTH)+1+"月");//月份是从0开始算的,所以要+1
System.out.println(now.get(Calendar.DAY_OF_MONTH));
//SimpleDateFormat格式化输出
SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String time=format.format(now.getTime());//将一个 Date 格式化为日期/时间字符串
System.out.println(time);
//将字符串转换为秒(自方法规定的时间开始)
String time1="2015年09月20日 16:06:27";
try {
Date date1=format.parse(time1);//parse返回值类型是Date
System.out.println(date1.getTime());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
异常
分为两种
Error:不可捕获
Exception:可捕获异常,分为Runtime Exception和非Runtime Exception
package day0801down;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Abnormal {
//抛出异常throws,可以在main(String[] args)后面抛出异常throws FileNotFoundException,IOException
//这样的话主函数中就不必加try/catch了╮(╯▽╰)╭
public static void main(String[] args) {
File file=new File("d://11.txt");
try {
FileInputStream fis=new FileInputStream(file);
fis.read();
//选择try/catch异常后运行catch部分
} catch (FileNotFoundException e) {
//捕获异常后的处理
System.out.println("这个文件找不到");
e.printStackTrace();
}catch (IOException e) {//这个报错范围比上面大,所以放在下面
e.printStackTrace();
}finally{
//必须运行,不管是否捕获异常
System.out.println("处理完毕");
}
System.out.println("程序运行正常");
}
}
自定义异常
package thro;
public class Student {
private int score;
public int getScore() {
return score;
}
public void setScore(int score)throws FailScores {
if(score<60)
{
throw new FailScores();
}
this.score = score;
}
}
package thro;
//自定义FailScores类
public class FailScores extends Exception{
public FailScores(){
super("不及格");
}
@Override
public void printStackTrace() {
System.err.println("成绩不理想");
super.printStackTrace();
}
}
package thro;
public class TextThrows {
public static void main(String[] args){
System.out.println("程序开始");
Student xiaoming=new Student();
try {
xiaoming.setScore(59);
} catch (FailScores e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("程序结束");
}
}