您的位置 首页 java

JAVA学习day06

  • 推荐书籍
  • Java编程思想:要有一定的基础。
  • 疯狂Java讲义:零基础的

知识回顾

  • 异常的概念
  • 在程序运行过程中或编译过程中出现的问题。
  • 错误的概念
  • 在程序运行过程中出现的问题。
  • 一般不会处理,只能修改错误行的代码。
  • 异常的继承体系
  • Throwable:错误和异常的父类
  • Error:错误
  • Exception:异常
  • 运行时异常概述
  • 只要是RuntimeException或其子类都属于运行时异常
  • 运行时异常的特点
  • 如果方法体中抛出的异常是运行时异常,则可以处理,可以不处理。
  • 如果方法声明上声明的异常是运行时异常,则调用者可以处理,也可以不处理。
  • 编译时异常概述
  • 除了运行时异常以为的所有异常都属于编译时异常。
  • 编译时异常的特点
  • 如果方法体中抛出的异常是编译时异常,则必须要处理。
  • 如果方法声明上声明的异常是编译时异常,则要求调用者一定要处理。
  • 捕获处理
 
try{
 // 可能出现异常的代码
}catch(异常类名 变量名){
 // 异常出现后要执行的代码
}...
catch(异常类名 变量名) {
 // 异常出现后要执行的代码
} finally{
 // 一定要执行的代码
}
 
  • 抛出处理
 
throw:使用在方法体中,用来抛出一个异常对象,将异常对象抛给方法调用者,并结束当前方法的运行。
throws:使用方法声明上,用来告诉方法调用者当前方法可能会出现的异常。
​
throw new 异常类名(异常信息);
throws 异常类名,异常类名..
 
  • 自定义异常
 
异常类名:XxxxException
继承关系:
 Exception:要求一定要处理的
 RuntimeException:不要求调用者一定要处理的
 构造方法 
 无参和有参
 

学习目标

  • 能够使用日期类输出当前的日期
  • 能够说出将日期格式化成 字符串 的方法
  • 说出将字符串转换成日期的方法
  • 写出基本数据类型对应的八种包装类
  • 能够说出拆箱装箱概念
  • 能够System类常见方法
  • 能够使用Math类进行数学运算
  • 能够 正则表达式 验证11位手机号码
  • 能够说出字符串的split方法作用

今天内容

  • Date,DataFormat,Calendar,System,Math
  • 包装类和正则表达式

1. Date类概述

 
Date类的概述
 * java.util.Date:时间日期类
 * 用来获得日期时间。
Date类的构造方法
 * Date():获得当前系统时间
 * Date(long date) 根据指定的毫秒值获得日期对象
Date类的成员方法
 * long getTime():获得当前时间的毫秒值
​
时间零点的概念
 * 时间零点:1970.1.1 00:00:00 
毫秒值的概念
 * 1秒 = 1000毫秒
 
  • 示例代码
 
public class DateDemo01 {
 public static void main(String[] args) {
 // 创建日期对象
 Date d = new Date();
 // Thu Apr 12 09:09:23 CST 2018
 
 // 2018-04-12 09:09:23
 // 2018/04/12 09:09:23 
 // 2018年04月12日 09:09:23
 System.out.println(d.getTime()); // 1523495535467
 
 // 创建日期对象
 Date d2 = new Date(1000);
 // Thu Jan 01 00:00:01 CST 1970
 System.out.println(d2);
 }
}
 

2. 日期对象转换字符串

 
DateFormat类概述
 是一个抽象类,不能直接创建该类的对象,只能创建子类对象。
 DateFormat的子类
 * SimpleDateFormat
​
SimpleDateFormat类常见操作
 * 将日期对象转换为字符串
 * 将字符串转换为日期对象
​
SimpleDateFormat类常用构造方法
 * SimpleDateFormat(String pattern) :使用指定的日期格式创建格式化对象
 * SimpleDateFormat():使用默认的日期格式创建格式化对象
​
SimpleDateFormat类常用成员方法
 * String format(Date d);将日期对象格式化为字符串 
 * Date parse(String dateStr);将字符串解析为日期对象
 * void applyPattern(String pattern);修改日期模式
​
日期模式
 * yyyy 年
 * MM 月
 * dd 日
 * HH 时 HH:24小时制 hh:12小时制
 * mm 分
 * ss 秒
 
  • SimpleDateFormat类将日期对象转换为字符串的步骤
  • 获得日期对象
  • 创建日期格式化对象SimpleDateFormat并指定日期模式。
  • 调用日期格式化对象的format方法将日期对象转换为字符串。
 
