Java基础二

  • Post author:
  • Post category:java



目录


1. 常见类和对象


1.1 object


1.2 数组 Array


1.3 二维数组


1.6 二分查找法


1.7 字符串


1.8 包装类


1.9 日期类


1.10 工具类


1.11 比较


2. 异常


2.1介绍


2.2 基础语法


2.3 常见异常


3. 集合


3.1 介绍


3.2 常用的接口和类


3.3 ArrayList 基本操作


3.4 ArrayList 的常用方法


3.5 LinkedList 集合


3.6  LinkedList 常用方法


3.7 集合泛型


1. 常见类和对象

1.1 object

  • 对象包:java.lang.Object,称超类
  • toString():将对象转换为字符串,打印出的是对象的内存地址,为了理解对象内容,一般会重新 (快捷键 Ctrl o)这个方法
  • hashCode(): 获取对象内存地址 ,与toString的值相同,前者是10进制,后者是16进制
  • equal(): 判断对象是否相同,返回布尔值,比较的是内存地址
  • getClass:获取对象的类型信息
package chapter02;

public class Object {
    public static void main(String[] args) {
        // TODO 常见类和对象-对象
        Person p = new Person();
        String s = p.toString();
        int i = p.hashCode();

        //chapter02.Person@511d50c0 包名+哈希code值(内存地址)
        System.out.println(p);
        // 1360875712 十进制
        System.out.println(i);

    }
}
class Person {
    String name = "lisa";
    @Override
    public String toString() {
        return "Person["+name+"]";
        // Person[lisa]
    }
}
class Son extends Person {

}

1.2 数组 Array

  • 数组声明:类型 [ ] 名 = new 类型[索引n ];索引表示数组有n个对象
  • 添加和访问数据时,不能超过指定范围(0~length-1)
  • 如果给相同的索引添加值,会覆盖原先的值,等同于修改数据
package chapter02;

public class Array {
    public static void main(String[] args) {
        // TODO 数组Array
        //数组声明:类型[] 名 =  new 类型[];
        User[] users = new User[3];
        //访问数组
        for (int i = 0; i<users.length;i++){
            users[i] = new User();
        }
        for (int i = 0; i<users.length;i++){
            users[i].test();
        }
    }
}
class User {
    public void test() {
        System.out.println("test");
    }
}

1.3 二维数组

package chapter02;

public class Array02 {
    public static void main(String[] args) {
        // TODO 二维数组
//        String[][] names ={{"a","b"},{"a","b"},{"a","b"}};
        String[][] names = new String[3][3];
        names[0][1]="lisa";
        //查看所以的数组
        for (int row =0; row < 3; row++){
            for (int col =0; col < 3; col++){
                System.out.print(names[row][col]+"   ");
            }
            System.out.println();
        }
    }
}


1.4冒泡排序法

1.5选择排序法

1.6 二分查找法

package chapter02;

public class TwoPartSeachaer {
    public static void main(String[] args) {
        // TODO 二分查找
        int[] nums ={1,2,3,4,5,6};
        
        int target = 5;
        int start = 0;
        int end = nums.length-1;
        int middle = 0;
        while (start <= end) {
            middle = (start + end) / 2;
            if (nums[middle]>target){
                end = middle -1;
            }else if(nums[middle] < target){
                start = middle +1;
            }else {
                break;
            }
        }
        System.out.println("数字位置:"+middle);
    }
}

1.7 字符串


字符串的拼接:

  1. + 符号,符号后面的当做字符串看
  2. .concat()


字符串的比较

  1. A.equals(B)
  2. A.equalsIgnoreCase(B) ,忽略大小写
  3. A.compareTo(B) ,如果A大于B,返回证书,A小于B返回负数,相等返回0
  4. A.compareToIgnoreCase(C),忽略大小写


字符串的截取

  1. s.substring(begininex,endindex):传2个参数,第一个参数包含,第二个参数不包含,传一个参数,从参数截取都最后
  2. s.split():对字符串进行分解,拆分为几部分
  3. trim():去字符串的收尾空格


字符串的替换

  1. s.replace(target,replacement)
  2. s.replaceAll(target,replacement),按照一定的规则进行替换


