实用类
1.能够定义并使用枚举类型
(引用数据类型:数组,类(String),接口,枚举)
switch支持int String枚举(enum)
public class Student{
private String name;
private int age;
private String gender;
public void setAge(int age){
if(age < 0 || age > 100){
syso("非法输入");
this.age = 60;
}else{
this.age = age;
}
if(gender.equals("男") || gender.equals("女")){
this.gender = gender;
}else{
syso(xxx)
}
}
}
public class Test{
main(){
Student stu = new Student();
//stu.age = -1000;(采用封装解决) 为了解决不合理赋值
stu.gender = "呵呵"; //男 女
}
}
枚举指由一组固定的常量组成的类型
在[数学](https://baike.baidu.com/item/%E6%95%B0%E5%AD%A6/107037)和[计算机科学](https://baike.baidu.com/item/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6/9132)理论中,一个集的**枚举**是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。
[Modifier] enum enumName{
enumContantName1[,enumContantName2...[;]]
}
//枚举是类型,数据中间是有逗号","隔开
public enum Genders{
//常量 static final(修饰符)
其实这两个常量是两个对象
MALE("男",0),
FEMALE("女",1);
}
//枚举写法
public Genders sex;
public class Student{
}
//在很多场景下,我们需要其他开发者,在调用我们的某些方法时,只能传递某几个固定值
//那么就需要枚举
Strdent stu = new Student();
stu.sex = Genders.Male;
stu.gender(gender.male);
枚举的特点:
类型安全 , 枚举中必须是私有构造private,不能为其他
易于输入
代码清晰
2.掌握包装类及装箱,拆箱的概念
1.集合泛型要求数据类型必须是包装类型。
2.基本数据类型没有函数,所以当你需要对基本数据类型进行函数操作时,那么可以使用对应的包装类型。
包装类都是在java.lang包中。
byte short int long float double
包装类型的常用Api
1.包装类型的创建(了解)
main(){
//给构造传输一个对应的基本数据类型值
new Integer(value)//Inetger interger = new Integer(10);
interget.xxxxx
new Integer("10");//Inetger interger = new integer("10");
syso(integer)
//除了输入ture为正确为,其他的都是fales
new Boolean(ture);//Boolenan boolean = new Boolenan(ture);
}
2.保障类型转换(直接利用函数将基本数据类型值,转换为包装类型值)了解
main(){
//可以通过静态函数,valueOf将基本数据类型值,转换为包装类型
Integer.valueOf(10);//Integer valueOf = Integer.valueOf(10);
Character.valueOf('A');//Character valueOf = Character.valueOf('A');
}
3.包装类型转换(了解)
Integer integer = Integer.valueOf(10);
//利用xxxValue() 可以将保障类型转换为对应的基本数据类型
int intValue = integer.intValue();
4.字符串转换为基本数据类型/包装类型(我们在网络数据传输中,你的数据表层会转换为字符串,服务器在接受时,就是一些字符串而已,但是你也知道字符串对于有些数据的操控并不是太方便,所以需要进行转换)
main(){
String value = "10";
//可以将字符串转换为对应的基本数据类型
int parseInt = Integer.parseInt(value);
//可以将字符串转换为对应的包装类型
Integer valueOf = Integer.ValueOf(value);//------------------死记硬背
}
5.基本/包装类型----->字符串
main(){
int a = 10;
//凡是与字符串用+号拼接的都成为了字符串
String b = a + "";
//将基本数据类型转换为字符串
String string = Integer.toString(a);
//将包装类型转换为字符串
Integer c = Integer.valueOf(a);
String string = c.toString();//----------------------死记硬背
}
拆箱和装箱
拆箱:包装类型转换为基本数据类型
装箱:基本数据类型转换为包装类型
JDK5之后,java支持了自动拆箱和装箱。
Integer a = 10;//装箱
int b = a;//拆箱
包装类的和基本数据类型的使用注意事项
1.包装类是引用数据类型,所以它可以接受null值,而基本数据类型不可以
public class Strdent{
//private Integer Id;
//会空指针
private Long Id;
}
2.包装类型不是用来替代基本数据类型的,而是用来弥补基本数据类型无法使用函数的问题。
基本数据类型可以用 == 比较值内容。
包装类型默认值为null,而基本数据类型默认值为0,false等等。
3.但是在数据参数传递时,大多数情况基本和包装可以混淆使用。
3.会使用Math类进行数学运算
Math数学类
main(){
//圆周率,自然底数
Math.Ip
//求两者中的最小值
Math.min(10,9);//int min = Math.min(10,9);
//求两者中的最大值
Math.max(10,9);
//求绝对值
Math.abs(-10);
//求幂运算
Math.pow(2,3);//double
//四舍五入
Math.round(10.5);//long
//向上取整
Math.ceil(10.2);//double
//向下取整
Math.floor(10.8);//double
//开平方
Math.sqrt(4);//double
//求随机数[0.0,1.0]
Math.random();//double
//求随机范围内的整数[min,max]
(int)(Math.random() * (max - min) + 1);
}
Random随机数类
//创建对象
Random random = new Random();
//获取随机整数【0,10】
int randInt = random.nextInt(10);
//获取随机小数【0.0,1.0】
doublie randDouble = random. nextDouble();
//求随机范围内的整数[min,max]
rand.nextInt(max - min + 1) + min;
世界上市没有随机数的
main(){
//seed 种子数
Random random1 = new Random(10);
Random random2 = new Random(10);
int randInt1 = random1.nextInt(20);
int randInt2 = random2.nextInt(20);
syso(xxxx);
//System.nanoTime()//纳秒值
(seedUniquqfier() ^ System.nanoTime());
}
4.会使用Random获取随机数
实用类二
1.掌握字符串的常用API
1.获取字符串的长度 xxx.length()
main(){
//提示输入用户名和密码
Scanner input = new Scanner(System.in);
syso("用户名");
String username = input.next();
syso("密码");
String password = input.next();
//用字符串的长度进行判断xxx.length();
int length = password.length();
if(length < 6){
syso("密码长度不合格");
return;
}
syso("登录成功");
}
- 判断字符串内容是否相同 equals(Object obj)
main(){
Scanner input = new Scanner(System.in);
syso("用户名");
String username = input.next();
syso("密码");
String password = input.next();
//假设存储一下用户名和密码
String realUsername = "shihaoran";
String realPwd = "naroahihs";
//用户名和密码同事相同
if(username.equals(realUsername) && Pwd.equals(realPwd)){
syso("登录成功!");
}else{
syso("用户名或密码错误!");
}
}
3.equalsIgnoreCase---->不区分大小写
4.toUpperCase()------>全大写
5.toLowerCase()------>全小写
6.防止在一定程度上出现NPE,空指针的异常出现
/*if((xxxx).equals("skjf") && (xxxx).equals("dffasd")){
}*/
//推荐下面的,固定值在前,不固定值在后
if("askdjfl".equals(xxxxx) && "sssaskdj".equals(xxxxx)){
}
7.字符串拼接 String concat(String anotherString);
String str1 = "hello";
String str2 = "world";
string str3 = str1 + str2;
syso("sdjf" + str2);
//用concat连接字符串
String str3 = Str1.concat(str2);
8.int indexOf(String subStr) …的索引,从左开始,只会寻找第一个
9.int lastIndexOf(String subStr) …的索引, 从右开始,只会寻找第一个
//....的索引,从左开始,只会寻找第一个
String str1 = "helloworld";
int index = str1.indexOf("o");
//....的索引, 从右开始,只会寻找第一个
int lastIndexOf = str1.lastIndexOf("o");
10.int indexOf(String sbuStr,int fromIndex )从左开始查找某个位置的字符
//从左开始查找某个位置的字符
int indexOf = str1.indexOf("o",index + 1)
11.char charAt( int index) 获取指定索引的字符
12.String substring(int startindex);从指定位置开始截取字符串
13.String substring(int startlndex,int endlndex);从指定位置开始截取指定位置结束的字符串
14.去除字符串两端空格:String trim();
//用户输入的名称不能为空/空格,长度不能小于6位
main(){
String userInput = "";
//判断用户名
if("".equals(userInput.trim())){
syso("用户名不能为空");
}else if(userInput.length() < 6){
syso("用户名不能小于6位");
}else{
syso("用户合法!");
}
}
15.替换字符串:String replace(String oldStr,String newStr);
//替换输入的字符串
main(){
Scanner input = new Scanner(System.in);
syso(xxxxxxx);
String userInput = input.next();
//敏感字,替换
//userInput.replace(oldChar,newChar)
String replace = userInput.replace("垃圾","**");
syso("你输入的是:" + replace);
}
16.String[] split(String 正则表达式)
main(){
String str = "长亭外 古道边 芳草碧连天";
//正则 regular expression regex
//一种规则,简单模式,复合模式 \d{9}
//可以匹配规则
/可以按照空格拆,也可以按照~拆
Sting[] split = Str.split(" ");
for(String stri : split){
syso(stri)
}
}
17.将字符串转换为字符数组:char[] toCharArray();
构造方法还有特殊用途!!!!未完待续。
2.掌握StringBuffer的基本使用
String字符串Buffer缓冲区
字符串String引用数据类型,那么每一次使用字符串都需要创建对象(在方法区中存在一个字符串常量池,所以有些时候,它不会创建对象),字符串拼接的时候,每一次都在创建新的字符串对象。效率特别低!
循环中不要使用“+”号来拼接字符串,因为底层是使用StringBuffer/StringBuilder实现的。
循环外面,也不推荐使用“+”号,虽然它不会转换为StringBuffer/StringBuilder但是它会产生新的字符串对象
构造方法:
StringBuffer();
StringBuffer(String str);
常用的方法:
1.append(任意类型数据);追加字符串
2.insert(int index,任意类型数据);在指定位置插入字符串,原有数据后移
3.reverse();字符串反转
4.toString();转换为字符串
mian(){
StringBuffer sb = new StringBuffer();
StringBuffer sb = new StringBuffer("xxxxx") ;
sb.append(10);
sb.append(11);
sb.append("abc");
String string = sb.toString();
syso(stromg)
//在指定的位置插入字符串
sb.insert(3,"hehe");
syso(sb);
//字符串反转
sb.reverse();
syso(sb);
}
3.掌握日期类的使用和日期格式转换Date
掌握时间格式转换SimpleDateFormat
main(){
Date date = new Date();
syso(date);
//Mon Apr 22 11:25:25 CST 2019
//格式转换对象 SimpleDateFormat
//转换的格式字符串
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String format = sdf.format(date);
syso(format);
try{
Date parse = sdf.parse("2019年04月");
syso(parse);
//日期格式异常
}catch(ParseException e){
e.printStackTrace();
}
}
掌握日期类型的使用Calendar
Calender:定义成常量。
main(){
//消除时间敏感性
Calendar calendar = Calendar.getInstance();
//获取年份或者月份信息
int dayOfMonth = calendar.get();
syso(dayOfMonth);
//不要使用魔法值,要使用常量
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
syso(dayOfMonth);
//中国时间注意加减1,从西方时间转换
int dayOfMonth = calendar.get(Calendar.DAY_OF_WEEK);
syso(dayOfMonth);
}