​
public class DateFormatDemo01 {
 public static void main(String[] args) {
 // 创建日期对象
 Date d = new Date();
 // 2018-04-12 09:09:23
 // 2018/04/12 09:09:23 
 // 2018年04月12日 09:09:23
 
 // 创建日期格式化对象:使用默认的日期默认
 // SimpleDateFormat sdf = new SimpleDateFormat();
 // 创建日期格式化对象:指定日期模式
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
 // 格式化日期为字符串
 String str = sdf.format(d);
 System.out.println(str);
 }
}
 

3. 字符串转成日期对象

  • SimpleDateFormat类将字符串转换为日期对象
  • 创建日期格式化对象并指定日期模式
  • 调用日期格式化对象的parse方法传入时间字符串得到日期对象。
  • Date parse(String dateStr); 将字符串解析为日期对象
 
/**
 注意事项
 * 日期模式要和时间字符串格式要一致,否则无法转换。
 */public class DateFormatDemo02 {
 public static void main(String[] args) throws ParseException {
 // 日期字符串
 String dateStr = "2018/10/10 10:10:10";
 // 创建日期格式化对象并指定日期模式
 // SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
 
 /*
 SimpleDateFormat sdf = new SimpleDateFormat();
 // 修改默认的日期模式
 sdf.applyPattern("yyyy/MM/dd HH:mm:ss");
 */ // 使用DateFormat的静态方法获得日期格式化对象
 SimpleDateFormat sdf = (SimpleDateFormat)DateFormat.getDateInstance(); // SimpleDateFormat
 // 修改默认的日期模式
 sdf.applyPattern("yyyy/MM/dd HH:mm:ss");
 System.out.println(sdf);
 // 将字符串转换为日期对象
 Date d = sdf.parse(dateStr);
 System.out.println(d);
 }
}
 

4. Calendar类的使用

 
Calendar类概述
 * 是一个抽象类,不能直接创建对象的。
 
如何创建日历对象
 * 通过Calender类的静态方法创建日历对象
 * static Calendar getInstance() 
​
Calendar类的常用方法
 * int get(int field); 
 * 根据日历字段获得对应的值 
 * void add(int field,int value)
 * 将指定日历字段的值在原值的基础上偏移一个值
 * 负数,则向前偏移
 * 正式,则向后偏移
​
 * void set(int field, int value)
 * 设置指定日历字段的值为指定的值 
​
 * void set(int year,int month, int date)
 * 设置日历时间为指定的年月日
​
 * Date getTime(); 获得日期对象
 * long getTimeInMillis(); 获得时间的毫秒值。
​
注意事项
 * 获得月份需要加一才是我们正确的月份,因为月份默认是0到11
 
  • 示例代码
 
public class CalendarDemo01 {
 public static void main(String[] args) {
 // 获得日历对象
 Calendar c = Calendar.getInstance();
 // 获得日期对象
 Date d = c.getTime();
 
 // 直接通过日历对象获得毫秒值
 long time = c.getTimeInMillis();
 System.out.println(time);
 System.out.println(d.getTime());
 // 修改年月份
 c.set(2000, 12, 20); 
 
 // 修改年份
 // c.add(Calendar.YEAR, -1);
 // 修改月份
 // c.add(Calendar.MONTH, 10); 
 // 修改日
 // c.add(Calendar.DATE, 20); 
 
 // c.set(Calendar.YEAR, 2020);
 
 // 根据日历字段获得对应的值
 System.out.println(c.get(Calendar.YEAR));
 System.out.println(c.get(Calendar.MONTH) + 1);
 System.out.println(c.get(Calendar.DATE));
 System.out.println(c.get(Calendar.HOUR));
 System.out.println(c.get(Calendar.MINUTE));
 System.out.println(c.get(Calendar.SECOND));
 }
}
 

5. Calendar练习

  • 求出今天距离2020年1月1日还有多少天
 
public class CalendarDemo02 {
 public static void main(String[] args) {
 // 创建日历对象
 Calendar c = Calendar.getInstance();
 // 获得当前时间的毫秒值
 long today = c.getTimeInMillis();
 // 修改日历时间
 c.set(2020, 0, 1);
 // 获得2020年1月1日的毫秒值
 long future = c.getTimeInMillis();
 // 两个毫秒值相减
 long distance = future - today;
 System.out.println("还有"+(distance/1000/3600/24)+"天");
 
 }
}
 

6. Math类概述

6.1 常用方法

 
static double sqrt(double d):返回参数的平方根的值
static double pow(double a, double b):返回a的b次方的值
static double floor(double d):返回小于等于参数d的最大整数
static double ceil(double d): 返回大于等于参数d的最小整数
static int abs(int i): 返回参数i的绝对值
Math.random():返回0到1的随机数: [0,1),本质还是使用Random类产生随机数
Math.round(double d):四舍五入
 

