- 1. 包装类的基本用法
- 2.自动装箱和拆箱
1. 包装类的基本用法
1.1 为什么需要包装类(Wrapper Class)
Java 并不是纯面向对象的语言。
Java 语言是一个面向对象的语言,但是 Java 中的基本数据类型却是不面向对象的。但是我们在实际使用中经常需要将基本数据转化成对象,便于 操作。比如:集合的操作中。 这时,我们就需要将基本类型数据转化成对象!
1.2 包装类和基本数据类型的对应关系
基本数据类型
包装类
byte ——Byte
boolean—— Boolean
short ——Short
char ——Character
int ——Integer
long ——Long
float ——Float
double ——Double
1.3 包装类的继承关系
![2be1cddee9e0bbbd2f96b9953d452614.png](https://i-blog.csdnimg.cn/blog_migrate/25b5384adcca0dd0f5cef0d2e6ea91b3.jpeg)
1.4 包装类的基本操作 以 Integer 举例
![0611bddb0bc0afd89808e9581da65aac.png](https://i-blog.csdnimg.cn/blog_migrate/d2aa1096b9fc0ec3ba9f5426d2c23d90.jpeg)
Attention:
IntegerClass override equals method and toString method.
2.自动装箱和拆箱
2.1 自动装箱 auto-boxing
基本类型就自动地封装到与它相同的类型的包装类中 Integer i=100;
This is because the compiler calls valueOf()method:
Integer i=Integer.valueOf(100);
Integer 中的缓存类 IntegerCache Cache 为
[-128,127],IntegerCache 有一个静态的 Integer 数组,在类加载时就将-128 到 127 的 Integer 对象创建了,并 保存在 cache 数组中,一旦程序调用 valueOf 方法,如果取 的值是在-128 到 127 之间就直接在 cache 缓存数组中去取 Integer 对象,超出范围就 new 一个对象。
2.2 自动拆箱 unboxing 包装类对象自动转换成基本类型数据
int a=new Integer(100);
编译器为我们添加了
int a=new Integer(100).intValue();
wi’cai’ban’lan’wu
3.String 类底层分析_JDK 源码分析
3.1String 的底层数据结构
String 的底层数据结构是 char 类型的数组 String 的相应方法的实现实际上就是对数组的一个操作
3.2String、StringBuilder、StringBuffer
1、String是字符串常量,StringBuffer和StringBuilder都是字符串变量。后两者的字符内容可变,而前者创建后内容不可变。
2、String不可变是因为在JDK中,String类被声明为一个final类。
3、StringBuffer是线程安全的,而StringBuilder是非线程安全的。
4.StringBuilder_StringBuffer 用法_JDK 底 层源码分析
4.1 可变的字符串
StringBuilder:效率高,安全性低
StringBuffer:效率低,安全性高
4.2StringBuilder 的常用方法的使用
append();//主要用于字符串的追加。
delete();//主要用于删除一段字符,但是
//含头不含尾。这段字符的头字符
//被删
deleteCharAt();//删除指定字符。
insert();//主要用于在数组的指定位置添加一个
//字符
indexof();//主要用于找字符,找到返回数
//字下表,找不到返回-1。
![19c94edc2ebb5501757e4ea11b21e877.png](https://i-blog.csdnimg.cn/blog_migrate/4478d4a726f31aafbf6bccb559b0d670.jpeg)
![c2be1f8dbfda8c0c3e912b5c638df7e9.png](https://i-blog.csdnimg.cn/blog_migrate/ab7d1f34951b794d2df962e93c85c86e.jpeg)
4.3StringBuilder 的 JDK 源码分析
两者的method基本可以通用,只是在效率和安全上有所区别。
5.不可变字符序列和可变字符序列的深入
javap 是 JDK 自带的一个工具,可以反编译,也可以查看 Java
编译器生成的字节码,是分析代的一个好工具。 -c 对代码进行反汇编
- 在等号”=”右侧有variable or “new” keywords,the heap will create new space.
eg:variable
![7a4b20fe7cce58fafa5cf76faf42a31e.png](https://i-blog.csdnimg.cn/blog_migrate/f859689a9445c45bc963998e907c61c3.jpeg)
6.java.util.Date 类
Java 有关获取时间的类:Date类、SimpleDateFormat类和Calendar类
6.1java.util.Date 类
![432e24bcc8ce530c4f9f18164da882ca.png](https://i-blog.csdnimg.cn/blog_migrate/9f29dad5d286dd3a29cef95c41d8f7a4.jpeg)
long getTime() 返回自1970年1月1日以来,由此 Date对象表示的
00:00:00 GMT 的毫秒数
6.2java.sql.Date 类
6.3java.sql.Date 类
6.4java.sql.Timestamp 类
7.DateFormat 和 SimpleDateFormat 类
Java 有关获取时间的类:Date类、SimpleDateFormat类和Calendar类
Date类
完成字符串和时间对象的转换
1)date->string, use format(Date d) method;
2)string->data, use prase(String s) method;
![ddd32c2821a867b0f818d54f74ae2685.png](https://i-blog.csdnimg.cn/blog_migrate/1d314ede3da194985d9d746aaf153a95.jpeg)
![432e24bcc8ce530c4f9f18164da882ca.png](https://i-blog.csdnimg.cn/blog_migrate/9f29dad5d286dd3a29cef95c41d8f7a4.jpeg)
8.Calendar 类
Java 有关获取时间的类:Date类、SimpleDateFormat类和Calendar类
8.1Calendar 类
人们对于时间的认识是:某年某月某日,这样的日期概念。
计算机是 long 类型的数字。通过 Calendar 在二者之间搭起桥 梁!
GregorianCalendar 是 Calendar 的一个具体子类,提供了 世界上大多数国家/地区使用的标准日历系统。 注意:
月份:一月是 0,二月是 1,以此类推,是 12 月是 11 星期:周日是 1,周一是 2,。周六是 7
8.2Calendar 的常用方法
set();get();getTime();setTime();
add(field,amount;)(在年、月、日三个field中选择一个,增加。比如在“日”中,增加10天。)
![74d59eaf02b1d8a99ec0c0812be3b487.png](https://i-blog.csdnimg.cn/blog_migrate/069d78434e044abdb9ea0abb1bdd9664.jpeg)
8.3 使用 Calendar 编写万年历
9.Math 类
9.1Math 类的常用方法
1)Math.abs() //absolute value 绝对值
2)向上取整再转double
![0e3149bf9e3b9efb4b177cfff6133dd8.png](https://i-blog.csdnimg.cn/blog_migrate/c901c5e2e7e5a46d0e7803fb6e9d5fde.jpeg)
![48b97191229e787efb92a2f9c55fe61c.png](https://i-blog.csdnimg.cn/blog_migrate/ad491604c7ad629aa5f2b2f919460d5f.jpeg)
3)
![d050a2c80da0ad0bc81912449cff2f14.png](https://i-blog.csdnimg.cn/blog_migrate/a678b33e98b5ced3b9c76da22085bb2e.jpeg)
4)平方 eg: 5,2=25;
![85f4b6231790732f936ad8e0399ca6f7.png](https://i-blog.csdnimg.cn/blog_migrate/c9234d95a4f363fb5fa38bd3b13edfc9.jpeg)
5)开方
![4f58fd2d0e93ea30176c44a9f03d3650.png](https://i-blog.csdnimg.cn/blog_migrate/58e30c4a6fac3466bab2c2105f9d2791.jpeg)
6)随机数
![3a241084f39388fb337b5652ef3eb881.png](https://i-blog.csdnimg.cn/blog_migrate/57a1ffaf6d4bdf8780a79ea1c0021613.jpeg)
7)
![38b8d1057d27c7c4820d2e1f79a82482.png](https://i-blog.csdnimg.cn/blog_migrate/3ef01c6fed9ba1db1dfaa956d2214a69.jpeg)
9.2 静态导入 JDK1.5
1)java 默认import java.lang.*;
2)JDK1.5之后,We can sue “static import”, this is its format:
![c3556503d90b75eceabaf98b06a25195.png](https://i-blog.csdnimg.cn/blog_migrate/571bc9a4e4f5168deeece3b1afcd846f.jpeg)
When we use this format, we can omit “Math.”;
10.File 类
- 文件和目录路径名的抽象表示形式。一个 File 对象可以代表 一个文件或目录 。
- function:可以实现获取文件和目录属性等功能。可以实现对文件和目录的创建、删除等功能。
- File 不能访问文件内容 。
10.1File 类操作文件
1)file class locat in package:java.io.*;
2)create FileClass object;
![481ea49b74aa52cc374ed0c8ea99c229.png](https://i-blog.csdnimg.cn/blog_migrate/75b851c1002623dc6014e816458272b9.jpeg)
3)method
![38ffe1282298512319ef1e43a95ffdce.png](https://i-blog.csdnimg.cn/blog_migrate/b13d115be9464727a14ad23ee22c9a23.jpeg)
10.2File 类操作目录
11.使用递归算法遍历目录结构和树结构
编写一个程序:以树状结构展现特定的文件夹及其子文件 (夹)(使用递归来做)
12.枚举
12.1 枚举的定义
其值是固定的,我们在使用的时候只能够取特定值中的一个。
使用 enum 关键字 。
12.2 枚举的使用
而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是 public static final 的。可以直接通过枚举类型名直接 使用它们。)
强烈建议当你需要定义一组常量时,使用枚举类型
尽量不要使用枚举的高级特性,事实上高级特性都可以使用普通类来实现,没有必要引入复杂性!
12.3 枚举与类的关系
所有的枚举类型隐性地继承自 java.lang.Enum。(枚举实质上还是类! )
![bf7c4c12cbe96b54ae14a05d1d766ee5.png](https://i-blog.csdnimg.cn/blog_migrate/7bf9bd6e4abdd63b35fabb717f6f765d.jpeg)
System_class
System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。
由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。
1、成员变量
System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。
例如:
System.out.println(“Test”);
该行代码的作用是将字符串”Test”输出到系统的标准输出设备上,也就是显示在屏幕上。
后续在学习完IO相关的知识以后,可以使用System类中的成员方法改变标准输入流等对应的设备,例如可以将标准输出流输出的信息输出到文件内部,从而形成日志文件等。
2、成员方法
System类中提供了一些系统级的操作方法,这些方法实现的功能分别如下:
a、arraycopy方法
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
该方法的作用是数组拷贝,也就是将一个数组中的内容复制到另外一个数组中的指定位置,由于该方法是native方法,所以性能上比使用循环高效。
使用示例:
int[] a = {1,2,3,4};
int[] b = new int[5];
System.arraycopy(a,1,b,3,2);
该代码的作用是将数组a中,从下标为1开始,复制到数组b从下标3开始的位置,总共复制2个。也就是将a[1]复制给b[3],将a[2]复制给b[4],这样经过复制以后数组a中的值不发生变化,而数组b中的值将变成{0,0,0,2,3}。
b、currentTimeMillis方法
public static long currentTimeMillis()
该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。例如:
long l = System. currentTimeMillis();
则获得的将是一个长整型的数字,该数字就是以差值表达的当前时间。
使用该方法获得的时间不够直观,但是却很方便时间的计算。例如,计算程序运行需要的时间则可以使用如下的代码:
long start = System. currentTimeMillis();
for(int i = 0;i < 100000000;i++){
int a = 0;
}
long end = System. currentTimeMillis();
long time = end – start;
则这里变量time的值就代表该代码中间的for循环执行需要的毫秒数,使用这种方式可以测试不同算法的程序的执行效率高低,也可以用于后期线程控制时的精确延时实现。
c、exit方法
public static void exit(int status)
该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。
d、gc方法
public static void gc()
该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。
e、getProperty方法
public static String getProperty(String key)
该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示。
属性名列表
属性名
属性说明
java.version
Java 运行时环境版本
java.home
Java 安装目录
os.name
操作系统的名称
os.version
操作系统的版本
user.name
用户的账户名称
user.home
用户的主目录
user.dir
用户的当前工作目录