java学习日记-常用API

本文介绍了Java中Math类的基本运算,如开平方根和立方根,以及abs和random方法。讨论了System类的exit状态码和数组拷贝。详细讲解了Object类的toString、equals和clone方法。提到了BigInteger和BigDecimal的使用,以及正则表达式的应用,包括Pattern和Matcher。还概述了Java时间处理,从JDK7的Date、SimpleDateFormat到JDK8的新特性,如ZoneId和Instant。最后提及了网络爬虫的基本概念。

Math:

sqrt开平方根;cbrt开立方根

abs只用于int,无对应值的时候会出错

absExact有报错的时候会有提示

random返回的是0.0到1.0的随机数字

System:

exit状态码:0正常结束,非0不正常结束

数组拷贝需要数组类型保持一致,否则会报错;不够长也会报错;原数组和目的数组都是引用数据类型,

那么子类类型可以赋值给父类类型

Runtime:

Runtime表示当前虚拟机的运行环境

Runtime r1=Runtime.getRuntime();创建对象,获取对象
获取的都是同一个runtime
r1.exit(0);
== Runtime.getRuntime().exit(0);
r1.exe("命令 eg:notepad(打开notepad)");//但是有一些命令是用不了的

Object:

Object是Java中的顶级父类。所有的类都直接或间接的继承于Object类。object类中所有都可以被子类访问;没有成员变量;只有无参构造方法。

toString()可以把object对象写成字符串的表达形式:

Object obj = new Object();
String str1 = obj.toString();
System.out.println(str1);//java.lang.Object@119d7047 (包名+类 @ 地址值)
和直接打印对象是一样的
System.out.println(obj);

Object中的equals比较的是地址值

Object中的clone是protected,所以只能调用;

重写clone后要让本类实现一个接口:Cloneable(空的,标记性接口,说明当前类的对象可以clone)

浅克隆和深:

对于基本数据类型:都是复制值

对于引用数据类型:浅克隆创建对象后指向的是同一个数据,深克隆创建对象后会再复制一份引用数据指向的数据,再指向新的空间,和原对象互不干扰。

字符串都是在串池管理

object中的clone都是浅克隆

深克隆自己重写clone

Objects:

BigInteger:

对象一旦创建,值不可以改变

计算也只是创建一个新的对象

存储方式:截取成数组储存

构造方法:

radix为进制,val需要符合相应进制的规范

val只能是数字字符串,不然会报错

valueOf方法:
  1. 取值范围比较小,在long范围内,超出不行

  1. 在内部对常用的数字:-16~ 16进行了优化。提前把-16 ~ 16 先创建好BigInteger的对象,如果多次获取不会重新创建新的。

常见成员方法:

public double doubleValue(BigInteger val) 转double

eg:

BigInteger a=new BigInteger(“1”);
BigInteger b=new BigInteger(“1”);
BigInteger c=a.add(b); //2 
BigInerger[] arr=a.divideAndaRemainder(b); //arr.length==2

BigDecima:

小数的精确计算,或者用于很大的小数

构造方法:

1.BigDecima bd1=new BigDecima(double name);
double b=0.1;
BigDecima bd1=new BigDecima(b);
不一定准确
2.BigDecima bd2=new BigDecima(String s);
BigDecima bd2=new BigDecima("0.01");
3.通过静态方法 有优化,对于0~10的数字有预先准备
BigDecima bd3=new BigDecima.valueOf(10);

常见方法:

正则表达式:

import java.util.regex.Pattern;

可以在文档汇总查Pattern

作用:校验字符串是否满足规则;在一段文本中查找满足要求的内容

方法:

matches(“正则表达式”)

System.out.print1n( "a".matches( "[abc]")); // true
System.out.print1n( "ab".matches( "[abc]")); //false
System.out.print1n( "ab".matches( "[abc][abc]"));//true 

?i匹配时不区分大小写
?!除了后面的

细节:如果要求两个范围的交集,那么需要写符号&& [a-z&&[b-c]]

如果写成了一个&,那么此时&表示就不是交集了,而是一个简简单单的&符号

\d等需要再加一个\表示转义

要打".",需要\\.

捕获分组:

用括号表示分组

\\组号:表示调用第几组的 (只能用在内部)

$组号:可以外部

非捕获分组:

不占用组号

爬虫:

正则表达式:import java.util.regex.Pattern;

匹配器Matcher:import java.util.regex.Matcher;

文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取。在大串中去找符合匹配规则的子串。

//正则表达式创建
Pattern p=Pattern.compile(“正则表达式”);
//获取文本匹配器的对象
//m:文本匹配器的对象
//str:大串
//p:规则
//m要在str中找符合p规则的小串
Matcher m = p.matcher(str);

//拿着文本匹配器从头开始读取,寻找是否有满足规则的子串
//如果没有,方法返回false
//如果有,返回true。在底层记录子串的起始索引和结束索引+1
boolean b = m.find( );

//方法底层会根据find方法记录的索引进行字符串的截取
//substring(起始索引,结束索引);包头不包尾 (所以结束索引要+1

//会把截取的小串进行返回。
string s1 = m.group( );
System.out.print1n(s1);

再次调用find会直接从一个位置开始找,重复循环直到find返回false

网络爬虫:

贪婪&非贪婪爬取:

尽可能地多(少)获取数据。

eg:对于ab+,前者会尽可能多获取b,后者只有ab

`String s="ab+" //贪婪爬取
String s="ab+?" //非

时间:

jkd7以前时间相关类:

Date:

Date类是一个JDK写好的Javabean类,用来描述时间,精确到毫秒。利用空参构造创建的对象,默认表示系统当前时间。利用有参构造创建的对象,表示指定的时间。

public class Date{
    private long time;//计算时候都要用long
    public Date(){
        this.time=System.currentTimeMillis();
    }
     public Date(long time){
        this.time=time;
    }
    public setTime(long time){
        this.time=time;
    }
      getTime() return this.time;//比较时间先后的时候要比较里面的time 而不是对象Date
}
//java内部有可以直接用
SimpleDateFormat:

格式化时间,把时间按照我们喜欢的格式;把字符串的时间转成Date

默认格式用斜杠隔开的

SimpleDateFormat sdf=new SimpeDateFormat("yyyy年MM月dd日 HH:mm:ss");

解析的时候要传入和对象中格式一致的字符串
Calendar:

ps:month获取的范围是0~11,对应1到12

星期从1开始是星期日

field:对应0~纪元(Calendar.YEAR),1~年 2~月 3~一年中的第几周 4~一个月的第几周 5~日

jdk8新增:

更简单安全

Zoneld:
Instant:

is包括前后,判断时间的前后

ZoneDateTime:

with 年月日等;mius、plus同理

DateTimeFormatter:

时间的格式化和解析

Calendar:

get中获取的是对象,输出的话是对象,不是对象的值,还要getValue()

工具类:
Period period=Period.between(LocalDate ld1,ld2) // ld2-ld1
//例如period.getYeas获取其中的特定
//period.toTotalMonth 全部换算成月
CHronoUnit中元素最多,

包装类:

char-character int-integer 其他都是首字母大写

JDK5后可以自动拆箱和包箱 (不需要new,不需要调用方法)

除了character都有对应的parse***方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃芒果的蘑菇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值