实用类 笔记分享

实用类

常使用,性价比高的类

1.掌握枚举类型的使用

switch中支持的一种表达式类型

引用数据类型中的一种

1.1需求

编写一个学生类,要求存储姓名、性别、年龄,并进行测试

public class Student{
    private String name;
    private String gender;
    private int age;
}
Student stu = new Student();
stu.setName("雷锋");
stu.setGender("女");
stu.setAge(23);
// stu.setGender("人妖");
// stu.setAge(-1);
sout(stu);

问题分析:在年龄方面为了保证年龄信息的合理性,我们借助以前的封装技术实现了在对应的setter方法中添加逻辑控制语句,性别方面虽然也可以采用上述方式,但是较之年龄,性别的可选择范围仅仅只有两种可能。

1.2枚举的使用

枚举就是某些有穷序列的集合,例如:星期 就是一种枚举

1.将性别单独定义为一种类型

public enum Gender {,}

2.完善Student类

public class Student{
    private String name;
    // 原写法:private String gender;
    private Gender gender;
    private int age;
}

3.测试使用

Student stu = new Student();
stu.setName("雷锋");
stu.setAge(23);
// 原写法:stu.setGender("女");
stu.setGender(Gender.);
sout(stu);

1.3枚举的原理

  1. 枚举其实就是一种普通类型,只不过是提前由Java帮你选定了父类

在这里插入图片描述
2. 因为枚举已经自动继承自Enum类型,所以它无法再继承其他类,但是可以进行接口实现

  1. 枚举内的常量其实都是一个个Gender类型的对象,底层是靠数组来存储这些对象信息的

1.4枚举练习

需求:周一至周五 好好学习,周六周日 好好休息

public enum Week {
	星期一,星期二,星期三,星期四,星期五,星期六,星期日
}

public class DoWeek {
	public void doWhat(Week day) {
		switch (day) {
			case 星期一:
			case 星期二:
			case 星期三:
			case 星期四:
			case 星期五:
				System.out.println("好好学习!");
				break;
			case 星期六:
			case 星期日:
				System.out.println("好好休息!");
				break;
			default:
				break;
		}
	}
	public static void main(String[] args) {
		DoWeek doWeek = new DoWeek();
		doWeek.doWhat(Week.星期一);
        // doWeek.doWhat(Week.星期二);
        // ……
	}
}

2.掌握包装类及装箱和拆箱的概念

集合的泛型中学习到。

java.lang:无需导包即可使用 System、String

java.util:工具类包 Arrays Collections 集合…

javax.sql:数据库相关API

java.net:网络编程相关API

java.io:IO流相关API

byte → Byte

short → Short

int → Integer

long → Long

float → Float

double → Double

char → Character

boolean → Boolean

2.1为什么需要包装类

为什么在拥有了基本数据类型之后还要产生对应的包装类型?【面试题】

Java是一个面向对象的语言,而基本数据类型不具备面向对象的特性

我们在Java中存储一些单一的数据 都是用基本数据类型存储的,它们在使用中非常方便,但如果涉及到需要对这些单一数据进行一些处理,(例如:将数字转换为字符串、将字符串转换为数字……)基本类型无法直接转换,因为基本数据类型不是类,不存在方法和属性,所以诞生了包装类

2.2包装类介绍

在这里插入图片描述

2.3包装类的常用方法

构造方法:(JDK10已经将构造进行了废弃)

  • Integer(int value);
  • Integer(String value);
  • ……

常用方法:

  • 基本数据类型 <-> 引用数据类型(包装类)

  • 包装类型 → 字符串

    • 通过+号拼接""
    • String toString();
    • static String toString(基本类型值);
    // 创建包装类对象
    Integer num1 = new Integer(10);
    int num2 = 10;
    
    // 转换为字符串
    String num1Str = num1.toString();
    sout(num1Str);
    String num2Str = Integer.toString(num2);
    sout(num2Str);
    
  • 字符串 → 包装类型

    • Double valueOf(String value)
    • Long valueOf(String value)
    • int parseInt(String value)
    • double parseDouble(String value)
    String num1 = "10";
    int parseInt = Integer.parseInt(num1);
    Integer valueOf = Integer.valueOf(num1);
    

2.4装箱和拆箱

装箱:将基本数据类型转换为包装类型的过程就是装箱。

拆箱:将包装类型转换为基本数据类型的过程就是拆箱。

Java提供了自动装箱和拆箱!

包装类型和基本数据类型在使用上可以混用!

// 参考:String s = "";	String s = new String("xx");

