System:
----------------------------------------分割线----------------------------------------------
System:
package com.anonymous.javase.day04;
public class Demo3 {
protected void finalize() {
System.out.println("我被回收了");
}
//System
public static void main(String[] args) {
//返回当前系统时间(毫秒数)
/**
* 一般使用在数据库中的某个文件的创建时间和保存时间
*/
long times = System.currentTimeMillis();
System.out.println(times);
//垃圾收集器运行(表示强制回收)(用的很少)
new Demo3();
new Demo3();
System.gc();
//底层默认调用Runtime中的gc()方法
/**
* 底层Runtime对象不可以创建对象,这说明一个问题,只要是某个类中,没有提供
* 给我们创建的,说明一定采用单利模式,
* 那么该类中一定有一个静态的实例可以返回对象,
* 实例的命名一般是get....();
*/
//终止当前的虚拟机
/**
* 很少用,一般用于一些程序运行不了,就终止该程序运行
*/
//System.exit(-1);(避免影响后面的程序)
}
}
Math/BigDecimal/BigInteger(这里不演示BigInteger)(很少很少用到一般的long就足够处理了)
package com.anonymous.javase.day04;
import java.math.BigDecimal;
public class Demo4 {
/* 和数学常用三个相关的常用类:
1.Math:Math 类包含用于执行基本数学运算的方法,
如初等指数、对数、平方根和三角函数。
2.BigDecimal:float和double都不能表示精确的小数,
此时使用BigDecimal,用于处理金钱的精确度来表示
3.BigInteger:表示大型整数,当两个long相加时,
long储存不了数据此时使用BigInteger来储存
加减乘除和BigDecimal来表示*/
public static void main(String[] args) {
//Math:
//返回绝对值:
int abs = Math.abs(-34);
System.out.println(abs);//34
//返回n次幂
/**
* 如果出现数据过大,而double无法装载,
* 将包装数据之后再进行输出
*/
double pow = Math.pow(4, 4);
System.out.println(pow);//256.0
//最大数&最小数
int max = Math.max(34, 45);
System.out.println(max);//45
int min = Math.min(34, 11);
System.out.println(min);//11
//随机数
double random = Math.random()*10;//范围[0-1]
double floor = Math.floor(random+1);
System.out.println(floor);
//向下取整
/**
* 去掉小数点
*/
double floor2 = Math.floor(23.9);
double floor3 = Math.floor(23.1);
System.out.println(floor2);//23
System.out.println(floor3);//23
//向上取整
/**
* 去掉小数点+1
*/
double ceil = Math.ceil(34.1);
double ceil2 = Math.ceil(34.9);
System.out.println(ceil);//34
System.out.println(ceil2);//34
//四舍五入
long round = Math.round(34.1);
long round2 = Math.round(34.9);
System.out.println(round);//34
System.out.println(round2);//35
/*-----------------------------------------------*/
double d1 = 0.01;
double d2 = 0.09;
System.out.println(d1+d2);
//0.09999999999999999
//可以利用BigDecimal解决数据混乱问题
BigDecimal b1 = new BigDecimal(0.01);
BigDecimal b2 = new BigDecimal(0.09);
BigDecimal add = b1.add(b2);
System.out.println(add);
//0.09999999999999999687749774324174723005853593349456787109375
/**
* 怎么数据还是出现错误,难道这个类有问题?
* 其实是使用错误.
* BigDecimal中有一句:
* 此构造方法的结果有一定的不可预知性。
* 有人可能认为在 Java 中写入 new BigDecimal(0.1)
* 所创建的 BigDecimal 正好等于 0.1(非标度值 1,其标度为 1),
* 但是它实际上等于 0.1000000000000000055511151231257827021181583404541015625。
* 这是因为 0.1 无法准确地表示为 double(或者说对于该情况,
* 不能表示为任何有限长度的二进制小数)。这样,
* 传入 到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。
另一方面,String 构造方法是完全可预知的:
写入 new BigDecimal("0.1") 将创建一个 BigDecimal,
它正好 等于预期的 0.1。因此,比较而言,
通常建议优先使用 String 构造方法。
*/
/*上面说的就是直接传入duoble或者float类型的数据,就会出现数据不能预知的效果,
* 需要将数据转换为字符串之后,在将数据进行运算
*/
BigDecimal b3 = new BigDecimal("0.01");
BigDecimal b4 = new BigDecimal("0.09");
//相加
BigDecimal add2 = b3.add(b4);
System.out.println(add2);//0.10
//相乘
BigDecimal multiply = b3.multiply(b4);
System.out.println(multiply);//0.0009
//相除
BigDecimal divide = b4.divide(b3);
//如果使用b3除b4.会出现无限循环小数,计算机不可控制,就会报错(可以将数据处理在输出)
System.out.println(divide);//9
//相减
BigDecimal subtract = b3.subtract(b4);
System.out.println(subtract);//-0.08
}
}
package com.anonymous.javase.day04;
public class Demo5 {
public static void main(String[] args) {
//String转换为byte
System.out.println("String-->byte".getBytes());//[B@5c3eeab3
//String转换为char
System.out.println("String-->char".toCharArray());//String-->char
//byte转换为String
System.out.println(new String("String-->byte".getBytes()));//String-->byte
//char转换为String
System.out.println(new String("String-->char".toCharArray()));//String-->char
/*--------------------------------*/
String str = "AStringABCD";
//字符串的长度
System.out.println(str.length());//10
//获取指定位置的的字符
System.out.println(str.charAt(3));//i
//获取指定字符第一次出现的位置(从左往右)
System.out.println(str.indexOf("A"));//0
//获取字符最后一次出现的位置(从右往左)
System.out.println(str.lastIndexOf("A"));
/*字符串的判断*/
//比较字符是否相等
/**
* ==是比较地址是否相同
* equals是比较字符串的内容
*/
System.out.println("str".equals("str"));//true
//忽略大小写,比较字符串内容是否相同
System.out.println("STR".equalsIgnoreCase("str"));//true
/*大小写转换*/
//大转小
System.out.println("STRING".toLowerCase());//string
//小转大
System.out.println("string".toUpperCase());//STRING
//trim的使用忽略前后空格
System.out.println(" String ");// String
System.out.println(" String ".trim());//String
String str2 = "";
boolean trim = isTrim(str2);
System.out.println(trim);
System.out.println(isNull(str2));
}
//判断不为空
private static boolean isTrim(String str) {
if(str!=null&&!"".equals(str.trim())){
return true;
}
return false;
}
//判断为空
private static boolean isNull(String str){
return !isTrim(str);
}
}
package com.anonymous.javase.day04;
abstract class TestTime{
final public void getTime(){
long start= System.currentTimeMillis();
this.getwork();
System.out.println(System.currentTimeMillis()-start);
}
abstract public void getwork();
}
//String
class StringTest extends TestTime{
public void getwork(){
String str = "1";
for (int i = 0; i < 100000; i++) {
str +="23";
}
}
}
//StringBuffer
class StringBufferTest extends TestTime{
@Override
public void getwork() {
StringBuffer stringBuffer = new StringBuffer("123");
for (int i = 0; i < 100000; i++) {
stringBuffer.append("23");
}
}
}
//StringBuilder
class StringBuilderTest extends TestTime{
@Override
public void getwork() {
StringBuilder stringBuffer = new StringBuilder("123");
for (int i = 0; i < 100000; i++) {
stringBuffer.append("23");
}
}
}
public class Demo6 {
public static void main(String[] args) {
new StringTest().getTime();//5457
new StringBufferTest().getTime();//5
new StringBuilderTest().getTime();//3
}
}
package com.anonymous.javase.day04;
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
public class Demo7 {
public static void main(String[] args) {
//Random
Random random = new Random();
//获取[-2147483648,2147483647]的随机数
int nextInt = random.nextInt();
System.out.println(nextInt);
//获取[0,1000]随机数
int nextInt2 = random.nextInt(1000);
System.out.println(nextInt2);
//获取[true,false]随机值
boolean nextBoolean = random.nextBoolean();
System.out.println(nextBoolean);
/**
* 其他用法差不多
*/
/*ThreadLocalRandom(java1.7)*/
ThreadLocalRandom current = ThreadLocalRandom.current();
int nextInt3 = current.nextInt();
//获取[-2147483648,2147483647]的随机数
System.out.println(nextInt3);
//获取[20,40]的值
System.out.println(current.nextInt(20, 40));
/*UUID(java1.8)*/
UUID randomUUID = UUID.randomUUID();
System.out.println(randomUUID);
}
}
日期:
package com.anonymous.javase.day04;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
//Date日期类使用
//DateFormat日期的格式化操作.(固定格式)
/**
*
* Date中的大部分方法已经被禁用,不做详细解释
*
*/
public class Demo8 {
public static void main(String[] args) throws ParseException {
//Date
dateTest();
//DateFormat
dateFormatTest();
//SimpleDateFormat
simpleDateFormatTest();
//Calendar
calendarTest();
}
public static void dateTest(){
Date date = new Date();
//测试给出的日期是否在当前日期之后
System.out.println(date.after(new Date(344234213L)));
//测试给出的日期是否在当前日期之前
System.out.println(date.before(new Date(345092452L)));
System.out.println(date);
}
public static void dateFormatTest() throws ParseException{
//如果不设置参数(按照本机环境来格式化日期)
/**getDateInstance()
* 默认本机格式化--->表示自己所在的地区来设置
*/
DateFormat format = DateFormat.getDateInstance();
String format2 = format.format(new Date());
System.out.println(format2);//2018-5-4
//DateFormat设置参数
//只显示日期,不显示时间
DateFormat format3 = DateFormat.getDateInstance(DateFormat.LONG,//表示日期是长风格(DateFormat.LONG)还是短风格(DateFormat.SHORT)
Locale.US//表示设置当前日期的所在地区的
//CHINA--->2018年5月4日
//US--->May 4, 2018
);
String format4 = format3.format(new Date());
System.out.println(format4);
//显示日期和时间
/**getDateTimeInstance()
* 默认是按照本地环境来转换时间格式,同样是
*/
DateFormat dateTimeInstance = DateFormat.getDateTimeInstance();
String format5 = dateTimeInstance.format(new Date());
System.out.println(format5);//2018-5-4 11:49:34
DateFormat dateTimeInstance2 = DateFormat.getDateTimeInstance(
DateFormat.LONG,//日期的长风格
DateFormat.LONG,//时间的长风格
Locale.US);//设置区域
String format6 = dateTimeInstance2.format(new Date());
System.out.println(format6);//May 4, 2018 11:53:06 AM CST
DateFormat dateTimeInstance3 = DateFormat.getDateTimeInstance(
DateFormat.SHORT,//日期短风格
DateFormat.SHORT,//日期短风格
Locale.CHINA);//设置区域
String format7 = dateTimeInstance3.format(new Date());
System.out.println(format7);//18-5-4 上午11:55
}
public static void simpleDateFormatTest() throws ParseException{
/*SimpleDateFormat*/
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
String pattern = "yyyy/MM/dd HH:mm:ss:SSSS";
//申请格式化方式
simpleDateFormat.applyPattern(pattern);
//格式化
String format8 = simpleDateFormat.format(new Date());
System.out.println(format8);
//解析
Date parse = simpleDateFormat.parse(format8);
System.out.println(parse);
}
/*Calendar*/
/**
*
*/
public static void calendarTest(){
Calendar instance = Calendar.getInstance(Locale.CHINA);
Date time = instance.getTime();
System.out.println(time);
System.out.println("年:"+instance.get(Calendar.YEAR));
System.out.println("月:"+(instance.get(Calendar.MONTH)+1));
System.out.println("日:"+instance.get(Calendar.DATE));
System.out.println("时:"+instance.get(Calendar.HOUR_OF_DAY));
System.out.println("分:"+instance.get(Calendar.MINUTE));
System.out.println("秒:"+instance.get(Calendar.SECOND));
int week = instance.get(Calendar.DAY_OF_WEEK)-1;
String weekDay = null;
switch(week){
case 1: weekDay = "一";break;
case 2: weekDay = "二";break;
case 3: weekDay = "三";break;
case 4: weekDay = "四";break;
case 5: weekDay = "五";break;
case 6: weekDay = "六";break;
default: weekDay = "天";
}
System.out.println("星期"+weekDay);
}
}
日期的格式化和解析:
package com.anonymous.javase.day04;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo9 {
private static final String DEFAUL_DATE = "yyyy-MM-dd HH-mm-ss";
public static String getDefaulDate() {
return DEFAUL_DATE;
}
public static void main(String[] args) {
/*日期的练习操作(String和Date的相互转换)*/
//格式化操作
//Date---->String
String dateString = DateString("asdfs",new Date());
System.out.println(dateString);
//String---->Date
}
public static String DateString(String parse,Date date){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
if(parse==null||"".equals(parse.trim())){
parse = getDefaulDate();
}
try{
simpleDateFormat.applyPattern(parse);
}catch(Exception e){
throw new IllegalArgumentException("格式不正确");
}
String format = simpleDateFormat.format(date);
return format;
}
public static Date StringDate(String parse,String disDate) throws ParseException{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(disDate);
if(parse==null||"".equals(parse.trim())){
parse = getDefaulDate();
}
Date parse2 = simpleDateFormat.parse(parse);
return parse2;
}
}
案例:
package com.anonymous.javase.day04;
import java.util.Calendar;
import java.util.Date;
public class Demo10 {
public static void main(String[] args){
Calendar instance = Calendar.getInstance();
//开始时间
instance.add(Calendar.YEAR, -3);
instance.set(Calendar.HOUR_OF_DAY, 00);
instance.set(Calendar.MINUTE, 00);
instance.set(Calendar.SECOND, 00);
Date time = instance.getTime();
instance.add(Calendar.DAY_OF_MONTH, 7);
Date time2 = instance.getTime();
System.out.println("开始时间"+time.toLocaleString());
System.out.println("结束时间"+time2.toLocaleString());
}
}