常用API

1. 常用API

  • java写好的技术(功能代码), 咱们可以直接调用
  • 下载aqi文档:

    http://www.oracle.com/technetwork/java/javase/downloads/index.html

2. String

  • String类定义的变量可以用于存储字符串, 同时String类提供了很多操作字符串的功能,
  • java.lang.String类表示字符串,String类定义的变量可以用于指向字符串对象, 然后操作该字符串
  • 在java中随便使用 双引号括起来 的都是String对象。
  • String其实常被称为不可变字符串类型, 它的对象在创建后不能被改变

2.1 创建对象方式

  1. 直接使用双引号围起来
  2. new 构造器得到字符串对象
    构造器说明
    public String()创建一个空白字符串对象, 不含有任何内容
    public String(String original)根据传入字符串的内容,来创建字符串对象
    public String(char[] chs)根据字符数组的内容,来创建字符串对象
    public String(byte[] chs)根据字节数组的内容,来创建字符串对象
  3. 两种方式的区别(面试笔试题会问到)
    1. 双引号给出的字符串对象,存在于堆内存中的常量池中,相同内容只会存储一份。
    2. new 字符串对象,每new一次都会在堆内存中产生一个字符串对象。

2.2 String常见面试题

  1. String s2 = new String("abc"); // 创建了两个对象 
    String s1 = "abc"; // 创建了0个对象
    s1 != s2 // 因为指向不一样
    
    因为双引号给出的会放在字符串常量池, new出来的对象放在堆内存
    第一个已经创建出来了常量池,所以这个不会再创建
  2. String s1 = "abc";
    String s2 = "ab";
    String s3 = s2 + "c"; 
    s3 != s1 // s2是一个变量, 只要不是双引号直接给出来的,结果都放在堆类型
    
  3. String s1 = "abc";
    String s2 = "a" + "b" + "c";
    s2 == s1; 
    
    java存在编译优化机制, 程序在编译时: 自动转成 跑的时候其实已经转换过了

