javaSE学习笔记(第五章)

JavaSE第五章(API_常用类)

1.Java API

API: 概述应用程序编程接口

API文档:是对Java预先定义的类或接口功能和函数功能的说明文档

目的是提供给开发人员进行使用帮助说明

2.基本数据类型包装类

1.基本数据类型:

byte short int long float double char boolean

基本数据类型 没有面向对象的使用方法,所以java为每种基本累心定义了一个类,来表示基本数据类型,这个类叫做包装类(int 是基本类型 Integer是引用类型)(继承number类)

 

Integer 为例:

类型为Integer的对象包含一个单一字段,其类型为int

功能包含最大值最小值还有比较方法 构造方法等其他方法

构造方法:

Integer i1=new Integer("数字");

Integer i2=new Integer(10);

比较方法:

compareTo()//

equals()//比较内容

max()

min()

转换方法:(装箱拆箱)

toBinaryString(数字)//转二进制

toHexString(数字)//转16进制

toOctalString(数字)//转8进制

intValue()//把包装的基本类型取出来

parseInt(" ")//将一个String类型转为int类型

toString()//将int包装类型转为String类型

valueOf()//传入基本类型返回引用类型 也可以将String类型返回引用类型

自动装箱:(超出-128~127范围就会new新的对象)

如 int a=10;

装箱:Integer a1=new Integer(a)或=Integeer.valueOf(a)

自动装箱:Integer a1=a;//默认自动调用valueOf()方法 自动将基本类型转为引用类型

自动拆箱:将引用类型的转成基本类型 默认自动intValue()方法

3.Object类

Object类是所有Java类的祖先(根基类)。每个类都使用 Object 作为超类(父类)。所有对象(包括数组)都实现这个类的方法。 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类

public class Person { ...

}

等价于:

public class Person extends Object {

...

}

Object类提供的方法:

1.toString方法:

Object类中定义有public String toString()方法,其返回值是 String

类型

可以根据需要在用户自定义类型中重写toString()方法。

2.equals方法:

== 用于基本类型比较  比较的值是否相等
== 用于引用类型比较  比较的是引用地址(对象地址)是否相等
字符串类中重写了Object类中的equals()  实现是比较两个字符串中每一个字母是否相等所以一般默认为equals() 方比较的是对象中内容是否相等

Object类中定义有: public boolean equals(Object obj)方法 提供定义对象是否“相等”的逻辑。

equals方法的定义:x.equals(y)

当x和y是同一个对象的引用(同一类对象且内容相同 不一定是相同对象)时返回true否则false

4.Arrays类(java.util.Arrays类)

用于操作数组工具类

1.equals方法:(数组比较)

比较两个非同一数组是否相等

声明:public static boolean equals(type[]a,type[]a2)

如果两个相等,则返回true,否则返回false

2.sort方法:数组排序

·作用于数组的所有元素 public static void sort(type[] a)

·作用于数组指定范围内的元素 public static void sort(type[] a, int fromIndex(包括), int toIndex(不包括))

按数字升序进行排序

·(不是很理解)自定义对象排序: 自定义类实现Comparable接口 重写compareTo方法(自定义对象都要实现Comparable接口,这个接口中有个public int compareTo(Object o())方法 必须得实现 不然要定义为抽象类)

compareTo方法重写:

例如:public int compareTo(Object o()){

return this.age-o.age;

}

定义的规则就是按年龄来排序 从小到大 返回int类型

大于0 前面大于后面 前后交换

等于0 不变

小于0 前面小于后面 前后交换

总结:等于0 不变 ,大于或小于都交换

如果比较的是String类型的 需要用Integer.parseInt(String str) 将字符型转为int型

Integer.parseInt(String str) 就这个就可以 无需方法体

3.binarySearch:使用二分法搜索指定数组

声明:

·public static int binarySearch(type[] a, type key)

·public static int binarySearch(long[] a,int fromIndex包括,int

toIndex不包括,long key)

如果key在数组中,则返回搜索值的索引;否则返回-1

二分法算法实现:

public static void main(String[] args){
int[] arr={2,3,5,4,8,5,9};
Arrays.sort(arr);//二分法查找之前要先给数组排好序
System.out.println(Array.toString(arr));//输出数组排序后的结果
System.out.println(BinarySearch(arr,5))
public static String BinarySearch(int[] arr,int value){
int low=0;
int high=arr.length-1;
while(low<higth){
int mid=(low+higth)/2;
if(value==arr[mid]){
return "您输入的下标为"+mid;
}
if(value>arr[mid])low=mid+1;
if(value<arr[mid])low=mid-1;
}
}
return "该数不在当前数组中"
}

