1.抽象类、方法
所谓的抽象类呢,就是带有抽象方法的类.
所谓的抽象方法就像是一种写代码的规范.
抽象方法没有方法体
抽象方法可以有参数列表
抽象方法用abstract修饰
抽象方法的访问修饰分别为 public、protected、default(缺省 不用写)
加深了解抽象类
/*理解JAVA抽象类
* 1.抽象类不能被实例化.
* 2.抽象类有构造器,且他的构造在他的子类被实例化时被调用的顺序和普通类调用的顺序是一样的(先父后子).
* 3.抽象类内部的方法可以不是抽象方法,也就是说抽象类内部可以有具体的方法.
* 4.抽象类的抽象方法属于一种不完整的方法,只含有声明和定义,没有方法主体.
* 5.如果抽象的某个子类是普通类(非abstract类型的类),那么该子类必须Override抽象类中所有的抽象方法.
* 6.抽象类的子类也是抽象类的话,那么该子类既可以Override父类中的方法,也可以不Override父类中的方法.
* 7.普通类中不能定义抽象方法.
* 8.static不能修饰抽象方法
* 备注:为了方便理解,所谓的普通是指如下形式定义的类
public class X{} 或 class A XX{}
eg1:
public abstract class Chouxiang { //抽象类
//抽象类里面不一定有抽象方法,抽象方法必须是抽象类。
public abstract void sex();//抽象方法
public void sleep(){
System.out.println("睡了");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
2.内部类、局部类、匿名内部类
内部类:指在类内部的类。
/*内部类的使用*/
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getYear() {
return "14";
}
public void setYear(String year) {
this.year = year;
}
String year;
public void name(){
class Book{
void read(){
System.out.println("正在读书");
}
Book book=new Book();
局部类:在方法里面写的类——只能在方法中创建对象
匿名内部类:
public class Test {
public static void main(String[] args) {
Paper paper=new Paper(){
@Override
public String paper(){
return "B6";
}//匿名内部类,因为这个类没有名字,只能创建一次对象。
};
// // TODO Auto-generated method stub
// Pen pen=new Pen();
// pen.setName("明");
// Pencil pencil=pen.new Pencil();
// pencil.brand();
//
}
}
3.接口\面向接口的编程
1、定义接口
使用interface来定义一个接口。接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成。定义接口的基本格式如下:
[修饰符] interface 接口名 [extends 父接口名列表]{
[public] [static] [final] 常量;
[public] [abstract] 方法;
}
修饰符:可选,用于指定接口的访问权限,可选值为public。如果省略则使用默认的访问权限。
接口名:必选参数,用于指定接口的名称,接口名必须是合法的Java标识符。一般情况下,要求首字母大写。
extends 父接口名列表:可选参数,用于指定要定义的接口继承于哪个父接口。当使用extends关键字时,父接口名为必选参数。
方法:接口中的方法只有定义而没有被实现.
public interface Ink {
public String ink();
}
public class InkNanjing implements Ink{
@Override
public String ink() {
// TODO Auto-generated method stub
return "黑色";
}
}
4.异常
1.自定义异常:
class 异常类名 extends Exception
{
public 异常类名(String msg)
{
super(msg);
}
}
2.标识可能抛出的异常:
throws 异常类名1,异常类名2
3.捕获异常:
try{}
catch(异常类名 y){}
catch(异常类名 y){}
4.方法解释
getMessage() //输出异常的信息
printStackTrace() //输出导致异常更为详细的信息
public class Student {
private int score;
public int getScore() {
return score;
}
public void setScore(int score) throws FailScore {
if(score<60){
throw new FailScore();//当score<60时抛出异常到异常类FailScore中
}
this.score = score;
System.out.println(score);
}
}
public class FailScore extends Exception{//继承异常父类Excption
public FailScore(){
super("不及格的异常"); //调用父类
}
public void printStackTrace(){
System.out.println("成绩不好");
super.printStackTrace();
}
import javax.print.PrintService;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("开始运行");
Student li=new Student();
try {
li.setScore(50);
} catch (FailScore e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5.常用类
(1).Date
Date类实例:
1.格式化输出当前日期
<span style="font-size:16px;">package demo.others;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
Date d = new Date();
//输出格式:dow mon dd hh:mm:ss zzz yyyy
//表示 :星期 月 日期 时 分 秒 时区 年
System.out.println(d);
//Format 是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类。
Format format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ");
System.out.println(format.format(d));
}
}
</span>
(2).Calendar
<span style="font-size:16px;">package demo.others;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/*
* 日历类简单例子,Calendar类不稳定,有延时性和容错性
*/
public class CalendarDemo {
public static void main(String[] args) {
simpleDemo();
showCalendar();
numberOfDays();
}
// Calendar常用方法示例
public static void simpleDemo() {
//当前日期
Calendar c = new GregorianCalendar();
//c.setTime(new Date());
StringBuilder str = new StringBuilder();
//获取当前日期的信息
str.append("year:" + c.get(Calendar.YEAR));
str.append(" month:" + (c.get(Calendar.MONTH) + 1));
str.append(" day:" + c.get(Calendar.DAY_OF_MONTH));
str.append(" week:" + (c.get(Calendar.DAY_OF_WEEK) - 1));
str.append(" hour:" + c.get(Calendar.HOUR_OF_DAY));
str.append(" minute:" + c.get(Calendar.MINUTE));
str.append(" second:" + c.get(Calendar.SECOND));
System.out.println(str);
// 转换成Date对象
Date d = Calendar.getInstance().getTime();
System.out.println(d);
}
// 输出当前月的日历
public static void showCalendar() {
// 获得当前时间
Calendar c = Calendar.getInstance();
// 设置代表的日期为1号
c.set(Calendar.DATE, 1);
// 获得1号是星期几
int start = c.get(Calendar.DAY_OF_WEEK);
// 获得当前月的最大日期数
int maxDay = c.getActualMaximum(Calendar.DATE);
// 输出标题
System.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六");
// 输出开始的空格
for (int i = 1; i < start; i++) {
System.out.print(" ");
}
// 输出该月中的所有日期
for (int i = 1; i <= maxDay; i++) {
// 输出日期数字
System.out.print(" " + i);
// 输出分隔空格
System.out.print(" ");
if (i < 10) {
System.out.print(' ');
}
// 判断是否换行
if ((start + i - 1) % 7 == 0) {
System.out.println();
}
}
// 换行
System.out.println();
}
// 计算两个日期之间相差的天数
public static void numberOfDays() {
// 设置两个日期
// 日期:2009年3月11号
Calendar c1 = Calendar.getInstance();
c1.set(2009, 3 - 1, 11);
// 日期:2010年4月1号
Calendar c2 = Calendar.getInstance();
c2.set(2010, 4 - 1, 1);
// 转换为相对时间
long t1 = c1.getTimeInMillis();
long t2 = c2.getTimeInMillis();
// 计算天数
long days = (t2 - t1) / (24 * 60 * 60 * 1000);
System.out.println(days);
}
}
</span>
6.File文件
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class File1{
public static void main(String[] args) {
File file=new File("d://147.txt");//创建一个新的文件
if(!file.exists()){//判断文件是否存在
try {file.createNewFile();//不存在时新建一个147.txt
} catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}/*向文件中写入文字*/
String words="ddddddssddfsdfas";
try {
byte[] array=words.getBytes();
FileOutputStream fis=new FileOutputStream(file);
fis.write(array);//write方法只能写入Byte数组
fis.flush();//flush() 是清空
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
/*读取文件中的byte数组*/
byte[] array=new byte[1024];
try {
FileInputStream fos=new FileInputStream(file);
int num=fos.read(array);
while(num!=-1){
System.out.println(new String(array, 0, num)); //输出0-num长度的数组
num=fos.read(array);//读取文件中字符串的长度
}
fos.close();//关闭fos同时释放内存
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}