字符串的大小写转换

  1. toLowerCase():转小写
  2. toUpperCase():转大写


字符串的查找

  1. toCharArray():返回一个数组
  2. getBytes():返回byte 数组
  3. charAt():传递索引值定位字符串位置
  4. indexof():获取字符串第一次出现的位置
  5. lastindexof():获取字符串最后一次出现的位置
  6. contains():是否包含字符串,返回布尔值
  7. startsWith():判断开头的字符,返回布尔值
  8. endsWith():判断结尾的字符,返回布尔值
  9. isEmpty():判断是否为空字符,注意空格不是空字符,是一个特殊的字符


StringBuilder 构建字符串

当频繁拼接字符串时使用,提供append增、delete删、replace改、insert查的方法

语法:StringBuilder s = new StringBuilder(“a”);

package chapter02;

public class StringS {
    public static void main(StringS[] args) {
        // TODO 字符串
        // 拼接
        String A = "A" +"B";
        String B ="A" + 11;
        String C = 1+ 2 + "C" +3; //3C3
        System.out.println(A.concat(C));

        //比较
        A.equals(B);
        A.equalsIgnoreCase(B); //忽略大小写
        A.compareTo(B);
        A.compareToIgnoreCase(C);//忽略大小写

        // 截取
        String s = "hello";
        System.out.println(s.substring(2));
        s.split("e"); // h llo

        // 替换
        String say = "welcome to China";
        System.out.println(say.replace("China","American"));
        //.replaceAll() 按照一定的规则进行替换
        say.replaceAll("to|China","American"); // welcome American American

        // 大小写转换
        String word = "ABC";
        word.toLowerCase(); //小写
        word.toUpperCase(); //大写

        // 字符串的查找
        String hello = "hello world";
        char[] chars = hello.toCharArray();
        byte[] bytes = hello.getBytes();
        hello.charAt(1);//e
        hello.

    }
}

1.8 包装类

常见的类和对象:byte\short\int\long\float\double\boolean

package chapter02;

public class packageClass {
    //TODO 包装类
    int i = 10;
    // 将基本的数据类型转换为包装类型
    Integer i1 = i;
    // 拆箱
    int i2 = i1.intValue();
    // 自动拆箱
    int i3 = i1;
}

1.9 日期类


日期类:Date

  • y(Y): 年,yyyy m(M): MM月份,mm分钟
  • d(D): dd:一个月中的日期,DD一年中的日期
  • h(H): hh是十二进制,HH是二十四进制
  • s(S): s秒,ss毫秒
  • 获取时间戳:注d是当前时间,d.getTime()
  • 根据时间戳构建日期对象d.setTime(System.currentTimeMillis());
package chapter02;

import java.text.SimpleDateFormat;
import java.util.Date;

public class dateClass {
    public static void main(String[] args) throws Exception{
        //TODO Date日期类和 Calender日历类
        Date d = new Date();
        System.out.println(d); //获取当前时间 Tue Nov 29 23:45:14 CST 2022
        // java 格式化日期
        // y(Y): 年,yyyy
        // m(M): MM月份,mm分钟
        // d(D): dd:一个月中的日期,DD一年中的日期
        // h(H): hh是十二进制,HH是二十四进制
        // s(S): s秒,ss毫秒

        // Date->String
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:ss.SSSS");
        String s = sdf.format(d);
        System.out.println(s); //2022-11-29 23:14.0318

        //String -> Date
        String dates = "2020-02-23";
        Date parse =  sdf.parse(dates);
        System.out.println(parse);

        //根据时间戳构建日期对象
        d.setTime(System.currentTimeMillis());
        // 获取时间戳
        d.getTime();
        System.out.println(d.getTime()); //1669737825270
    }
}


日历类:Calender

package chapter02;

import java.util.Calendar;

public class Calender {
    public static void main(String[] args) throws Exception{
        // TODO 日历类
        Calendar c = Calendar.getInstance();
        System.out.println(c.get(Calendar.YEAR));
        System.out.println(c.get(Calendar.MONDAY));
        System.out.println(c.get(Calendar.DATE));
        
        c.add(Calendar.YEAR,-1); // 年份减一
    }
}