// 装箱
Integer num1 = 10;
// 拆箱
int num2 = num1;

String s = "10";
int num1 = Integer.parseInt(s);
Integer num2 = Integer.parseInt(s);
// Integer num2 = Integer.valueOf(s);

3.掌握Math类进行数学运算

Math是Java提供的数学工具类

  • 生成[0.0,1.0)之间的随机小数:double random = Math.random();

  • 生成指定范围的随机数:int random = (int)(Math.random()*(max - min) + min);

// 绝对值(absolute)
int abs = Math.abs(-7);
sout(abs); // 7

// 获取最大值
int max = Math.max(34,55);
sout(max); // 55
// 获取最小值 同上

// 幂运算
double pow = Math.pow(2,3);
sout(pow); // 8 2的3次方

// 开平方根
double sqrt = Math.sqrt(4);
sout(sqrt); // 2

// 三角函数
Math.sin(a);
Math.cos(a);
Math.tan(a);

// 四舍五入
long round = Math.round(10.5);
sout(round); // 11

// 向上取整
double ceil = Math.ceil(10.2);
sout(ceil); // 11
// 向下取整
double floor = Math.floor(10.7);
sout(floor); // 10

// 派
double pi = Math.PI;
sout(pi); // 3.141592653……一般计算不采用 通常使用自己定义的常量3.14

【面试题】

long round = Math.round(-1.5);
sout(round); // -1

4.掌握Random类进行随机数使用

Random是Java提供给我们的 用于随机数生成的工具类。

// seed 种子数 理解为随机数的基数
// 世界上本没有随机数 规则诞生之后就拥有了相对的随机效果
// 如果两个随机数的种子数都是一致的 且执行相同的随机范围 则结果不变(相同)
Random ran1 = new Random(10);
Random ran2 = new Random(10);

int num1 = ran1.nextInt(10);
int num2 = ran2.nextInt(10);

sout(num1);
sout(num2);

// 本质上 它其实是将纳秒值作为了种子数中的要素之一 
new Random();

5.掌握String类的常用API

字符串类,引用数据类型,无法被继承,重写了equals()方法,底层是char数组。

5.1构造方法

String类的构造方法非常丰富。

在这里插入图片描述

5.2常用方法

  • int length():获取字符串长度

  • boolean equals(String ano):判断字符串是否相同

  • boolean equalsIgnoreCase(String ano) :忽略大小写进行字符串内容比较

  • String toUpperCase():转换为大写字母

  • String toLowerCase():转换为小写字母

  • String concat(String ano):拼接字符串 当然也可以使用+号拼接

  • String trim():去除字符串两端的空格

  • char charAt(int index):获取指定索引的字符 索引从0开始

  • boolean endsWith(String str):判断是否是以指定的字符串结尾的

  • boolean startsWith(String str):判断是否是以指定的字符串开头的

  • byte[] getBytes():将字符串转换为字节数组

    • byte[] getBytes(字符编码):将字符串以指定的编码转换为字节数组
  • int indexOf(String str); 获取指定字符串在字符串中第一次出现的位置 索引从0开始

    • int indexOf(String str,int fromIndex) 可以指定开始查找的索引位置
  • int lastIndexOf(String str) 同上 从右向左找

  • String replace(String old,String new) 字符串替换

  • String[] split(String regex) 按照指定的正则来进行切分 切分为字符串数组

  • char[] toCharArray() 将字符串转换为字符数组

  • String substring(int beginIndex) 从指定索引开始截取子串

    • String substring(int beginIndex,int endIndex) 从指定索引开始到指定索引结束截取子串
  • String format(String format, Object… args):格式化字符串

    String name = "雷锋";
    int age = 23;
    double money = 77.777;
    sout("姓名:"+name+"年龄:"+age);
    
    // 类似于占位符
    // %s表示字符串 %d表示数值
    // %f表示浮点数
    String format = String.format("姓名:%s 年龄:%d 余额:%.2f", name,age,money);
    sout(format);
    

5.3可变参数

public static String format(String format, Object... args) {
    return new Formatter().format(format, args).toString();
}
public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

可变参数是用来解决在实现某些方法时参数数量不固定的场景。

public void printName(String name){
	sout(name)
}
public void printName(String[] names){
	// sout(name)
	// 数组遍历
}
public void printName(String... names){
	// 本质上是个数组
}
public static void main(String[] args) {
	printName();
	printName("雷锋");
	printName("雷锋","七条");
	printName("雷锋","七条","甘油三酯");
}

