Java基础

基本数据类型

一般情况下,整数用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()); // 两个时间差的纳秒数 
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值