1.10 工具类

  • 工具类不创建对象才能使用,可以直接使用类中的属性和方法,一般称为静态的
  • 工具类对外提供的属性和方法都应该是公共的
  • 为了开发方便,应该尽量提供丰富的方法和属性
  • 生成随机字符串:UUID.randomUUID().toString()
package chapter02;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.UUID;

public class Object_utils extends Exception{
    public static void main(String[] args) {
        // TODO 工具类
        System.out.println(StringUtils.isEmpty("hjsaj"));
        System.out.println(StringUtils.isEmpty("   "));
        System.out.println(StringUtils.isNotEmpty("   "));
        System.out.println(StringUtils.getOnlyNum());
        System.out.println(StringUtils.getOnlyNum("hjshsajhakd",6));
        // 装换字符串
    }
}
class StringUtils {
    // todo 非空判断
    public static boolean isEmpty(String str) {
        // 如果为null、空字符串、空格都是为空
        if (str == null || str.trim().equals("")){
            return true;
        }
        return false;
    }
    public static boolean isNotEmpty(String str) {
        return !isEmpty(str);
    }

    // todo 生成随机字符串
    // 随机字符串
    public static String getOnlyNum() {
        return UUID.randomUUID().toString();
    }
    //根据指定范围生成随机数
    public static String getOnlyNum(String from,int todo) {
        if ( todo < 1){
            return " ";
        }else {
            char [] chars = from.toCharArray();
            StringBuilder str = new StringBuilder();
            for (int i = 0; i < todo; i++) {
                Random n = new Random();
                int num = n.nextInt(chars.length);
                char c = chars[num];
                str.append(c);
            }
            return str.toString();

        }
    }
    //todo 转换字符串 HSA1312 => str => UTF-8
    // var快捷键自动补全
    public static String transform(String source ,String encode, String from) throws Exception{
        byte[] bytes = source.getBytes(from);
        return new String(bytes,encode);
    }
    public static Date parse(String data, String format) throws Exception{
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.parse(data);
    }
}

1.11 比较

  • 基本数据类型 :==比较的是看数值是否相等,不看数据类型
  • 引用数据类型: ==比较的是变量的内存地址
  • str.equals(str2):一般用于字符串比较
  • 包装类:比较不要用==,要用equals

2. 异常

2.1介绍

  1. 类型装换错误
  2. 递归没有跳出逻辑的错误:StackOverFlowError
  3. 访问一个为空对象的成员方法:空指针错误,java.long.NullPointerException


异常分为两大类

  • 运行期异常:通过代码可以恢复正常逻辑执行的异常,RuntimeException
  • 编译期异常:不可通过代码可以恢复正常逻辑执行的异常,Exception

2.2 基础语法

捕抓多个异常的时候,先捕抓范围小的,再捕抓范围大的

package chapter03_Exception;

public class Java_Exception {
    public static void main(String[] args) {
        // TODO 异常
        //语法
        int i = 0;
        int j = 0;
         //Exception in thread "main" java.lang.ArithmeticException: / by zero
        //at chapter03_Exception.Java_Exception.main(Java_Exception.java:9)

        try {
            j = 10/i;
        } catch (ArithmeticException e) {
            // e.getMessage(); //输出错误信息。
            // e.getCause(); 可抛出事件的原因,如果原因不存在或未知,则返回null
            // e.printStackTrace();打印错误位置和原因 代码规范 少用
            //解决方案
            i = 10;
            j = 10/i;
        } finally {
            System.out.println("最终执行的代码");
        }
        System.out.println(j);

    }
      /*  try {
            // 可能会出现异常的代码
            //如果出现异常,那么JVM就会将异常进行封装,形成具体的异常类

        } catch (抛出异常对象 对象引用) {
            异常解决方案
        } finally {
            最后执行的代码逻辑
        }
    }*/
}

2.3 常见异常

package chapter03_Exception;