6.2 演示代码

 
public class MathDemo {
 public static void main(String[] args) {
 /*System.out.println(Math.sqrt(9));
 System.out.println(Math.sqrt(4));
 System.out.println(Math.abs(-4));
 System.out.println(Math.abs(4));
 
 System.out.println(Math.pow(2, 4));*/ 
 System.out.println(Math.floor(2.0));
 System.out.println(Math.floor(2.4));
 System.out.println(Math.floor(2.9));
 System.out.println("---------------");
 System.out.println(Math.ceil(2.0000));
 System.out.println(Math.ceil(2.4));
 System.out.println(Math.ceil(2.9));
 
 System.out.println(Math.random());
 System.out.println(Math.round(4.45));
 System.out.println(Math.round(4.5));
 }
}
 

7. System类概述

7.1 常用方法

 
* static void arraycopy(Object src, int srcPos, 
 Object dest, int destPos, int length) 
 * 数组复制
 * src:源数组
 * srcPos:源数组的起始索引
 * dest:目标数组
 * destPos:目标数组的起始索引
 * length:复制几个元素
​
* static Properties getProperties() 
 * 获得操作系统的属性:比如操作系统名称
* static long currentTimeMillis() 
 * 获得当前时间的毫秒值 
* static void exit(int status) 
 * 退出JVM,终止程序运行。
* static void gc(): garbage collect
 * 通知垃圾回收器回收垃圾对象,仅仅是通知,未必会真正执行回收操作。 
 

7.2 演示代码

 
public class SystemDemo {
 public static void main(String[] args) {
 // 获得操作系统的属性
 Properties pro = System.getProperties();
 System.out.println(pro.getProperty("os.name"));
 }
 
 /**
 * 数组拷贝方法:arraycopy
 */ public static void test03() {
 // 源数组
 int[] src = {1,2,3,4,5,6};
 // 目标数组
 int[] dest = new int[6];
 System.out.println(Arrays. toString (dest));
 // 数组复制
 // System.arraycopy(src, 0, dest, 0, 6);
 // 复制前三个
 // System.arraycopy(src, 0, dest, 0, 3);
 // System.arraycopy(src, 2, dest, 0, 3);
 // System.arraycopy(src,3, dest, 4, 3);
 System.out.println(Arrays.toString(dest));
 }
 
 /**
 static void gc(): garbage collect
 * 通知垃圾回收器回收垃圾对象,仅仅是通知,未必会真正执行回收操作。 
 */ public static void test02() {
 for (int index = 0; index < 100; index++) {
 // 创建学生对象
 new Student();
 // 通过垃圾回收器回收垃圾
 System.gc();
 }
 }
 
 /**
 static long currentTimeMillis() 
 * 获得当前时间的毫秒值 
 */ public static void test01() {
 long start = System.currentTimeMillis();
 for (int i = 0; i < 1000000; i++) {
 System.out.println(i);
 }
 System.out.println(System.currentTimeMillis() - start);
 }
}
 

8. 基本数据类型包装类

  • 场景
  • 通过文本框获得用户输入的数字数据,因为文本框里面是书写文本数据的,所以后台得到的都是字符串。如果想要对字符串中的数字进行运算,必须将字符串转换成数字。
  • 怎么解决上述出现的问题?
  • Java为每一种基本类型提供了类,这些类称为基本数据类型包装类。
  • 每种包装类都提供相关的方法操作基本类型数据。
  • 包装类常见操作有
  • 将字符串转换为对应的基本数据类型。
  • 将基本数据类型转换为字符串类型。
  • 八种基本类型对应的包装类
 
char Character
int  Integer 
byte Byte
short Short
long Long
float Float
double Double
boolean Boolean
 

9. Integer包装类的概述

  • 构造方法
  • Integer(int value);将一个整数value转换成整型包装类对象。
  • Integer(String s);将一个字符串数值转换成整型包装类对象。
  • 成员方法
  • int intValue();将构造方法中的字符串转换成基本类型。
  • static int parseInt();把字符串转换为int值。
  • static String toString(int i);将整数i转换成字符串
  • 静态成员变量
  • Integer.MAX_VALUE:整数最大值
  • Integer.MIN_VALUE:整数最小值
  • 演示代码
 
public class IntegerDemo {
 public static void main(String[] args) {
 // 创建整型包装类对象
 Integer in = new Integer("100");
 // 获得基本数据类型
 int price = in.intValue();
 System.out.println(price);
 
 
 // 直接将字符串数字转换整数
 System.out.println(Integer.parseInt("200"));
 System.out.println(Integer.toString(100)+1); 
 System.out.println(100+"");
 
 Double dd = new Double("0.9");
 dd.doubleValue();
 
 double d = Double.parseDouble("0.9");
 System.out.println(d+1);
 
 String f = "true";
 boolean ff = Boolean.parseBoolean(f);
 if(ff) {
 System.out.println("条件成立");
 }
 System.out.println(Long.MAX_VALUE);
 System.out.println(Long.MIN_VALUE);
 
 }
}
 