public static void printName(String... names){
	for (String name : names) {
		sout(name+" ");
	}
	sout(); // 换行
}

6.掌握StringBuffer的使用

StringBuffer:字符串缓冲区

我们做程序到了一定规模一定要考虑性能问题。

StringBuffer可以提升字符串拼接效率。

String和StringBuffer区别:

  • String 是final修饰的类,内置中拥有一个final修饰的常量char数组,所以严格来讲每一个String都是不可变的,当每创建或拼接一个字符串,它们都会产生新的内存区域。

    String str1 = “123”;

    String str2 = “123”;

    str1 == str2

    会涉及到常量池的复用。

  • 所以为了提升了字符串拼接效率,我们提出了缓冲区(缓存)的概念

    思路:将所有要拼接的内容先暂时存储在一个区域,最终你要使用字符串时,才将其进行拼接转换。

    // 开始时间
    long startTime1 = System.nanoTime();
    String str1 = "Hello";
    String str2 = "World";
    
    /*String concat = str1.concat(str2);
    		System.out.println(concat);*/
    String str3 = str1+str2;
    System.out.println(str3);
    // 结束时间
    long endTime1 = System.nanoTime();
    System.out.println("拼接花费时间:"+(endTime1 - startTime1)); // 280138 纳秒
    
    // 开始时间
    long startTime2 = System.nanoTime();
    // StringBuffer()   StringBuffer(String xxx)
    StringBuffer sb = new StringBuffer();
    // 向缓冲区存储数据
    sb.append("Hello");
    sb.append("World");
    // 将字符串缓冲区转换为字符串
    String string = sb.toString();
    System.out.println(string);
    // 结束时间
    long endTime2 = System.nanoTime();
    System.out.println("拼接花费时间:"+(endTime2 - startTime2)); // 76641 纳秒
    
    // 向指定位置插入值(任何类型)
    sb.insert(1, ",");
    System.out.println(sb);
    

常用方法:

  • append(任何类型数据); 向字符串缓冲区追加内容
  • toString(); 将字符串缓冲区内容转换为字符串
  • insert(int index,任何类型数据); 向字符串缓冲区的指定位置插入数据

练习: 一串数字123456789,现在需要每隔三位添加一个逗号,最终效果为123,456,789

利用StringBuffer实现

Scanner input = new Scanner(System.in);
System.out.print("请输入一串数字:");
// int num = input.nextInt(); 考虑长度问题 用String
String num = input.next();

// 创建StringBuffer
StringBuffer sb = new StringBuffer(num);
// 拼接逗号
for(int i = sb.length() - 3; i > 0; i -= 3) {
    sb.insert(i, ",");
}
System.out.println("转换后为:"+sb);

7.掌握Date和Calendar类的使用

Java提供的日期类型

java.util.Date

java.util.Calendar

Goods goods = new Goods();
goods.setId("future777");
goods.setName("初见");
goods.setPrice(77.77);
// this(System.currentTimeMillis())
goods.setCreateTime(new Date());

// 【废弃】
// toLocaleString → 转换为本地时间格式
// 被DateFormat中的format方法替代了
// String localeString = goods.getCreateTime().toLocaleString();

// 【废弃】
// 单个获取时间信息
// goods.getCreateTime().getDate();
// goods.getCreateTime().getDay();

// 创建对象
Calendar calendar = Calendar.getInstance();
// System.out.println(calendar);
// 根据时间元素编号 获取时间信息
// Calendar.get(Calendar.DAY_OF_WEEK);
// int year = calendar.get(1); 魔法值
// 修复魔法值
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int date = calendar.get(Calendar.DATE);
System.out.println(year+"-"+month+"-"+date);

int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println(hour+":"+minute+":"+second);

int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
System.out.println("星期"+dayOfWeek);

8.掌握SimpleDateFormat类格式化日期

Date date = new Date();		
// 进行日期格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");
// 将日期转换为字符串
String format = sdf.format(date);
System.out.println(format);
// 将字符串转换为日期
String str = "2018年11月11日 11时11分11秒";
Date parse = sdf.parse(str);
System.out.println(parse);
ndar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println(hour+":"+minute+":"+second);

int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
System.out.println("星期"+dayOfWeek);

8.掌握SimpleDateFormat类格式化日期

Date date = new Date();		
// 进行日期格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");
// 将日期转换为字符串
String format = sdf.format(date);
System.out.println(format);
// 将字符串转换为日期
String str = "2018年11月11日 11时11分11秒";
Date parse = sdf.parse(str);
System.out.println(parse);

注:笔记思想来自查老师!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值