4.toString()方法:

返回指定数组内容的字符串表示形式

声明:public static String toString(type[] a)

5.Arrays.copyof(原数组名,新长度) 动态数组扩容 拷贝

int b=Arrays.copyof(a,20);

返回一个新数组,并将原数组复制到新数组

5.String类/StringBuffer类/StringBuilder类

1.String类

  1. String类概述:

    String(final修饰)修饰不可变 一旦变了就是new了个新的对象

    字符串是由多个字符组成的一串数据(字符序列)的字符串常量,java中所有字符串都是String类的实例

2.两种创建方法:

 

String s = "abc";

先在栈中创建一个对String类的对象引用变量s,然后去字符串常量池中查找有没有"abc", 如果没有则在常量池中添加”abc”, s引用变量指向常量池中的”abc”,如果常量池中有,则直接指向改地址即可,不用重新创建.

String s = new String("abc");

在堆中创建新对象,值存储在堆内存的对象中

3.构造方法:

·public String() //无参构造

String s=new String();

·public String(String str) //String类型的构造方法

String s=new String("ABC");

//·public String(byte[] bytes)

//·public String(char[] value)

4.判断功能:

· boolean equals(Object obj) // 判断字符串内容是否相等

如 s1.equals(s2)

· boolean equalsIgnoreCase(String str) //判断字符串内容是否相等 忽视大小写

如验证码不区分大小写

· boolean contains(String str) //是否包含指定的子串 如s1.contains("c") s1中是否包含"c"字符串

· boolean isEmpty() //判断为"" 即空

· boolean startsWith(String prefix) //判断是否以指定字符串开头

s.startsWith("a")//字符串是否以a结尾

· boolean endsWith(String suffix)//判断是否以指定字符串结尾

如System.out.println(s1.endsWith("bc"));

· compareTo(String str)//比较字符串大小 System.out.println(s3.compareTo(s4)); 相同返回0 不同返回之差

5.获取功能:

int length()//获取字符串长度

char charAt(int index)//索引 获取指定位置的字符串

int indexOf(String str)//从前往后找 只找首次出现的位置 返回位置

int indexOf(String str,int fromIndex)// 从指定位置开始

s.LastindexOf("a");

s.LastindexOf("a");从后往前找 但是位置标识还是0 1 2 3 4 5.....

String substring(int start)//从指定位置开始截取 到后面整段

String substring(int start,int end)//在指定范围内截取

6.转换功能:

·byte[] getBytes()//编码 把字符转换成字节 默认编码UTF-8

String s="asb";

byte[] a=s.getByte("UTF-8");

String b=new String(a,"UTF-8");//解码 将字节转换成字符串

·char[] a=s.toCharArray()//把字符串转换成char数组

System.out.println(Arrays.toString(a));//以数组的形式输出

·static String valueOf(char[] chs)

String s=new String(a);

String s1=String.valueOf(a);

两个一样的 都是将char数组转换成字符串

·String toLowerCase()//转小写

String a="zhajhsHJ";

System.out.println(a.toUpperCase());

·String toUpperCase()//转大写

·String concat(String str)

·String [] split(分割符) 返回的是数组 根据正则表达式拆分为数组

如 String s="nsdjjdkk&hjj&hhj";

String[] arrays=s.split("&");[nsdjjdkk&hjj&hhj]

正则表达式(规则表达式):验证格式 匹配模式

1.Pattern类 (基本不用)

Pattern p=Pattern.compile("a")//定义一个规则

Matcher m=p.matcher("ab");//输入的内容

boolean b=m.matches()//匹配

2.String类

String s="abc";

boolean b=s.matches("a*b");

记符号:

1.数字类\d 相当于[0-9] 范围可自定

\w 可以匹配大小写 数字 下划线

.也是特殊字符 如邮箱的时候用到 用 \ \ .表示

? 一次或没有

*多次或没有

+一次或多次

{n}恰好n次

{n,}至少n次

{n,m}至少n次 最多m次

^不是 非[ ^ 0-9] 不是0到9

2.字符类

[abc]出现a或b或c

[a-z]小写字母

