一. Object类
二. Scanner类
三. String,StringBuffer与StringBuilder
四. Calendar日历类
五. Date日期类
六. Math数学运算工具类
七. Random随机数类
八. System类
九. 基本类型的包装类
十. 内部类
一. Object类
java语言中所有的类都默认继承于Object类,俗称上帝类;
常用方法:
- getClass() :
public final Class<?> getClass()
返回此对象运行时类的 Class 对象。即当前正在运行的类的class字节文件对象;
如:在一个学生类中使用getClass()方法:
package gwew;
public class Student {
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.getClass());
}
}
//输出结果: class gwew.Student
其结果为:class 包目录.类名
- hashCode()
public int hashCode()
返回该对象的哈希码值;可以理解为类似地址值的数据,实际不是;
package gwew;
public class Student {
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.hashCode());
}
}
//输出结果:2018699554
//是一个int类型的随机数据
- equals()
public boolean equals(Object obj)
用来比较两个类型相同的数据是否相等;在Object类和我们自定义的类中,equals()方法没有重写,比较的是内容是否相等;
但是在其子类,基本上官方写好的常用类都已经重写了equals()方法,比较的是其地址值中存储的内容是否相等;
package gwew;
public class Student {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
Student s3= s2;
System.out.println(s1.equals(s2));//输出结果:false
System.out.println(s3.equals(s2));//输出结果:true
}
}
由于Student类的equals方法没有重写,比较的是地址值是否相等;new的对象,每一个都会在堆中开辟一个空间,所以第一个地址值不相等;而S3=S2,将s2的地址赋值给S3,地址相等所以输出是true;
- toString();
public String toString()
应该返回一个表示当前对象信息的字符串;但是Object中没有重写toString()方法,返回的是一个如下的字符串;
gwew.Student@7de26db8
但是在其官方的子类基本都重写了改方法,返回的是一个表明自己信息的字符串;
二. Scanner类
java.util.Sanner:
Scanner是简单文本扫描器,用于从文本获取数据;我们常用的是从键盘获取数据;
常用方法:
- Scanner(InputStream source)
构造方法之一,用来从键盘输入数据,其形参通常用System.in返回;
public static final InputStream in
System类中的一个字段,表示标准输入流,其返回结果是一个InputStream 类型的数据; - hasNextXxx()
public boolean hasNextInt()
public boolean hasNextLine()
public boolean hasNextShort()
public boolean hasNextDouble()
判断下一个接收到的数据是否为指定类型,是返回true,通常用于键盘输入时的类型判断; - nextXxx()
public int nextInt()
public String nextString()
public short nextShort()
public double nextDouble()
public long nextlong()
返回一个接收到的指定数据类型的数据,如果接收到的数据与方法不匹配会报错,通常与hasNextXxx()连用;如下:
package gwew;
import java.util.Scanner;
public class Student {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = 0;
if (sc.hasNextInt()) {
a = sc.nextInt();
}
}
}
三. String,StringBuffer与StringBuilder
四. Calendar日历类
java.util.Calendar
Calendar是一个抽象类,提供了获取年,月,日,时分秒等等相关日历时间.
Calendar类的构造方法是私有的,但是它的getInstance()静态方法可以返回一个具体的子类,间接的实例化.
虽然与单例模式获得对象的方式一样但是Calender并不是单例设计模式.
public static Calendar getInstance()
其默认时间就是当前系统的时间;
- Calendar中常用静态字段:
字段field | 说明 |
YEAR | 年 |
MONTH | 月//注意:Calendar中的月份是0~11,获得结果+1为当前月份 |
Date/DAY_OF_MONTH | 一个月中的第几天 |
DAY_OF_WEEK | 一个星期中的第几天 |
HOUR_OF_DAY | 一天中的第几个小时 |
HOUR | 上午或下午的第几个小时 |
MINUTE | 分钟 |
- Calendar中常用方法:
字段field | 说明 |
public int get(int field) | 获取日历字段的内容. |
public void set(int field, int value) | 修改指定字段的内容. |
public void set(int year, int month, int date) | 方法重构,修改年月日 |
public void set(int year, int month, int date, int hourOfDay, int minute) | 方法重构,修改月日时分 |
public abstract void add(int field, int amount) | 为指定字段设置偏移量 |
public final Date getTime() | 获取当前日历的时间,单位为Date |
public final void setTime(Date date) | 设置当前日历的时间,单位为Date |
public long getTimeInMillis() | 获得当前日历的毫秒值 |
public void setTimeInMillis(long millis) | 设置当前日历的毫秒值 |
public class CalendarDemo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance() ; //这个方法中:return new 抽象类的子类();
int year = c.get(Calendar.YEAR) ;// public static final int YEAR:年
int month = c.get(Calendar.MONTH) ;
int date = c.get(Calendar.DATE) ;
System.out.println(year+"-"+(month+1)+"-"+date);
}
}
五. Date日期类
java.util.Date
Date日期类,一个特定的瞬间,精确到毫秒.
- 常用方法:
方法 | 说明 |
public Date() | 获取当前系统的时间,类型为Date |
public Date(long date) | 用指定的long类型构造一个Date |
public long getTime() | 将Date类型的时间转化为long类型 |
public long setTime() | 设置此日期,单位为毫秒值 |
Date日期类主要用于获取系统的时间,与Calendar相比功能弱一点,在获取时间方面,官方推荐使用Calendar类.Date类很多方法都已过时.
我觉得Date主要用于简单的日期操作,在需求简单时,使用Date类就可以完成时,没必要去选择Calender类时,使用Date类.不过Date类可以完成的功能,Calender类都可以完成.
Date与String的相互转换,需要利用Format抽象类作为中介,Format抽象类提供了敏感环境语言与String类的格式转换,如消息,日期,数字.至于什么是敏感环境语言,我也不太清楚.
我们要使用的是Format的子类,DateFormat类来进行日期和文本的转换,而DateFormat的子类,SimpleDateFormat是用与语言环境有关的方式来解析
Format类有几个重要的方法:
方法 | 说明 |
public final String format(Object obj) | 将其他类型的数据转化为字符串类型,按照调用者的格式. |
public Object parseObject(String source) | 将给定格式的字符串转换为其他类型 |
DateFormat类的方法
方法 | 说明 |
public final String format(Date date) | 将日期类型转化为字符串类型,按照调用者的格式. |
public Date parse(String source) | 将给定格式的字符串转换为日期类型 |
- 格式化:Date类转化为文本格式
1)按照自定义的字符串格式创建SimpleDateForma对象;
2)使用这个对象调用format()方法,返回值就是String格式
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
String s =sdf.format(new Date());
- 解析:将字符串解析为Date类型
1)按照自定义的格式创建一个SimpleDateFormat类对象
2)使用这个对象调用parse方法,返回值为Date类型的数据
注意:自定义的格式与parse中的字符串参数格式必须一致
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse("2020-08-17");
六. Math数学运算工具类
作为一个工具类,提供的方法都是静态的,数学运算工具类,提供了实用的数学运算方法.
方法 | 说明 |
public static int abs(int a) | 绝对值 |
public static double ceil(double a) | 向上取整 |
public static double floor(double a) | 向下取整 |
public static int max(int a, int b) | 取两个数据的较大值 |
public static int min(int a, int b) | 取两个数据的较小值 |
public static double pow(double a, double b) | a的b次幂 |
public static double sqrt(double a) | 对一个正整数开平方根 |
public static long round(double a) | 四舍五入 |
public static double random() | 0.0-1.0之间的随机数(不包含1.0) (使用居多) |
Math.random()方法获取一个10到20的随机数:
int n =(int)(10+Math.random()*(20-10+1));
七. Random随机数类
Random类用于生产各种类型的随机数,但是只能设置上限,不能设置下限,也就是下限固定为0.
Random类常用方法
方法 | 说明 |
public Random() | 构造方法 |
public int nextInt(int n) | 随机生产一个数,范围为[0,n); |
public double nextDouble() | 随机生产一个数,范围为[0,n); |
Random类生产一个0到20的随机数:
Random r =new Random();
int n =r.nextInt(20+1);
八. System类
System 类不能被实例化,它包含一些有用的类字段和方法.
字段 | 说明 |
public static final PrintStream err | 标准错误流 |
public static final InputStream in | 标准输入流 |
public static final PrintStream out | 标准输入流 |
方法 | 说明 |
public static void gc() | 手动开启垃圾回收器,jvm会将内存中不用的对象给回收掉,实质调用finalize()方法 |
public static void exit(int status) | 终止当前运行的java虚拟机 |
public static long currentTimeMillis() | 返回当前系统的毫秒值 |
public static void arraycopy(Object src,int srcPos,Object dest,int destPos, int length) | 从指定源数组中的某个位置开始到指定目标数组的某个位置结束,指定多个长度 |
arraycopy参数代表的意义:
- 参数1:源数组对象
- 参数2:源数组中的某个索引值
- 参数3:目标数组对象
- 参数4:目标数组对象的某个索引值
- 参数5:复制的长度
九. 基本类型的包装类
- Integer
Integer 提供了与字符串相互转换的方法
字段 | 说明 |
MAX_VALUE | 它表示 int 类型能够表示的最大值。 |
MIN_VALUE | 它表示 int 类型能够表示的最小值。 |
方法 | 说明 |
public static int parseInt(String s) | 将字符串转换为int类型 |
public static Integer valueOf(String s) | 将字符串转换为Integer对象 |
int n = Integer.parseInt("100");
Integer ng = Integer.valueOf("100");
- Character
Character类提供了字符判断功能
方法 | 说明 |
public static boolean isDigit(char ch) | 判断当前字符是否为数字字符 |
public static boolean isUpperCase(char ch) | 判断当前字符是否为大写字母字符 |
public static boolean isLowerCase(char ch) | 判断当前字符是否为小写字母字 |
十. 内部类
- 内部类是定义在类中的类,分为成员内部类,局部内部类,静态内部类 和匿名内部类
1.成员内部类
- 成员内部类定义在类中的成员位置;
- 成员内部类中的对象可以随心所欲的访问外部类的成员;
- 成员内部类中的变量名如果和外部类中的变量名相同的话,会发生隐藏现象;this.变量名 访问的是内部类的变量; 外部类名.this.变量名; 访问的是外部类的成员变量;
- 外部类的方法要访问内部类的成员时,需要创建对象,用对象去访问.
Inner i=new Inner(); - 在其他类去创建成员内部类对象时,需要提前创建一个外部类对象:
外部类名.内部类名 对象名 = 外部类对象().内部类对象();
Outter.Inner i = new outter.new Inner();
2.局部内部类
- 局部内部类是定义在类的方法中的类
- 局部内部类可以直接访问外部类的成员,包括私有;
- 局部内部类访问局部变量时,需要加上final修饰,否则编译失败;
(局部变量随着方法调用完毕而消失,而当前这个局部变量被局部内部类的对象访问,在堆内存中对象不会被立即回收,它还在继续使用这个局部变量,需要将这个变量定义为常量,常驻内存,以便局部内部类对象对该局部变量的访问) - 局部内部类类似成员变量,不可以加 public、protected、private 以及 static 修饰符
- 外部类的方法如果要访问局部内部类的成员,依然要创建局部内部类的对象;
- 其他类不能直接访问局部内部类,但是可以通过创建外部类对象,调用局部内部类所在的方法;
3.静态内部类
- 静态内部类是成员内部类加上static 修饰符后的类
- 静态内部类只能访问外部类的静态成员;
- 同样静态变量和方法不可以定义在成员内部类中,但是可以定义在静态内部类中;
- 静态内部类类似于静态方法,不需要依靠外部类的对象;在没有外部类对象的时候依然可以创建静态内部类对象
- 其他类创建静态内部类的对象:
外部类名.内部类名 对象名 = new 外部类名.内部类名() ;
Outer.Inner i = new Outer.Inner() ;
4.匿名内部类
- 匿名内部类是局部内部类的一种简化形式;
- 匿名内部类是唯一一种没有构造器的类
- 匿名内部类的语法:
new 接口名(){
重写方法;
}; - 其中接口名可以换成抽象类名;匿名内部类实际上是接口的子实现类的对象,使用匿名内部类可以省略子实现类;
- 匿名内部类经常用于方法参数的传递,或者接口的方法重写并调用;