目录
public void setTime(long time);
public SimpleDateFormat(String pattern);编辑
一、抽象类
概述:
Java中,一个没有方法体的方法应该被定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
特点:
*抽象类和抽象方法必须使用 abstract 关键字修饰。
public abstract class 类名{}
public abstract void 方法名();
*抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。
*抽象类不能直接实例化。可以参照多态的方式,通过子类对象实例化,这叫抽象类多态。
*抽象类的子类要么重写抽象类中的所有抽象方法,要么写成抽象类。
抽象类的成员特点:
成员变量----可以是变量也可以是常量。
构造方法----有构造方法,但不用于实例化,用于子类访问父类数据的初始化。
成员方法----可以有抽象方法(限定子类必须完成某些动作),也可以有非抽象方法(提高代码复用性)。
二、接口
概述:
接口就是一种公共的规范标准,只要符合规范标准,就可以通用。Java中的接口更多体现在对行为的抽象。
特点:
*使用 interface关键字修饰: public interface 接口名{}
*类实现接口用 implements表示: public class 类名 implement 接口名{}
*接口实现实例化要参照多态的方式,通过实现类对象实例化,这叫做接口多态。
(多态的形式:具体类多态、抽象类多态、接口多态)
(多态的前提:有继承或实现关系;有方法重写;有父(类/接口)引用指向子(类/接口)对 象。
*接口类的实现: 重写接口中所有的抽象方法或写一个抽象类。
成员特点:
*成员变量----只能是静态常量,默认修饰符为:public static final
*构造方法----接口没有构造方法,因为接口主要是对行为进行抽象,没有具体的存在。
----(一个类如果没有父类,默认继承Object类)
*成员方法----只能是抽象方法,因为默认修饰符为 public abstract
类和接口的关系:
*类和类:继承关系,只能单继承,但可以多层继承。
*类和接口:实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。
*接口和接口:继承关系,可以单继承,也可以多继承。
抽象类和接口的区别:
*成员区别
抽象类------常量,变量,有构造方法,有抽象方法,也有非抽象方法。
接口------常量,抽象方法
*类和接口的关系区别
*设计理念区别
抽象类------对类抽象,包括属性、行为。
接口------对行为抽象,主要是行为。
三、形参和返回值
1、类名作为形参和返回值:
方法的形参是类名,其实需要的是该类的对象。
方法返回值是类名,其实返回的是该类的对象。
2、抽象类名作为形参和返回值:
方法的形参是抽象类名,其实需要的是该抽象类的子类对象。
方法返回值是抽象类名,其实返回的是该抽象类的子类对象。
3、接口名作为形参和返回值:
方法的形参是接口名,其实需要的是该接口的实现类对象。
方法返回值是接口名,其实返回的是该接口的实现类对象。
四、内部类
定义:在一个类中定义一个类。(如:在类A内部定义一个类B,类B就被称为内部类。
package myInner;
public class Inner {
public class Outer{
}
}
内部类访问特点:
内部类可以直接访问外部类的成员,包括私有。
外部类要访问内部类的成员,必须创建对象。
内部类的两种形式:
在类的成员位置-----成员内部类
在类的局部位置----局部内部类
成员内部类:
外界创建对象格式:外部类名.内部类名 对象名=外部类对象.内部类对象;
如:Outer.Inner oi=new Outer().new Inner();
局部内部类:
局部内部类是在方法中定义的类,所以外界是无法直接访使用的,需要在方法内部创建对象并使用。
该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
匿名内部类:
前提----存在一个类或者接口,类可以是具体类也可以是抽象类。
格式----
new 类名或接口名 (){
重写方法;
};
本质:一个继承了该类或实现了该接口的子类匿名对象。
利用本质可以实现方法的调用:
1、
new 类名或接口名 (){
重写方法;
}.方法;
2、
类名或接口名 变量名 = new 类名或接口名 (){
重写方法;
};
变量名.方法;
五、常用API
1、Math
2、System:
不能被实例化。
3、Object:
4、Arrays
5、基本类型包装
Integer:
int类型的最大值------Integer.MAX_VALUE
int类型的最小值------Integer.MIN_VALUE
package myInteger;
public class IntegerDemo {
public static void main(String[] args) {
Integer i1=new Integer("20");
System.out.println(i1);
//过时了
Integer i2=new Integer(25);
System.out.println(i2);
//过时
Integer i3=Integer.valueOf("30");
System.out.println(i3);
//输出int类型数据----30
Integer i4=Integer.valueOf(35);
System.out.println(i4);
//输出int类型数据----35
}
}
int和String的相互转换
package myInteger;
public class IntegerAndString {
public static void main(String[] args) {
//int--->String
int i1=10;
String s1="";
s1+=i1;
System.out.println(s1);
int i2=20;
String s2=String.valueOf(i2);
System.out.println(s2);
//String--->int
//String--->Integer--->int通过Integer作为中间量进行转换
String s3="30";
Integer i3=Integer.valueOf(s3);
int x=i3.intValue();
System.out.println(x);
//String--->int直接转换
String s4="40";
int i4=Integer.parseInt(s4);
System.out.println(i4);
}
}
String类中切割字符串关键字:public String[]split(String regex);
String s="91 27 46 38 50";
String [] Array=s.split(" ");
装箱、拆箱:
装箱、自动装箱;拆箱、自动拆箱;
package myInteger002;
public class IntegerDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer i=100;//自动装箱
Integer ii=Integer.valueOf(100);//装箱
ii+=10;//自动拆箱
ii=ii.intValue()+10;//拆箱
}
}
*在使用包装类类型时,如果做操作,最好判断是否为null,只要是对象,在使用前都要进行不为null的判断。
6、Date类
Date类:
Date();
Date(long date);
public long getTime();
public void setTime(long time);
package myDate001;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
Date d1=new Date();
System.out.println(d1);
//获取当前时间,重写toString();
System.out.println("------------");
long date=1000*60*60;
Date d2=new Date(0);
System.out.println(d2);
//以毫秒为单位,中国时间从1970年一月一日八点开始
System.out.println("------------");
Date d3=new Date();
System.out.println(d3.getTime());
//从1970年1月1日到现在的毫秒值
System.out.println("------------");
long time=System.currentTimeMillis();
d3.setTime(time);
System.out.println(d3);
//设置之间,给的是毫秒值
}
}
SimpleDateFormat类
是一个具体类,用于以区域设置敏感的方式格式化和解析日期。
日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从‘A’到‘Z’、‘a’到‘z’引号的字母被解释为表示日期和时间字符串的组件的模式字母。
对应关系:
public SimpleDateFormat();
public SimpleDateFormat(String pattern);![](https://img-blog.csdnimg.cn/direct/4030e69f16d1408cb18c66e5404ecbf4.jpeg)
package myDate002;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) throws ParseException {
Date d1=new Date();
SimpleDateFormat sdf1=new SimpleDateFormat();
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//将Date转换为String类型输出
String s1=sdf1.format(d1);
System.out.println(s1);
//输出2024/3/10 11:10
String s2=sdf2.format(d1);
System.out.println(s2);
//输出2024年03月10日 11:10:19
}
}
格式化(从Date到String)
public final String format(Date date);
将日期格式化为日期/时间字符串
解析(从String到Date)
public Date parse (String source);
从给定字符串的开始解析文本以生成日期。
package myDate002;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) throws ParseException {
//格式化,将Date转换为String
Date d1=new Date();
SimpleDateFormat sdf1=new SimpleDateFormat();
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s1=sdf1.format(d1);
System.out.println(s1);
String s2=sdf2.format(d1);
System.out.println(s2);
System.out.println("--------------");
//解析,将String转化为Date
String ss1="2024-03-10 11:02:26";
SimpleDateFormat sdf3=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//给的模式一定要与字符串一个模式,否则无法解析
Date dd1=sdf3.parse(ss1);
System.out.println(dd1);
}
}
Calendar类
*为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。
Calendar提供了一个类方法getInstance用于获取Calendar对象,日历字段已使用当前日期和时间初始化。
package myDate004;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
//获取对象
Calendar c= Calendar.getInstance();
//多态的形式得到的对象
System.out.println(c);
int y=c.get(Calendar.YEAR);
int M=c.get(Calendar.MONTH)+1;
//月份是从0月开始计算,所以要加一
int d=c.get(Calendar.DATE);
System.out.println(y+"年"+M+"月"+d+"日");
}
}
返回给定的日历字段
public int get(int field);
根据日历的规则,将指定的时间添加或减去给定的日历字段
public abstract void add(int fiel,int amount);
设置当前日历的年月日
public final void set (int year ,int month,int date);
package myDate004;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
//获取对象
Calendar c= Calendar.getInstance();
//三年前的5天后
c.add(Calendar.YEAR, -3);
c.add(Calendar.DATE, 5);
int y=c.get(Calendar.YEAR);
int M=c.get(Calendar.MONTH)+1;
//月份是从0月开始计算,所以要加一
int d=c.get(Calendar.DATE);
System.out.println(y+"年"+M+"月"+d+"日");
System.out.println("-----------------");
c.set(2004,5,8);
y=c.get(Calendar.YEAR);
M=c.get(Calendar.MONTH)+1;
//月份是从0月开始计算,所以会加一
d=c.get(Calendar.DATE);
System.out.println(y+"年"+M+"月"+d+"日");
}
}