public class Ofter {
    public static void main(String[] args) {
        // TODO常见的异常
        //1. 除数为0的算数异常: java.lang.ArithmeticException 运行期异常

        // 2 空指针异常 java.lang.NullPointerException
        // 调用了一个为空对象的成员属性和成员方法
        User u = null;
        if ( u != null){
            System.out.println(u.toString());
        }

        // 3. 数组索引越界异常:ArrayIndexOutOfBoundsException
        String[] names = new String[1];
        names[0] = "rose";
        // names[1] = "lisa";

        // 4. 字符串索引越界异常
        // StringIndexOutOfBoundsException
        String S = "ABC";
//        S.substring(4);

        // 5. 格式化错误
        //NumberFormatException
        String st = "s212";
//        Integer I = Integer.parseInt(st);

        // 6. 类型转换错误 ClassCastException
        Object obj = new User();
//        Test t = (Test)obj;


    }
}
class  User {

}
class Test {

}

异常转换:如果方法会出现异常,需要声明一下,需要用到关键字 throws

3. 集合

3.1 介绍

  • 集合是一个容器,提供完整的集合框架
  • 当容纳个数不确定时,不适合用数组
  • 使用情景:对有不确定关系的数据进行相同的逻辑处理的场合


根据数据的不同,集合分2大体系

  1. 单一数据体系:Cellection接口定义了相关的规则
  2. 成对的数据体系:Map接口,2个数据有关系,第一个数据关联到第二数据,称键值对数据

3.2 常用的接口和类


Collection 接口

  • List:按照插入顺序保存,数据可重复,ArrayList,LinkedList
  • Set:无序保存,不可重复,HashSet
  • Queue:队列,ArrayBlockingQueue


Map 接口

  • 具体实现类:HashMap、Hashtable

3.3 ArrayList 基本操作

按顺序 存储,可重复

  • 创建 new ArrayList()
  • 新增 add(index,val)
  • 查询 get(index)
  • 修改 set(index,val)
  • 删除 remove(index)
package chapter04_List;

import java.util.ArrayList;

public class one {
    public static void main(String[] args) {
        // TODO ArrayList实现类
        //无构造参数,底层数组为空
        ArrayList list = new ArrayList();
        //构造函数需要传递一个int类型的参数,用于设定底层数组长度
        //构造函数需要传递一个collection集合类型的值,用于其他集合的数据放置在当前集合中
        // TODO 打印集合对象
        System.out.println(list);

        //TODO 增加数据add;如果没数据,默认开辟一个10的数组
        list.add("lisa");

        //TODO 访问数据
        System.out.println(list.size());
        System.out.println(list.get(1));
        //遍历数据
        for (int i = 0;i<list.size();i++){
            System.out.println(list.get(i));
        }

        //TODO 修改数据
        // 传递两个参数,第一个是index,第二个是修改的值,方法会返回更新前的值
        Object oldval=  list.set(1,"rose");
        System.out.println(oldval);

        // TODO 删除数据,remove(index),返回删除的值
        Objecte removeval = list.remove(1);

    }
}

3.4 ArrayList 的常用方法

  • 新增 add(index,val)
  • 新增 addAll() 追加一个集合
  • 清空集合数据 clear()
  • 判断集合中是否包含数据,返回布尔值,contains()
  • indexOf() 返回元素索引值,如果不存在返回-1,如果存在相同的值,返回第一个的索引值
  • toArray 转集合为数组类型
  • clone() 克隆集合

3.5 LinkedList 集合

  • 是一种双链表集合
  • 新增 add() / addFirst() / addLast()
  • 获取 getFirst() / getLast() / get(index)
  • 修改 set()
  • 删除 remove()

3.6  LinkedList 常用方法

  • 新增 add(index,val)
  • 新增 addAll() 追加一个集合
  • 清空集合数据 clear()
  • 判断集合中是否包含数据,返回布尔值,contains()
  • indexOf() 返回元素索引值,如果不存在返回-1,如果存在相同的值,返回第一个的索引值
  • toArray 转集合为数组类型
  • clone() 克隆集合
  • element() 获取第一个数据
  • push() 追加数据
  • pop() 删除数据

3.7 集合泛型

泛型和类型的区别:

  • 类型:用于约束外部对象的使用场景;存在多态的使用
  • 泛型:用于约束内部对象的使用场景,也称类型参数 ;不存在多态



版权声明:本文为weixin_49555741原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。