JavaSE学习笔记 Day16

JavaSE学习笔记 Day16

个人整理非商业用途,欢迎探讨与指正!!
<< 上一篇


文章目录


···

13.4java.sql.Date类型

java.util.Date的子类

常用于JDBC中

java 复制代码
package com.qf.test;

//import java.sql.Date;

public class Demo02 {

	public static void main(String[] args) {
//		没有空的构造方法
//		System.currentTimeMillis() 获取当前系统时间的毫秒数
		java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
		System.out.println(date);
//		同名类的引入
		java.sql.Date date2 = new java.sql.Date(new java.util.Date()/*使用全限定名的形式引入*/.getTime());
		System.out.println(date2);
		
		java.util.Date d3 = new java.util.Date();
		java.sql.Date d4 = new java.sql.Date(10000);
	}
}

13.5SimpleDateFormat类

日期格式化,将日期和字符串之间进行转换

java.util.Date和String类型

java 复制代码
public class Demo03 {

//	日期转换为字符串
	public static void main(String[] args) {
//		日期格式化对象
		SimpleDateFormat sdf = new SimpleDateFormat();
//		日期对象
		Date d1 = new Date();
//		将日期进行转换(按照默认格式,例如:23-12-12 上午9:08)
		String format = sdf.format(d1);
		System.out.println(format);
		
		System.out.println("---------------------------------");
//		yyyy年 MM月份 dd日期 HH小时 mm分钟 ss秒
		sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		format = sdf.format(d1);
		System.out.println(format);
		
		System.out.println("---------------------------------");
//		yyyy年 MM月份 dd日期 HH小时 mm分钟 ss秒
		sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		format = sdf.format(d1);
		System.out.println(format);
		System.out.println("---------------------------------");
//		yyyy年 MM月份 dd日期 HH小时 mm分钟 ss秒
		sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
		format = sdf.format(d1);
		System.out.println(format);
	}
}
java 复制代码
public class Demo04 {
//	将字符串转换为日期类型
	public static void main(String[] args) {
//		按照默认格式进行String to Date
		SimpleDateFormat sdf = new SimpleDateFormat();
		String format = "23-12-12 上午9:11";
		
		try {
			Date d = sdf.parse(format);//当前方法存在异常,必须处理的
			System.out.println(d);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("--------------------------------");
//		按照指定的格式进行转换为日期
		sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		format = "2023-12-12 09:25:20";
		
		try {
			Date d = sdf.parse(format);
			System.out.println(d);
		} catch (ParseException e/*编译期异常*/) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

13.6Calendar类

日历类,官方提出代理java.util.Date的方案

一个抽象类

java 复制代码
public class Demo05 {

//	日历类
	public static void main(String[] args) {
//		内部提供了一个获取当前实例的方法
		Calendar c = Calendar.getInstance();
//		有对象实例就可以调用内部的方法
//		get方法:取值
		System.out.println(c.get(Calendar.YEAR));
		System.out.println(c.get(Calendar.MONTH) + 1 );//从0开始的
		System.out.println(c.get(Calendar.DATE));
		System.out.println(c.get(Calendar.DAY_OF_MONTH));
		System.out.println(c.get(Calendar.DAY_OF_WEEK));//周日开始
		System.out.println(c.get(Calendar.DAY_OF_WEEK_IN_MONTH));//当前周是这个月的第几周
		System.out.println(c.get(Calendar.HOUR_OF_DAY));//24进制的
		System.out.println(c.get(Calendar.HOUR));//12进制的
		System.out.println(c.get(Calendar.DAY_OF_YEAR));
		System.out.println(c.get(Calendar.SECOND));
		
//		set方法:赋值
		c.set(Calendar.MONTH, 1);
		c.set(Calendar.DAY_OF_WEEK, 3);
		
		System.out.println(c);
		
//		add方法:添加
		c.add(Calendar.YEAR, 1);
		System.out.println(c);
		
		c.add(Calendar.YEAR, -2);
		System.out.println(c);
	}
}
java 复制代码
public class Test01 {

//	方法定义:传入年和月,打印对应的日历
//	星期日 星期一 星期二 星期三 星期四 星期五 星期六
	public static void print(int year,int month) {
//		获取当前的系统时间
		Calendar c = Calendar.getInstance();
//		通过year和month来创建对应年的 指定月份的1号
		c.set(year, month - 1, 1);
//		System.out.println(c);
		System.out.println(year+"年"+month+"月的日历如下:");
		System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");
//		获取1号的位置 需要确定1号以前的空格数
		int weekDay = c.get(Calendar.DAY_OF_WEEK);
//		System.out.println(weekDay);
//		1号以前的空格
		for(int i = 1;i<weekDay;i++) {
			System.out.print("\t");
		}

//		获取当前的月份
		int mm = c.get(Calendar.MONTH);
//		自增的月份==当前需要打印的月
		while(mm == month - 1) {
//			获取天数
			int day = c.get(Calendar.DATE);
			System.out.print(day + "\t");
			
//			换行
			weekDay = c.get(Calendar.DAY_OF_WEEK);
//			若当前的日期和星期六一致,就换行
			if(weekDay == Calendar.SATURDAY) {
				System.out.println();
			}
			
//			循环变化
			c.add(Calendar.DATE, 1);
//			重新获取月份
			mm = c.get(Calendar.MONTH);
		}
	}
	
	public static void main(String[] args) {
		print(2023, 12);
	}
}

13.7System类

系统类

java 复制代码
public class Demo06 {

	public static void main(String[] args) {
//		获取当前系统时间毫秒数
		long start = System.currentTimeMillis();
		
		for(int i = 1;i<=100000000;i++);
		
		long end = System.currentTimeMillis();
		
		System.out.println("100000000次循环的执行时间为:"+(end - start)+"毫秒");
		
//		终止虚拟机 在开发过程中禁止使用,一般在测试工作中可以使用
//		0表示虚拟机正常终止 非0表示异常终止
		System.exit(0);
		
		System.out.println("我还能执行到吗?");
	}
}

13.8Math类

数学类,内部都静态成员

java 复制代码
public class Demo07 {

	public static void main(String[] args) {
//		参数1的参数2次方
		System.out.println(Math.pow(2, 2));
		System.out.println(Math.pow(2, 4));
		System.out.println(Math.pow(2, 3.5));
//		开平方
		System.out.println(Math.sqrt(4));
		System.out.println(Math.sqrt(-1));//i
//		开三次方
		System.out.println(Math.cbrt(27));
		
		System.out.println(Math.max(10, 20));
		System.out.println(Math.min(10, 20));
//		向上取整
		System.out.println(Math.ceil(10.01));
//		向下取整
		System.out.println(Math.floor(10.01));
//		四舍五人
		System.out.println(Math.round(10.5));
		System.out.println(Math.round(10.4));
	}
}

13.9Random类

随机类

java 复制代码
public class Demo08 {

	public static void main(String[] args) {
		Random r = new Random();
		
		boolean b = r.nextBoolean();//true false的随机
		System.out.println(b);
		
		double d = r.nextDouble();//double范围内的随机
		System.out.println(d);
		
		int i = r.nextInt();//int范围内随机
		System.out.println(i);
		
		i = r.nextInt(10);//生成0~9的随机数
		System.out.println(i);
	}
}

13.10BigDecimal类

java中最大的数值类型,更精准的浮点数

java 复制代码
public class Demo09 {

	public static void main(String[] args) {
		double a = 0.1;
		double b = 0.2;
		System.out.println(a + b);
//		更精准的浮点数,java中最大的数值类型
		BigDecimal b1 = new BigDecimal("0.1");
		BigDecimal b2 = new BigDecimal("0.2");
//		加法
		System.out.println(b1.add(b2));
//		减法
		System.out.println(b1.subtract(b2));
//		乘法
		System.out.println(b1.multiply(b2));
//		除法
		System.out.println(b1.divide(b2));
	}
}

十四、字符串

java中提供两种字符串:定长字符串,变长字符串

定长:String

变长:StringBuffer,StringBuilder

java中的字符串都是有final修饰的类

14.1String

14.1.1String的不可变性

String类表示字符串,java中所有的字符串都是它的实例

String类由final修饰,不可以被继承

String的内容是不可以被修改的

底层是private final char value[];final修饰的数组,String中的所有构造方法都为value进行赋值,因为是final修饰的,所以String不可以被修改

在jdk1.9时改为private final byte value[];

java 复制代码
public class Demo01 {

	public static void main(String[] args) {
//		基本类型和String进行方法内部无论怎么进行变化,都对外部没有影响
		String str = "hello";
//		进行字符串拼接
		str.concat("world");
		System.out.println(str);
		
//		使用变量的重新赋值
		str = str.concat("world");
		System.out.println(str);
		
		str = "你好世界";//在String的底层中使用final修饰,final变量不可改变
		test(str);
		System.out.println(str);
	}
	
	public static void test(String str) {
		str = "helloworld";
	}
}
14.1.2String对象的创建

1.使用""直接赋值

java中的基本类型和String,这些类型为了在程序中更快的使用,更节省内存,java中提供常量池的概念

常量池中的内容都是唯一的

2.使用new创建对象

new出来的对象都在堆中

java 复制代码
public class Demo02 {

	public static void main(String[] args) {
//		1.使用=""赋值
		String name1 = "bmh";
		String name2 = "bmh";
		//都来自于常量池中
		System.out.println(name1 == name2);//比较地址
		System.out.println(name1.equals(name2));
		
//		2.new对象的形式
		String str1 = new String("hello");
		String str2 = new String("hello");
		
		System.out.println(str1 == str2);//一个new一个地址
		System.out.println(str1.equals(str2));
	}
}
14.1.3String的构造方法
java 复制代码
public class Demo03 {

	public static void main(String[] args) {
//		1.空构造
		String str1 = new String();
		System.out.println(str1);
		System.out.println(str1.equals(""));//""不是null
		System.out.println(str1.equals(null));
//		任何由null进行调用都会抛出NPE异常(NullPointerException)
		str1 = null;
//		System.out.println(str1.equals(""));
		System.out.println("".equals(str1));//将一定不为空的值做为调用者
//		2.使用char[]进行字符串的创建
		char[] cs = {'a','b','c','d','e'};
		String str2 = new String(cs);
		System.out.println(str2);
//		从下标1开始,长度为2
		str2 = new String(cs,1,2);
		System.out.println(str2);
//		字符串的下标同样从0开始,若越界StringIndexOutOfBoundsException
		/*str2 = new String(cs,5,1);
		System.out.println(str2);*/
//		3.通过byte[]数组创建
		byte[] bs = {95,96,97,98,99};
		String str3 = new String(bs);
		System.out.println(str3);
		str3 = new String(bs,1,2);
		System.out.println(str3);
	}
}
14.1.4String的方法
java 复制代码
String str = "abcdefghaijk";
//		返回字符串指定下标的内容
System.out.println(str.charAt(0));
//		System.out.println(str.charAt(-1));
//		找到参数在字符串中的位置
System.out.println(str.indexOf('a'));
System.out.println(str.indexOf('z'));
System.out.println(str.indexOf(97));//ascII做为参数
System.out.println(str.indexOf("a"));

System.out.println(str.indexOf("a", 5));//从下标5开始,去找a

System.out.println(str.lastIndexOf("a"));//从后向前第一次遇见的a

System.out.println(str.length());

System.out.println("-------------------------");
//		比较方法
System.out.println("abc".equals("abc"));
System.out.println("abc".equalsIgnoreCase("ABC"));//忽略大小写
System.out.println("".isEmpty());//判断是否为空串
System.out.println("abc".endsWith("bc"));
System.out.println("abc".startsWith("a"));
System.out.println("abc".contains("b"));//是否包含某个字符,调用的是indexOf

//		设置方法
System.out.println("hello".concat("world"));//字符串拼接
System.out.println("helloworld".replace("ll", "*****"));//替换
System.out.println("helloworld".substring(2));//字符串截取,从某个位置开始截取到结尾
System.out.println("helloworld".substring(2,6));//字符串截取,从某个位置开始截取到某个位置,长度为参数2-参数1
System.out.println("--------------------------------");
String str = "zs,ls,ww,zl";
String[] split = str.split(",");//按照,进行裁剪
for (String string : split) {
    System.out.println(string);
}

split = str.split("");//按照""进行裁剪
for (String string : split) {
    System.out.println(string);
}
System.out.println("--------------------------------");
System.out.println("   tom  ".trim().length());//去除前后空格

char[] charArray = "helloworld".toCharArray();//将字符串转换为char[]
for (char c : charArray) {
    System.out.println(c);
}

byte[] bytes = "helloworld".getBytes();
System.out.println(Arrays.toString(bytes));

System.out.println("helloworld".toUpperCase());
System.out.println("HELLOWORLD".toLowerCase());

//		其他类型转换为字符串
System.out.println(10 + "");
System.out.println(String.valueOf(new Integer(10)) + 10);
System.out.println(new Integer(10).toString() + 10);

String str1 = "hello";
String str2 = new String("hello");

String str3 = str2.intern();//返回字符串的常量池地址
System.out.println(str1 == str3);

//		字符串使用+进行拼接时,会将两个串转换为StringBuilder之后进行append,拼接完成后再转换回到String类型
//		+的效率是非常低
String str4 = "h";
String str5 = "ello";

String str6 = str4 + str5;//由StringBuilder转换而得的 str6不直接在常量池中

System.out.println(str1 == str6.intern());

14.2StringBuilder和StringBuffer

可变字符串

java 复制代码
public class Demo07 {

	public static void main(String[] args) {
//		创建sb对象
		StringBuilder sb = new StringBuilder();//堆中的
		System.out.println(sb);
		System.out.println(sb.length());//返回sb的有效长度
//		追加方法
		sb.append("hello");
//		append可以链式调用
		sb.append("world").append("你好").append("世界");
		
		System.out.println(sb);
		
//		删除方法
		sb.delete(2, 4);//从2开始,长度为4-2
		System.out.println(sb);
		
//		添加
		sb.insert(1, "嘿嘿");
		System.out.println(sb);
		
//		字符串反转
		sb.reverse();
		System.out.println(sb);
		
//		转换为String类型
		System.out.println(sb.toString() + 1);
	}
}

14.3String,StringBuilder,StringBuffer的区别

都是字符串

String类是字符串常量,一旦创建不可以改变

StringBuilder,StringBuffer是可变字符串,自带缓冲区的,缓冲区默认大小为16个字符

StringBuffer线程安全的,效率低

StringBuilder线程不安全的,效率高

总结:若有大量的字符串拼接,使用StringBuilder或者StringBuffer拼接之后在转String。不考虑,线程时使用StringBuilder,否则StringBuffer

java 复制代码
public class Demo09 {

	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		String str = "";
		for(int i = 0;i<10000;i++) {
			str +=  "a";
		}
		long end = System.currentTimeMillis();
		System.out.println("String拼接耗时:"+(end-start));
		System.out.println("----------------");
		start = System.currentTimeMillis();
		StringBuilder sb1 = new StringBuilder();
		for(int i = 0;i<10000;i++) {
			sb1.append("a");
		}
		end = System.currentTimeMillis();
		System.out.println("String拼接耗时:"+(end-start));
		System.out.println("----------------");
		start = System.currentTimeMillis();
		StringBuffer sb2 = new StringBuffer();
		for(int i = 0;i<10000;i++) {
			sb2.append("a");
		}
		end = System.currentTimeMillis();
		System.out.println("String拼接耗时:"+(end-start));
	}
}
相关推荐
huangkj-henan1 分钟前
DA217应用笔记
笔记
Young_202202022 分钟前
学习笔记——KMP
笔记·学习
希忘auto4 分钟前
详解MySQL安装
java·mysql
冰淇淋烤布蕾15 分钟前
EasyExcel使用
java·开发语言·excel
行然梦实18 分钟前
学习日记_20241110_聚类方法(K-Means)
学习·kmeans·聚类
拾荒的小海螺21 分钟前
JAVA:探索 EasyExcel 的技术指南
java·开发语言
马船长24 分钟前
制作图片木马
学习
秀儿还能再秀35 分钟前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
Jakarta EE38 分钟前
正确使用primefaces的process和update
java·primefaces·jakarta ee
WCF向光而行40 分钟前
Getting accurate time estimates from your tea(从您的团队获得准确的时间估计)
笔记·学习