[A-z]大小写字母 相当于[a-zA-Z]

7.替代功能:

replace:

String s="asdjns";

System.out.println(s.replace("a","C"));//把a换成A

replaceAll:

System.out.println(s.replaceAll("规则 正则表达式 如 \ \d","要替换成的字符 如C"));//把数字替换成C

replaceFirst

System.out.println(s.replaceAll("规则 正则表达式 如 \d","要替换成的字符 如C"));//把第一个数字替换成C

String trim 去除字符串两端空格

2.StringBuffer类(缓冲区 可变)

当向StringBuffer中添加内容时,是将内容添加到底层的数组中,数组没有被final修饰

当数组装满时,会创建一个新数组,将新数组的地址给基层数组,StringBuffer对象是不会改变

添加功能

append(" ") //附加 在末尾

insert(在哪个位置插入,“插入的字符串”) //插入

删除功能

deleteCharAt(要删除的位置)

public StringBuffer delete(int start,int end) //包含开始不包涵结束 删除一段

替换功能

public StringBuffer replace(int start,int end,String str)

反转功能

public StringBuffer reverse()//逆序

截取功能

public String substring(int start) //返回一个新的字符串

public String substring(int start,int end)

截取功能和前面几个功能的不同

返回值类型是String类型,本身没有发生改变

3.StringBuilder类(缓冲区 可变 多线程不安全)

StringBuilder类功能和StringBuffer功能完全一致, StringBuffer是线程安全的

StringBuffer 有synchronized关键字 加锁了 得排队 一个一个访问 安全

多线程访问同一个东西 才会出现安全问题

6.Math类/Random类/System类

1.Math类

abs 绝对值

sqrt 平方根

pow(double a, double b) a的b次幂

max(double a, double b)

min(double a, double b)

random() 返回 0.0 到 1.0 的随机数

2.Random类

用于生产随机数( 导包java.util.Random)

package com.ffyc.javaapi.math;
​
import java.util.Arrays;
import java.util.Random;
​
public class RandomDemo {
​
    public static void main(String[] args) {
        Random r = new Random();
        //int a=r.nextInt(4);
        //System.out.println(r.nextInt());//在int的范围内随机取出
        //System.out.println(r.nextInt(4));//0--<4  在指定的区间内随机取出
 //System.out.println(r.nextBoolean());
​
        byte[] b = new byte[5];//随机取出 数组.length个随机数
              r.nextBytes(b);
        System.out.println(Arrays.toString(b));
​
    }
}

构造方法:public Random()

成员方法 :public int nextInt()

public int nextInt(int n)

3.System类

(系统的东西平时用不得 了解)

成员方法:

public static void exit(int status)

public static long currentTimeMillis()

7.Date类/Calendar类/SimpleDateFormat类

1.Date类(基本不用了 被代替)

package com.ffyc.javaapi.date;
​
import java.util.Date;
​
public class DateDemo {
​
    public static void main(String[] args) {
​
        long l = System.currentTimeMillis();
​
        Date date = new Date();//创建一个日期对象,里面包含了程序运行时的那一刻的时间,提供方法方便操作
        System.out.println(date.getTime());//1637485760505
        System.out.println(date.getYear()+1900);// 称为过期方法,不建议使用,有新方法代替
        System.out.println(date.getMonth()+1);//0,1,2,3,4,
​
        Date date1 = new Date(1637483235781L);
        System.out.println(date1);
​
    }
}

2.Calendar类(用这个)

1.Calendeer类是一个抽象类,创建对象过程对于程序员来说是透明的,只需要使用getInstance方法创建即可

Calendar c=Calendar.getInstance();

c.get(Calendar.YEAR);

package com.ffyc.javaapi.date;
​
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
​
public class CalendarDemo {
​
    public static void main(String[] args) {
         /*
           Calendar 是一个抽象类,抽象类不能创建对象, 怎么表示一个时间?
           Calendar.getInstance(); 获得是一个子类对象,GregorianCalendar 公历
         */
        //Calendar c = Calendar.getInstance();
         Calendar c = new GregorianCalendar();//获得日历对象  实现是子类
         System.out.println(c);
         int date =  c.get(Calendar.DAY_OF_MONTH);
         System.out.println(date);
        int dayofYear =  c.get(Calendar.DAY_OF_YEAR);
        System.out.println(dayofYear);
        System.out.println(c.get(Calendar.WEEK_OF_YEAR));
        System.out.println(c.get(Calendar.WEEK_OF_MONTH));
        System.out.println(c.get(Calendar.DAY_OF_WEEK));//0
​
        Date d = c.getTime();
        long t = c.getTimeInMillis();
​
    }
}
​

