- Java API
- Object类
- Class类
- System类
- 封装类
- Integer类
- Character类
- String类
- StringBuffer类
- Math类
- Random类
- TimeZone类
- Date类
- Calendar
Java API:
- 概念:Java应用程序编程接口,即Java API.
使用:java语言属于面向对象的语言,一切皆对象.java程序的所有操作都需要围绕对象进行. - 如何使用一个陌生的类:
- 先尝试模拟java对象
- 操作java对象,调用方法和属性
Object类:
概念:java系统中使用Object类表示对象.Object类是所有java对象的直接或间接父类,是整个java系统的根类[祖先]
-
常用方法:
- clone():
- 作用: 复制对象的数据,粘贴到新的对象中.[1.子类重写clone() 2.被克隆对象支持克隆:实现Cloneable接口]
- 使用:
1.protected native Object clone() 是受保护的,当前包所有类和其他子类.
2.因此clone()权限较小,不方便使用.所以子类需要重写该方法,并扩大权限.
3.java.lang.CloneNotSupportedException: object.User被克隆的对象必须支持被克隆,才能使用clone().被克隆类需要实现Cloneable接口,才能允许被克隆
public interface Cloneable { } 该接口只是作为一个标示,表示可以被克隆.
注意: clone实质是创建一个新对象,将原对象的信息赋给新对象.
- hashCode():
- 作用: 根据对象的内存地址和哈希算法获得对象的哈希值.
- toString():
- 作用: 获得对象的字符串表示形式的值.[类全名@哈希值的16进制值]
- equals():
- 作用: 匹配当前对象和目标对象是否为同一个对象.
- clone():
如何理解一切皆对象?
Object类表示对象,java系统中所有java对象的根类[直接/间接父类]都为Object类.如何确定一个类的父类?
如果一个类没有显示的继承其他类,那么Object类即为该类的父类.如果一个类继承了其他类,那么其他类即为该类的父类.如何比较对象:
java程序中经常需要比较两个对象是否为同一对象,但是java系统不允许直接访问对象的内存地址,因此提供了几种间接访问的方式.
比较对象的方法: toString() hashCode() equals() ==[属于运算符]
直接比较内存地址: == equals()
通过哈希值比较对象: hashCode() toString()问题: 哪种方式比较对象,对象相同时内存地址一定相同?
hashCode(),toString(),equals()都是方法,方法可以被重写[更改比较标准]
==是运算符,所以==不能被更改比较标准. ==永远按照 内存地址 比较对象
Class类:
- 概念:Class类表示 java类 / 图纸 的对象,主要封装了 关于设计图纸[类/java文件]的信息: 类名 父类 含有那些方法 含有那些属性 等等.
- 特点:
- private Class() {} 不能在自定义的java类中创建Class对象.
- Class类提供了三种获得Class对象方式: 对象.getClass() 类名.class() Class.forName()
- 常用方法:
- getName(): 获得设计图纸表示的类的类全名
- getSimpleName(): 获得设计图纸表示的类的类名
- isInterface(): 当前设计图纸表示的类是否为接口
- getSuperclass(): 当前设计图纸表示的类的父类图纸对象.
- getDeclaredFields(): 获得设计图纸表示的类中的所有属性
- getDeclaredMethods(): 获得设计图纸表示的类中的所有方法
- getDeclaredConstructors(): 获得设计图纸表示的类中的所有方法
System类:
概念:
System类是java程序中的系统类,主要存储一些系统信息和常用功能-
特性:
- private System() { },无法直接创建对象.
- System类中的所有属性和方法都是静态的,因此可以直接使用 类名调用.
- 提供了标准输入 输出 错误流.
- err():"标准”错误输出流.默认输出为控制台,打印内容因开发工具显示出红色,打印的错误信息输出的时机不固定.
- in(): “标准”输入流。 默认输入源为键盘输入
- out():“标准”输出流。 默认输出为控制台
说明: java的命名规范中,建议所有的常量的字母都必须大写,但是由于历史原因,这三个属性没有大写.
-
常用方法:
- currentTimeMillis(): 返回以毫秒为单位的当前时间.[实质返回 从1970.1.1午夜 到此刻的毫秒数]
作用: 通常可以用于测试程序的性能 - getProperties(): 获得当前的系统属性
- exit(): 终止当前正在运行的 Java 虚拟机.
说明:默认情况下,当程序正常执行结束或出现错误会自动停止Java系统.如果需要手动结束java系统,可以使用此方法. - gc(): 运行垃圾回收器.
- currentTimeMillis(): 返回以毫秒为单位的当前时间.[实质返回 从1970.1.1午夜 到此刻的毫秒数]
Java垃圾回收机制:
当java程序执行时,java系统后台时时监听程序的执行情况.当发现某数据不再被引用/使用时,java系统将尝试回收该数据所占用的系统资源,进行垃圾数据回收.
但是有时候,java系统并不能准备判断数据是否无用,或者及时监视到无效数据. 因此提供了手动启动垃圾回收器的方法--gc().
封装类:
为什么使用封装类:
java中含有8种基本数据类型,但是8种基本数据类型既不是对象,也不面向对象.
java语言属于面向对象语言,为了更加彻底的面向对象,java系统为8种基本数据类型做了封装,产生了8个封装类.封装类:
基本数据类型: byte short int long float double char boolean;
封装类: Byte Short Integer Long Float Double Character Boolean.
总结: 除了int,char,其他基本类型 名称首字母大写 即为 封装类的名字.Number类:
Byte Short Integer Long Float Double都属于数字,java对它们编写了一个父类---Number
Number类主要提供了各种数字类型之间的转换方法.
Integer类:
特性:
Integer对象表示一个数字,创建对象必须说明表示的数字,因此没有提供无参构造方法.常用属性:
取值范围的获得: Integer.MIN_VALUE Integer.MAX_VALUE
占据位数:Integer.size常用方法:
Integer.toBinaryString(2)
Integer.toOctalString(8)
Integer.toHexString(16)拆箱和装箱:
拆箱: 由封装类类型数据 转为 基本数据类型数据
装箱: 由基本数据类型数据 转为 封装类型数据
手动:
手动拆箱: intValue()
手动装箱: valueOf()
自动:
从JDK1.5开始,java系统提供了自动拆箱和自动装箱功能类型转换: [面向对象方式]
Byte Short Integer Long Float Double可以直接转换[8种基本类型中除boolean外,其他类型可以相互转换]
Character类:
概念:
Character类表示char的封装类,Character对象表示一个字符,创建对象必须说明表示的字符,因此没有提供无参构造方法.常用属性:
取值范围的获得: Character.MIN_VALUE Character.MAX_VALUE
占据位数:Character.size常用方法:
isDigit():判断字符是否数字
isLetter():判断字符是否字母
isLetterOrDigit():判断字符是否数字或字母
isUpperCase():判断字符是否大写字母
isLowerCase():判断字符是否小写字母
isSpace/isWhitespace():判断字符是否为空格
toLowerCase():将指定字符转为小写
toUpperCase():将指定字符转为大写
charAt(索引):获得指定索引处的字符
toString():获得字符的字符串格式值拆箱和装箱:[同Integer]
手动拆箱: charValue()
手动装箱: valueOf()
String类:
概念:
字符: 指一个符号[数字,字母,汉字,其他符号等等],java系统中char表示.
字符串[String]: 由多个字符组成,java系统中String类表示.区别:
1.char属于基本数据类型,String属于引用类型.[String类,属于Java类]
2.char类型数据必须被单引号包裹,String类型数据必须被双引号包裹. 'A' "A"-
String类特点:
- Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现
- 创建String对象: new String("字符串内容") 或 "字符串内容"
- 当使用直接量语法创建String对象时,java系统会先搜索字符串常量池中同一字面值的String对象,找到后将返回该对象,不再重新创建String对象.
- String类重写了equals(),按照字面值比较两个String对象.
- String对象中字符串值确定后将无法更改[底层是一个字符数组类型的常量],如果更改将产生新的字符串对象.
-
String常用的方法:
- equals() String类重写了该方法,只要字面值相同即可.
- concat("字符串")当前字符串与指定内容拼接为新的String对象
- length() 获得字符串的长度(字符个数)
- charAt(索引) 返回指定索引的字符
- indexOf('字符') 从左到右数搜索,返回指定字符的索引
- indexOf("字符串") 从左到右数且从指定的索引处搜索,返回指定字符串的索引
- lastIndexOf 用法同indexOf,只是从后先前搜索
- startsWith("字符串") 配置是否以指定的字符串开头
- endsWith("字符串") 配置是否以指定的字符串结尾
- contains("字符串") 配置是否包含指定的字符串
- replace("目标字符串","替换值") 配置是否包含指定的字符串,如果有,替换字符串为指定内容
- toLowerCase/toUpperCase() 将字符串所有字母替换为小写/大写字母
StringBuffer类:
概念:
String表示字符串,String对象表示的字面值固定后将无法更改,否则将产生新的String对象.
StringBuffer表示带有缓冲区的字符串,StringBuffer表示的字面值可以更改,不产生新的StringBuffer对象.创建StringBuffer:
new StringBuffer();//创建StringBuffer对象,默认缓冲容量为16
new StringBuffer("ABC123");//创建StringBuffer对象,默认缓冲容量为16+内容长度
new StringBuffer(23);//创建StringBuffer对象,默认缓冲容量为指定容量缓冲区容量:
缓冲区字符个数 容量
16>=字符个数>0 16
34>=字符个数>16 34
字符个数>34 34++-
StringBuffer常用方法:
- capacity() 获得StringBuffer对象的缓冲区大小
- length() 获得缓冲区中字符串的长度(字符个数)
- toString() 将StringBuffer对象转为String对象
- append(内容) 将指定内容追加到StringBuffer的末尾
- insert(索引,内容) 将内容插入到指定的索引之后
- setCharAt(索引,字符) 替换指定索引出的字符
- replace(start,end,字符串) 替换索引为start(包含)到end()不包含之间的内容,替换为指定的字符串
- deleteCharAt(索引) 删除缓冲区中字符串的指定索引出的字符
- delete(start,end) 从索引start开始删除 到 索引为end为止
Math类:
概念:
含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数.Math类特点:
1.Math类作用一个公共的工具类,将构造函数私有化,同时将所有属性和方法设置为静态.
使用时,无能/不需要创建对象,可以直接使用Math.属性 Math.方法名()-
常用属性和方法:
- E: 获得自然底数e
- PI: 获得圆周率
- abs(): 求绝对值
- pow(): 求次方
- sqrt(): 开平方
- cbrt(): 开立方
- ceil(): 大于当前小数的最小Double值
- floor():小于当前小数的最大Double值
- min():获得两个数的最小值
- max():获得两个数的最大值
- round():四舍五入
- random():获得随机值
Random类:
- 概念:
Random类主要用于生成各种类型的随机数 - 常用方法:
- nextInt():获得一个int类型的随机数
- nextFloat():获得一个float类型的随机数
- nextDouble():获得一个double类型的随机数
- nextBoolean():获得一个boolean类型的随机数
- nextInt(参数):获得一个指定范围[0-参数之间]的随机数
TimeZone类:
概念:
时区:为了克服时间上的混乱,规定将全球划分为24个时区,使地球上的区域使用同一个时间定义.
Java系统中使用TimeZone表示时区对象,TimeZone是抽象类无法直接创建对象.
Java程序需要在电脑上运行,电脑会因为所在位置不同,采用不同的时区.为了克服/避开时区对程序时间的影响,通常在操作时间或日期时需要设置下程序的时区.-
常用方法:
- TimeZone.getDefault():获得当前主机默认环境下的时区对象
- TimeZone.getAvailableIDs():获得所有受支持的时区的ID的集合
- TimeZone.getTimeZone(ID):获得时区ID对应的时区对象
- 时区对象.getID():获得时区对象的ID
- 时区对象.getDisplayName():获得时区对象的时区名
Date类:
概念:
java系统将Date类作为日期对象,可以操作Date类 获得/设置时间和日期Date类特点:
1.new Date(); //自动将当前系统时间和日期 作为Date对象的初始值
2.Date类中对于操作具体时间的方法都已经过时,被Calendar替代.-
日期格式化类:
- DateFormat[抽象类,不能直接创建对象]
- SimpleDateFormat[属于DateFormat的子类]
日期格式化:
y: 表示年
M: 表示月
d: 表示日
E: 表示星期数
k: 表示小时
m: 表示分钟
s: 表示秒数格式化原理:
java系统将特定的字母替换为 具体的时间值.
代码:
SimpleDateFormat对象.format(Date对象):将Date对象表示日期 格式化为指定格式的时间,并以String方式返回
SimpleDateFormat对象.parse(String对象):将String对象表示内容 按照指定格式 转为 Date对象.
Calendar类:
概念:
TimeZone表示时区,用控制日期/时间位置
Date表示日期和时间,多数方法都已过时,被Calendar替代.
Calendar表示日历,含有具体时间的操作方法.Calendar类特点:
1.Calendar是抽象类,不能直接创建对象
2.通过getInstance()或 new GregorianCalendar()模拟Calendar对象常用属性: 以下属性都用于set()和get()的参数,表示时间类型
YEAR: 年
MONTH: 月
DAY_OF_MONTH: 日
HOUR_OF_DAY: 时
MINUTE: 分
SECOND: 秒
WEEK_OF_YEAR: 一年的第几周
WEEK_OF_MONTH: 一月的第几周
DAY_OF_YEAR: 一年的第几天常用方法:
get(时间类型): 获得指定时间类型的值[获得年份/月/日等等]
set(时间类型,数值):设置指定时间类型的值
add(时间类型,数值):修改指定时间类型的值