基本数据类型
一般情况下,整数用int型,小数用double型
long型数值后加L,float型数据后加F
包装类
包装类:将基本数据类型,包装成类,变成引用数据类型
手动装箱:调用方法,手动将基本数据类型,包装成类
1. public Integer(intvalue):通过构造方法(不推荐)
2. public static Integer valueof(int i):通过静态方法
手动拆箱:调用方法,手动将包装类,拆成(转换)基本数据类型
1. public int intvalue():以int类型返回该 Integer的值
JDK5版本开始,出现了自动拆装箱 :
1.自动装箱 :可以将基本数据类型,直接赋值给包装类的变量
2.自动拆箱 : 可以将包装类的数据,直接赋值给基本数据类型变量
结论:基本数据类型,和对应的包装类,可以直接做运算了,不需要操心转换的问题了
Integer 常用方法 :
public static string toBinarystring(inti):转二进制
public static string to0ctalstring(inti):转八进制
public static string toHexString(inti):转十六进制
public static int parseInt(Strings):将数字字符串,转换为数字
例
String s="123";
System.out.println(Integer.parseInt(s)+100); // 223
练习
public class IntegerTest {
/*
已知字符串 String s="10,50,30,20,40";
请将该字符串转换为整数并存入数组随后求出最大值打印在控制台
*/
public static void main(string[] args){
strings="10,50,30,20,40";
// 1.根据逗号做切割
String[] sArr=s.split(regex:",");
// 2.准备一个整数数组,准备存储转换后的数字 int[] nums=newint[sArrlength];
// 3.遍历字符串数组
for(int i=0;i<sArr.length;i++){
// sArr[i] :每一个数字字符串
// 4.将数字字符串转换为整数,并存入数组
nums[i]=Integer.parseInt(sArr[i]);
}
// 5. 求最大值
int max=nums[0];
for(int i=1;i<nums.length;i++){
if(nums[i]>max){
max=nums[i];
}
}
System.out.println("最大值为:"+max);
}
}
判断自动装箱范围是否在-128~127之间
在:不会创建新的对象,而是从底层数组中直接获取
不在:重新new出新的Integer对象
API
API(Application Programming Inter face):应用程序编程接口
就是别人写好的一些类,给咱们程序员直接拿去调用即可解决问题的
API帮助文档的使用流程
1.在索引位置搜索自己要查看的类
2.看包
目的:是不是java.lang包(核心包),不需要编写导包代码(import)
-不是javalang包,都需要编写导包代码
3.看这个类的介绍
目的:搞清楚这个类的作用
4.看这个类的构造方法
目的:为了将该类的对象,创建出来
5.看这个类的成员方法(方法摘要)
1.方法名
2.参数
3.返回值
4.介绍
string类的特点:
1.Java 程序中所有双引号字符串,都是String这个类的对象
2.字符串一旦被创建,就不可更改,字符串内容不可改变
如果想要更改,只能使用新的对象,做替换
String类常见构造方法:
public String():创建一个空白字符串,里面不含任何内容
public string(char[] chs):根据传入的字符数组,创建字符串对象
public String(String original):根据传入的字符串,来创建字符串对象
public class stringTest1{
/*
需求:模拟用户登录,一共三次机会,登录之后要给出相应的提示
分析:
1.定义两个字符串类型变量,模拟已经存在的用户名和密码
2.键盘录入用户输入的用户名,密码
.比对
*/
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
//1.定义两个字符串类型变量,模拟已经存在的用户名和密码
String username="admin";
String password=“123456”;
for (int i =1; i <= 3; i++) {
//2.键盘录入用户输入的用户名,密码
System.out.println("请输入用户名:");
String inputUsername=scnextLine();
System.out.println("请输入密码:");
String inputPassword=sc.nextLine();
// .比对
if(inputUsername.equals(username) &&inputPasswordequals(password)){
System.out.println("登录成功!");
break;}
else {
if (i == 3) {
System.out.println("明儿再来吧~");
} else {
System.outprintln("登录失败,您还剩余"+(3-i)+"次机会");
}
}
}
}
String 字符串的遍历
public char] toCharArray() 将字符串转换为字符数组
public char chatAt (int index)根据索引找字符
public int length():返回字符串的长度
StringBuiler
提高字符串的操作效率
StringBuilder的介绍:
1.一个可变的字符序列
2.StringBuilder是字符串缓冲区,将其理解是容器,这个容器可以存储任意数据类型,但是只要进入到这个容器,全部变成字符串。
public static void main(String[] args){
StringBuilder sb=newstringBuilder();
System.out.println(sb);
sb.append("红色");
System.outprintln(sb);
sb.append("绿色");
System.outprintln(sb);
sb.append("蓝色");
System.out.println(sb);
}
输出
红色
红色绿色
红色绿色蓝色
StringBuiler 构造方法
构造方法public StringBuilder() 说明: 创建一个空的字符串缓冲区(容器)
构造方法public StringBuilder(String str) 说明:创建一个字符串缓冲区,并初始化好指定的参数内容
stringBuilder常用成员方法:
1. public StringBuilder append(任意类型):添加数据,并返回对象自己
2. public StringBuilder reverse():将缓冲区中的内容,进行反转
3. public int length() :返回长度
4. public String tostring():将缓冲区的内容,以String字符串类型返回
StringBuildersb=newStringBuilder();
// 链式编程:调用的方法,返回的结果是对象,就可以继续向下调用方法
sb.append("红色").append("绿色").append("蓝色");
System.out.println(sb);
//情况:我数据在StringBuilder当中,我要调用的方法,StringBuilder没有,但是String有
// 解决:转换为string,再调用
string[] sArr=sb.toString.split(regex:"色");
for(inti=0;i<sArr.length;i++){
System.out.println(sArr[i]);
输出
红色绿色蓝色
红
绿
蓝
Object 类
所有的类,都直接或者间接的继承了Object 类(祖宗类)
Object类的方法是一切子类都可以直接使用的的,所以我们要学习Object类的方法。
Object的 toString 方法:
public String toString() 默认是返回当 前对象在堆内存中的地址信息
开发中直接输出对象,默认输出对象的地址其实是毫无意义的。
开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息。
tostring存在的意义
父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息!!
Equals
指示其他某个对象是否与此对象“相等”
public boolean equals(Object o) 默认是比较当前对象与另一个对象的地址是否相同 ,相同返回回true,不同返回false
equals存在的意义
父类equals方法存在的意义就是为了被子类关重写,以便子类自己来定制比较规则。
Math类
Math类:包含执行基本数字运算的方法
public static int abs(int a):获取参数绝对值
public static double ceil(double a):向上取整
public static double floor(double a):向下取整
public static int round(float a):四舍五入
public static int max(int a,int b) :获取两个int值中的较大值
public static double pow(double a,double b):返回a的b次幂的值
public static double random ():返回值为double的随机值,范围[0.0,1.0)
例
public static void main(String[] args){
System.out.println(Math.abs(-123)); // 123
System.out.println(Math.abs(-12.3)); // 12.3
System类常见方法:
1. public static void exit(int status) : 终止当前运行的 Java 虚拟机,非零表示异常终止
2. public static long currentTimeMillis():返回当前系统的时间毫秒值形式
-返回1970年1月1日 日时0分0秒,到现在所经历过的毫秒值
3. public static void arraycopy(Object src, int srcpos, Object dest, int destpos, int length):数组拷贝
1.数据源数组
2.起始索引.目的地数组
4.起始索引
5.拷贝的个数
public static void main(string[] args){
int[] arr = {11,22,33,44,55};
int[] destArr=new int[3];
System.arraycopy(arr,srcPos:2 ,destArr,destPos:0,length:3);
for(inti=0;i<destArrlength;i++){
System.out.println(destArr[i]);
}
输出
33
44
55
BigDecimal类:
解决小数运算中,出现的不精确问题
BigDecimal创建对象:
public BigDecimal(double val) :不推荐,无法保证小数运算的精确
public BigDecimal(String val)
public static BigDecimal valueof(double val)
BigDecimal常用成员方法:
public BigDecimal add(BigDecimal b):加法
public BigDecimal subtract(BigDecimal b):减法
public BigDecimal multiply(BigDecimal b):乘法
public BigDecimal divide(BigDecimal b):除法
public BiqDecimal divide(另一个BigDecimal对象,精确几位,舍入模式):除法
public static void main(string] args){
BigDecimal bd1=BigDecimal.valueof(10.0);
BigDecimal bd2=BiaDecimal.valueof(3.0):
System.out.println(bd1.divide(bd2,scale:2,RoundingMode.HALF_UP)); // 3.33
System.out.println(bd1.divide(bd2,scale:2,RoundingMode.UP)); // 3.34
System.out.println(bd1.divide(bd2,scale:2,RoundingMode.DOWN)); // 3.33
BigDecimal result=bd1.divide(bd2,scale:2,RoundingMode.HALF_UP);
double v=result.doubleValue();
Math.abs(v);
}
正则表达式
[abc] 只能是a,b,或c
[^abc] 除了a,b,c之外的任何字符
[a-zA-Z] a到z A到Z,包括(范围)
[a-d[m-p]] a到d.或m通过p:([a-dm-p]联合)
[a-z&&[def]] d,e,或f(交集)
[a-z&&[^bc]] a到z,除了b和c;([ad-z]减法)
[a-z&&[^m-p]] a到z,除了m到p;([a-lq-z]减法)
任何字符
\d 一个数字: [0-9]、
\D 非数字: [^0-9]
\s 一个空白字符: [ \t\n\x0B\f\r]
\S 非空白字符: [^\s]
\w [a-zA-Z_0-9] 英文、数字、下划线
\W [^\w] 一个非单词字符
\ : 转义字符
System.out.println("\t"); \--->t---> 解密成功 ---> tab键
数量:
X? X, 次或日次
X* X,零次或多次(任意次数)
X+ X,一次或多次
X {n} X,正好n次
X{n,} X, 至少n次
X{n,m} X,至少n但不超过m次
例:
1.QQ号正则
不能以日开头全部都是数字5~12位
2. 手机号正则
必须是1开头
第二位:3456789全都是数字,必须是11位
3. 邮箱正则
zhangSan@itcast.cn zhangsan@163.com 123456@qq.com
zhangsan@sina.com
zhangsan@itcast.qq.com zhangsan@xxx.edu zhangsan@xxx.org
public static void main(string[]args){
string qqRegex="[1-9]\\d{4,11}";
System.out.println("01256"matches(qqRegex));
String telRegex="[1][3-9]\\d{9}";
Systemoutprintln("15611111111"matches(telRegex));
string emailRegex="\\w+[@][\\w&&[^_]]+(\\.[a-z]{2,3})+";
System.out.println("zhangSan@itcast.cn"matches(emailRegex
System.out.printin("zhangsanitcast.qq.com"matches(emailRegex)); System.out.println("zhanganitcast.cn"matches(emailRegex)); System.out.println("zhangSan@itcast"matches(emailRegex));
使用正则表达式爬取信息
需求:请把下面文本中的电话,邮箱,座机号码,热线都爬取出来。
public static void main(String[] args){
String data="来黑马程序员学习Java,"+
"电话:18666668888,18699997777或者联系"+
"邮箱:boniu@itcast.cn 邮箱:bozai@itcast.cn 邮箱2:dlei0009@163.com"+"座机电
话:01036517895,010-98951256"+
"热线电话:400-618-9090 ,400-618-4000,4006184000,4006189090";
// 定义爬取正则
String regex ="1[3-9]\\d{9} \\w+@[\\w&&[^ _]]+(\\.[a-z]{2,3})+ |0\\d{2,3}-?\\d{7,8}|400-?\\d{3}-?\\d{4}";
// 将正则表达式封装为一个Pattern对象
Pattern pattern=Pattern.compile(regex);// 获取匹配器对条
Matcher matcher=patternmatcher(data);//通过匹配器,从内容中爬取信息
while(matcher.find()){
System.out.println(matcher.group());
}
}
Date类:
表示时间的类
1.构造方法 :
public Date():将当前时间,封装为Date日期对象
public Date(long time):把时间毫秒值转换成Date日期对象
2. 常见方法 :
public long getTime():返回从197日年1月1日 00:00:00走到此刻的总的毫秒数
public void settime(long time):设置日期对象的时间为当前时间毫秒值对应的时间
public static void main(string[] args){
// 将当前时间,封装为Date日期对象
Date d1=new Date();
System.out.println(d1);
}
SimpleDateFormat 类
用于日期格式化
//创建一个日期格式化对象,使用[默认模式]
SimpleDateFormat simpleDateFormat=new SimpleDateFormat()
// 创建一个日期格式化对象,[手动指定模式]
SimpleDateFormat simpleDateFormat=new SimpleDateFormat( pattern:"yyyy年MM月dd日 HH:mm:ss");
// 创建Date对象,封装此刻的时间
Date date=new Date();
// 将日期对象,转换为字符串
string result=simpleDateFormat.format(date);
Calendar 类
代表的是系统此刻时间对应的日历,通过它可以单独获取、修改时间中的年、月、日、时、分、秒等。
1. 创建对象 :
public static Calendar getInstance(): 获取当前时间的日历对象
2.常用方法 :
public int get(int field):取日历中的某个字段信
public void set(int field, int value):修改日历的某个字段信息
public void add(int field,int amount):为某个字段增加/减少指定的值
public static void main(string[] args){
// 1.获取日期对象(此刻的时间)
Calendar c=Calendar.getInstance();
//2.调用set方法,将时间设置为2050年3月1日
c.set(year:2050, month: 2, date:1);
char[] weeks ={'','日',"-',"二',"三',四',"五','六'};
//3.获取星期
int weekIndex=cget(Calendar.DAY_OF_WEEK);
if(weeks[weekIndex]=='四'){
System.out.printin("今天是疯狂星期四,我要奢侈一把~");
} else {
System.out.println("今天不是疯狂星期四,吃不起KFC");
}
}
用于时间的格式化和解析:
1. 对象的获取 :
static DateTimeFormatter ofPattern(格式):获取格式对象
2.格式化 :
String format(时间对象):按照指定方式格式化
3. 解析 :
LocalDateTime.parse("解析字符串",格式化对象);
LocalDate.parse("解析字符串",格式化对象);
LocalTime.parse("解析字符串",格式化对象);
public class DurationDemo {
public static void main(String[] args){
// 此刻日期时间对象
LocalDateTime today=LocalDateTime.now;
System.out.println(today);
//昨天的日期时间对象
LocalDateTime otherDate=LocalDateTime.of(year:2023month:2,dayOfMonth: 4,hour:0,minute:0,second:0);
System.out.printin(otherDate);
Duration duration=Durationbetween(otherDatetoday);// 第二个参数减第一个参数
System.out.println(durationtoDays()); // 两个时间差的天数
System.out.println(durationtoHours()); // 两个时间差的小时数
System.outprintln(durationtoMinutes()); // 两个时间差的分钟数
System.out.printin(durationtoMillis()): // 两个时间差的毫秒数
System.out.println(durationtoNanos()); // 两个时间差的纳秒数
}
}