3.SimpleDateFormat类(日期格式化类)

  1. 构造方法

SimpleDateFormat(格式); // yyyy-MM-dd

2.日期转字符串

Date now=new Date();

myFmt.format(now);

  1. 字符串转日期

myFmt.parse(“2018-02-10”);

字符串日期格式与 指定格式必须一致 例如:String s = “2018-03-15”;

new SimpleDateFormat(“yyyy-MM-dd”)

4.格式

 

 

 

package com.ffyc.javaapi.date;
​
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
​
public class SimpleDateFormatDemo {
​
    /*
       时间--long类型
       时间--对象类型
​
       SimpleDateFormat
           将字符串日期  转为 Date(对象)     在网页中输入生日(字符串) 提交给java --->date对象
           将Date(对象) 转为 字符串         java中日期Date对象 ----> 网页--->字符串
     */
​
    public static void main(String[] args) {
         /*String birthday = "2000-10-10";
         *//*
            日期格式化 yyyy-MM-dd  参考API
          *//*
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = sdf.parse(birthday);
            System.out.println(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }*/
​
        //日期转字符串
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss SSS E");
        String  s = sdf.format(date);
        System.out.println(s);
​
    }
}
​

8.BigInteger/BigDecimal

1.BigInteger类

在 Java 中,有许多数字处理的类,比如 Integer类,但是Integer类有一定的局限性。我们都知道 Integer 是 Int 的包装类,int 的最大值为 2^31-1。若希望描述更大的整数数据时,使用Integer 数据类型就无法实现了,所以Java中提供了BigInteger 类。 BigInteger类型的数字范围较Integer,Long类型的数字范围要大得多,它支持任意精度的整数,也就是说在运算中 BigInteger 类型可以准确地表示任何大小的整数值而不会丢失任何信息BigInteger类位于java.math包中

构造方法

BigInteger(String val) /BigInteger(byte[] val) ...

基本运算方法

add(),subtract(),multiply(),divide()

package com.ffyc.javaapi.math;
​
import java.math.BigInteger;
​
public class BigIntegerDemo {
​
    public static void main(String[] args) {
        /*
            BigInteger  大整数
            long 8  9223372036854775807
         */
​
         // long n = 9223372036854775808L;
​
        BigInteger b = new BigInteger("922337203685477580711111111111111111111111111111");
        BigInteger b1 = new BigInteger("22222222222222222222222222222222222222222222222");
​
        BigInteger b2 =  b.add(b1);
        /*System.out.println(b);
        System.out.println(b1);
        System.out.println(b2);*/
​
        System.out.println(b.multiply(b2));
        System.out.println(b.divide(b2));
​
    }
}
​

2.BigDecimal类

● 在计算机中不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度。

● 根本原因是:十进制值通常没有完全相同的二进制表示形式;十进制数的二进制表示形式可能不精确。只能无限接近于那个值.

double a = 1.0-0.9;

double b = 0.8-0.7;

System.out.println(a==b); // 结果?

• 但是,在项目中,我们不可能让这种情况出现,特别是金融项目,因为涉及金额的计算

都必须十分精确,你想想,如果你的支付宝账户余额显示193.99999999999998,那是

一种怎么样的体验?

• Java在java.math包中提供的API类BigDecimal

• 构造方法

BigDecimal(String val)

package com.ffyc.javaapi.math;
​
import java.math.BigDecimal;
​
public class BigDecimalDemo {
    /*
       BigDecimal  大浮点
     */
    public static void main(String[] args) {
        //System.out.println(12-11.9);//0.09999999999999964
​
        BigDecimal b1 = new BigDecimal("12");
        BigDecimal b2 = new BigDecimal("11.9");
​
        System.out.println(b1.subtract(b2));
​
        BigDecimal b3 = new BigDecimal("10");
        BigDecimal b4 = new BigDecimal("3");
​
        //                               精度         舍入模式
        System.out.println(b3.divide(b4,3,BigDecimal.ROUND_CEILING));
​
​
    }
}
​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

团团kobebryant

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

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

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

打赏作者

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

抵扣说明:

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

余额充值