2.3 String的常用方法(常用API)

  1. 判断字符串内容的
    • 背景:==判断字符串对象是 判断地址 的,这样会引起很多业务问题。
    • 必要性:判断字符串开发中更多时候希望判断内容一样就返回true,不在乎地址是不是一样,此时需要用equals方法。
    • 推荐使用String类提供的"equals"比较, 只关心内容一样即可
      方法名说明
      public boolean equals (Object anObject)将此字符串与指定对象进行比较, 只关心字符内容是否一致
      public boolean equalsIgnoreCase(String anotherString)将此字符串与指定对象进行比较, 忽略大小写比较字符串, 只关心字符内容是否一致
    • 结论:之后只要是字符串进行内容比较,那必须使用字符串的equals方法
    • 结论2:什么时候用==比较? 基本数据类型的比较,那就用
  2. 其他常用api方法:
    public class StringAPIOtherDemo5 {
        public static void main(String[] args) {
            // 1、public int length(): 获取字符串的长度
            String name = "我爱你中国love";
            System.out.println("字符个数:" + name.length());
    
            // 2、public char charAt(int index): 获取某个索引位置处的字符
            char ch = name.charAt(1);
            System.out.println(ch);
    
            System.out.println("------------遍历字符串中的每个字符--------------");
            for (int i = 0; i < name.length(); i++) {
                // i = 0 1 2 3 4 5 6 7 8
                char c = name.charAt(i);
                System.out.println(c);
            }
    
            // 3、public char[] toCharArray():: 把字符串转换成字符数组
            char[] chars = name.toCharArray();
            for (int i = 0; i < chars.length; i++) {
                System.out.println(chars[i]);
            }
    
            // 4、public String substring(int beginIndex, int endIndex) :截取内容,(包前不包后的)
            String s1 = "Java是最牛的编程语言之一~~";
            String rs = s1.substring(0,12);
            System.out.println(rs);
    
            // 5、public String substring(int beginIndex):从当前索引一直截取到末尾
            String rs2 = s1.substring(5);
            System.out.println(rs2);
    
            // 6、public String replace(CharSequence target, CharSequence replacement)
            String s2 = "三胖哥是最牛的80后,三胖哥的发型yyds,好想跟三胖哥一样!!";
            String rs3 = s2.replace("三胖哥", "***");
            System.out.println(rs3);
    
            // 7、public boolean contains(CharSequence s)
            System.out.println(s2.contains("三胖哥")); // true
            System.out.println(s2.contains("三胖哥1")); // false
    
            // 8、public boolean startsWith(String prefix)
            System.out.println(s2.startsWith("三胖哥")); // true
            System.out.println(s2.startsWith("三胖"));  //true
            System.out.println(s2.startsWith("三胖2"));  //false
    
            // 9、public String[] split(String s): 按照某个内容把字符串分割成字符串数组返回。
            String data = "王宝强、贾乃亮、蔡徐坤";
            String[] names = data.split("、");
            for (int i = 0; i < names.length; i++) {
                System.out.println("选择了:"  + names[i]);
            }
        }
    

3. ArrayList

  • 集合类, 集合是一种容器, 与数组类似, 不同的是集合的大小是不固定
  • 通过创建ArrayList的对象表示得到一个集合容器, 同时ArrayList提供了比数组更好用
  • 集合的特点:大小可变,可重复, 元素存在索引, 类型可以不固定,功能更加强大,适合做元素个数不能确定,同时存在怎增删操作的业务场景。集合中存储的对象并不是对象本身, 而是对象的地址
    1. 数组和集合的元素存储的个数问题
      • 数组定义后类型确定, 长度固定
      • 集合类型可以不固定, 大小是可变的
    2. 数组和集合适合的场景
      • 数组适合做数据个数和类型确定的场景
      • 集合适合做数据个数不确定, 且要做增删元素的场景
  • 购物车使用集合对象来存储商品对象更合适
    随时可能添加新商品进来(个数不确定)
    也随时可能删除商品对象

3.1 如何构建ArrayList的对象代表一个集合容器,存储数据。

  1. public ArrayList();
  2. ArrayList list = new ArrayList();

3.2 泛型:集合都是支持泛型的

  1. ArrayList < E >: 其实就说一个泛型类, 可以在编译阶段约束集合对象只能操作某种数据类型, 约束集合在编译阶段只能操作某种数据类型
  2. ArrayList list = new ArrayList();

  3. ArrayList list = new ArrayList();

  4. ArrayList list = new ArrayList();

  5. ArrayList list = new ArrayList();

    注意:

    集合和泛型都不支持基本数据类型,只能支持引用数据类型。

    以后定义集合都应该采用泛型

  6. 问题:我的集合就是要什么都存
    1. ArrayList list = new ArrayList();
    2. 推荐这样写:ArrayList list = new ArrayList<>();

3.3 ArrayList的常用方法

方法名说明
public boolean add(E e)将指定的元素追加到此元素的末尾
public void add(int index ,E element)在此集合中的指定位置插入指定的元素
方法名说明
public E get(int index)返回指定索引处的元素
pubic int size()返回集合中的元素的个数
public E remove(int index)删除指定索引处的元素, 返回被删除的元素
public boolean remove(Object o)删除指定的元素,返回删除是否成功
public E set(int index, E element)修改指定索引处的元素,返回被修改的元素

3.4 ArrayList遍历并删除元素

  1. 删除元素后,马上后退一步i–就可以了
  2. 从后往前遍历,边遍历变删除没毛病

3.5 ArrayList存储自定义类型的对象

  • ArrayList list = new ArrayList();
  • 从前往后边遍历边删除存在问题:可能会存在漏掉元素
  • ArrayList list = new ArrayList();
  • 注意:集合容器中存储的是每个对象的什么东西? 在堆内存中的地址!!

4. 集合案例

  1. 遍历并删除元素值

    • 某个班级的考试在系统上进行, 成绩大概为98,97,66,89,79,50,100,现在需要先把成绩低于80分的去掉

      定义ArrayList集合存储多名学员的成绩

      遍历集合每个元素, 如果元素值低于80分, 去掉它

package lwh;

import java.util.ArrayList;

public class apiapi {
    public static void main(String[] args) {
        ArrayList<Integer> scores = new ArrayList<>();
        scores.add(98);
        scores.add(77);
        scores.add(66);
        scores.add(89);
        scores.add(79);
        scores.add(50);
        scores.add(100);
        System.out.println(scores);

        for (int i = 0; i < scores.size(); i++) {
            int score = scores.get(i);
            if (score < 80) {
                scores.remove(i);
                i--;// 删除成功后, 必须退一步, 这样可以保证下次回到这个位置,如此不会跳过数据
            }
        }
        System.out.println(scores);
    }
}
  1. 存储自定义类型的对象

    • 某影院系统需要在后台存储上述三部电影, 然后依次展示出来

      定义一个电影类, 定义一个集合存储电影对象

      创建三个电影对象, 封装相关数据, 把三个对象存到集合中去

      遍历集合中的三个对象, 输出相关信息

package lwh;

import java.util.ArrayList;

public class ArrayListTest2 {
    public static void main(String[] args) {
        Movie m1 = new Movie("小",9.7,"李");
        Movie m2 = new Movie("多",9.7,"张");
        Movie m3 = new Movie("大",9.3,"王");
        ArrayList<Movie> movies = new ArrayList<>();
        movies.add(m1);
        movies.add(m2);
        movies.add(m3);
        for (int i = 0; i<movies.size();i++){
            Movie m = movies.get(i);
            System.out.println("电影名称: " + m.getName());
            System.out.println("电影得分: " + m.getScore());
            System.out.println("电影主演: " + m.getActor());
        }
    }
}
package lwh;

public class Movie {
    private String name;
    private double score;
    private String actor;
    public Movie(){

    }
        public Movie(String name, double score, String actor) {
        this.name = name;
        this.score = score;
        this.actor = actor;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public String getActor() {
        return actor;
    }

    public void setActor(String actor) {
        this.actor = actor;
    }
}
  1. 元素搜索

5. 常用API-Object

  1. toString方法
    方法名说明
    public String toString()默认是返回当前对象在堆内存中的地址信息: 类的全限名@内存地址
    1. 问题引出:
      • 开发中直接输出对象, 默认输出对象的地址其实是毫无意义的
      • 开发中输出对象变量, 更多的是希望看到对象的内容数据而不是对象的地址信息
    2. toString存在的意义
      • 父类toString()方法存在的意义就是为了被子类重写, 以便返回对象的内容信息, 而不是地址信息
  2. equals方法
    方法名说明
    public static boolean equals (Object o)比较当前对象与另一个对象的地址是否相同, 相同返回true, 不同返回false
    public static boolean isNull (Object obj)判断变量是否为null, 为null返回true, 反之
    1. 问题思考:
      • 直接比较两个对象的地址是否相同完全可以用"=="替代equals
    2. equals存在的意义:
      • 父类equals方法存在的意义就是为了被子类重写, 以便子类自己来定制比较规则

6. 常用API-Objects

  • objects类与object还是继承关系, Object类是从jdk 1.7 开始之后才有的
  • objects的equals方法比较的结果是一样的, 但是更安全

7. StringBuilder

  • StringBuilder是一个可变的字符串类, 我们可以把它看作是一个对象容器
  • 作用: 提高字符串的操作效率, 如拼接, 修改等
名称说明
public StringBuilder()创建一个空白的可变的字符串对象,不包含任何内容
public StringBuilder(String str)创建一个指定字符串内容的可变字符串对象
public StringBuilder reverse()将对象内容反转
public StringBuilder append(任意类型)添加数据并返回StringBuilder对象本身
public int length()返回对象内容长度
public String toString()通过toString()
public String toString()通过toString()就可以实现把StringBuilder转换为String
  • 为什么拼接, 反转字符串建议使用StringBuilder
    • String: 内容是不可变的, 拼接字符串性能差
    • StringBuilder: 内容是可变的, 拼接字符串性能好, 代码优雅
    • 定义字符串使用String
    • 拼接, 修改等操作字符串使用StringBuilder

7.1 案例: 打印整型数组内容

  • 需求: 设计一个方法用于输出任意整形数组的内容, 要求输出成如下格式:[11, 22, 33, 44, 55]
  • 分析:
    • 定义一个方法, 要求该方法能够接收数组, 并输出数组内容,
    • 定义一个静态初始化数组, 调用该方法, 并传入该数组
    package lwh;
    
    public class StringBuilderTest {
        public static void main(String[] args) {
            int[] arr1 = null;
            System.out.println(toString(arr1));
            int[] arr2 = {11, 22, 33, 44, 55};
            System.out.println(toString(arr2));
        }
    
        // 定义方法接收任意整型数组, 返回数组内容形式
        public static String toString(int[] arr) {
            if (arr != null) {
                // 2. 开始拼接内容
                StringBuilder sb = new StringBuilder("[");
                for (int i = 0; i < arr.length; i++) {
                    sb.append(arr[i]).append(i == arr.length - 1 ? "" : ",");
                }
                sb.append("]");
                return sb.toString();
            } else {
                return null;
            }
        }
    }
    

8. 常用API-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]

9. 常用API-System

  • System的功能是通用的, 都是直接用类名调用即可, 所以System不能被实例化
    方法名说明
    public static void exit(int status)终止当前运行的java虚拟机,非零表示异常终止
    public static long currentTimeMillis()返回当前系统的时间毫秒值形式
    public static void arraycopy(数组源数组, 起始索引, 目的地数组,拷贝个数)数组拷贝
    system.exit(0) // JVM终止
    

10. 常用API-BigDecimal作用

  • BigDecimal的作用: 用于解决浮点型运算精度失真的问题
  • 使用步骤:

    创建对象BigDecimal封装浮点型数据(最好的方式是调用方法)

    public static BigDecimal valueOf(double val): 包装浮点数成为BigDecimal对象
        
        BigDecimal b1 = BigDecimal.valueOf(0.1);
    
    方法名说明
    public BigDecimal add(BigDecimal b)加法
    public BigDecimal subtract(BigDecimal b)减法
    public BigDecimal multiply(BigDecimal b)乘法
    public BigDecimal divide(BigDecimal b)除法
    public BigDecimal divide(另一个BigDecimal对象, 精确几位, 舍入模式)除法
package lwh;

import java.math.BigDecimal;

public class BigDecimalDemo {
    public static void main(String[] args) {
        double a = 0.1;
        double b = 0.1;
        double c = 0.1;
        BigDecimal a1 = BigDecimal.valueOf(a);
        BigDecimal b1 = BigDecimal.valueOf(b);
        BigDecimal c1 = a1.add(b1);
        System.out.println(c1);

        double rs = c1.doubleValue();
        System.out.println(rs);
        // 注意事项: BigDeclmal 是一定要精度运算的, 否则报错
        BigDecimal a11 = BigDecimal.valueOf(10.0);
        BigDecimal b11 = BigDecimal.valueOf(3.0);
        BigDecimal c11 = a11.divide(b11);
     
        // 注意事项: BigDeclmal 是一定要精度运算的, 否则报错
        BigDecimal a11 = BigDecimal.valueOf(10.0);
        BigDecimal b11 = BigDecimal.valueOf(3.0);
        BigDecimal c11 = a11.divide(b11,2, RoundingMode.HALF_UP);
        System.out.println(c11);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值