10. 自动装箱和自动拆箱

 
自动装箱和自动拆箱的概述
 * JDK1.5的新特性。
自动装箱的概念
 * 自动将基本数据类型转换为对应的包装类类型的过程。
自动拆箱的概念
 * 自动将包装类类型转换为对应基本数据类型的过程。
注意事项
 * 自动装箱和自动拆箱是编译器自动完成的,在编译期会根据语法决定是否需要进行装箱和拆箱。
 
  • 示例代码
 
public class Demo01 {
 public static void main(String[] args) {
 int a = 100; // 基本数据类型
 Integer b = new Integer(200);// 包装类类型
 
 // 在JDK1.5之前
 // int result1 = a + b.intValue();
 // 在JDK1.5之后
 int result = a + b; // 100 + b.intValue(); 自动拆箱
 
 
 // Integer sum = Integer.valueOf(a + b.intValue()) 自动拆箱和自动装箱
 Integer sum = a + b;
 System.out.println(result);
 
 
 // 创建集合:添加元素时,设计到自动装箱
 ArrayList<Integer> list= new ArrayList<>();
 list.add(111); // list.add(Integer.valueOf(111));
 list.add(222);
 list.add(new Integer(111));
 list.add(Integer.valueOf(111));
 
 int num = list.get(0); // 自动拆箱 
 }
}
 

11. 正则表达式的概念和作用

11.1 什么是正则表达式

  • 一个用来定义规则的字符串

11.2 正则表达式的作用

  • 用来校验某一个字符串是否符合规则。

11.3正则表达式语法规则

  • 字符
 
x 匹配字符x 
\t 匹配制表符
\n 匹配换行
\r 匹配回车
 
  • 字符类[记忆]
 
[abc] 匹配abc中任意一个字符 
[^abc] 匹配除abc以为的任意一个字符
[a-zA-Z] 匹配任意一个字母
[0-9] 匹配任意一个数字
[a-zA-Z_0-9] 匹配所有字母,数字,下划线中任意一个。
* 中括号中可以放n个字符,但匹配时只能匹配其中任意一个。
 
  • 预定义字符类[记忆]
 
. 通配符,可以匹配任意一个字符(除\n和\r) 
\d 等价[0-9] 匹配任意一个数字
\w 等价[a-zA-Z_0-9] 匹配所有字母,数字,下划线中任意一个。
\s 空白字符 空格,制表符
 
  • 数量词[记忆]
 
X? X 可以出现0或1次
X* X 可以出现任意次
X+ X 至少要出现1次
X{n} X 刚好出现n次
X{n,} X 至少要出现n次
X{n,m} X 至少出现n次,至多出现m次 [n,m]
 

12. 正则表达式练习

12.1 匹配练习

  • 检查手机号码是否合法
  • 规则:1开头,第二位可以是34578 后面9位数0-9
  • 正则表达式:
  • 检查QQ是否合法
  • 规则:0不能开头,全是数字,位数5到10位
  • 正则表达式:
 
public class RegexDemo03 {
 public static void main(String[] args) {
 // 手机号码
 String phone = "18434287735";
 // 正则规则
 String regex = "1[34578][0-9]{9}";
 System.out.println(phone.matches(regex));
 
 System.out.println("13456423451".matches("[1-9]\\d{4,9}"));
 }
}
 

12.2 切割练习

  • 2016-10-24 按照-切割字符串
  • 18 22 44 66 按照空格切割字符串
  • 192.168.1.204 按照点切割字符串
 
public class RegexDemo02 {
 public static void main(String[] args) {
 System.out.println(Arrays.toString("2016-10-24".split("-")));
 System.out.println(Arrays.toString("18 22 44 66".split("\\s")));
 System.out.println(Arrays.toString("192.168.1.204".split("\\.")));
 }
}
 

12.3 替换练习

  • 例子:
  • “Hello12345World6789012” 将所有数字替换为 “#”
 
public class RegexDemo04 {
 public static void main(String[] args) {
 String str = "Hello12345World6789012";
 // 将字符串str中符合正则规则的子串替换为 #
 // String result = str.replaceAll("\\d", "#");
 String result = str.replaceAll("\\d+", "#");
 System.out.println(str);
 System.out.println(result);
 }
}
 

13. String类与正则相关的三个方法

 
boolean matches(String 正则的规则)
 验证字符串是否符合正则规则 
String[] split(String 正则的规则)
 使用正则规则切割字符串
String replaceAll(String 正则规则,String 字符串)
 将字符串中符合正则规则的子串替换为后面的字符串
 

文章来源:智云一二三科技

文章标题:JAVA学习day06

文章地址:https://www.zhihuclub.com/188506.shtml

关于作者: 智云科技

热门文章

网站地图