目录
    
   
    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 字符串
   
    
     字符串的拼接:
    
   
- + 符号,符号后面的当做字符串看
- .concat()
    
     字符串的比较
    
   
- A.equals(B)
- A.equalsIgnoreCase(B) ,忽略大小写
- A.compareTo(B) ,如果A大于B,返回证书,A小于B返回负数,相等返回0
- A.compareToIgnoreCase(C),忽略大小写
    
     字符串的截取
    
   
- s.substring(begininex,endindex):传2个参数,第一个参数包含,第二个参数不包含,传一个参数,从参数截取都最后
- s.split():对字符串进行分解,拆分为几部分
- trim():去字符串的收尾空格
    
     字符串的替换
    
   
- s.replace(target,replacement)
- s.replaceAll(target,replacement),按照一定的规则进行替换
    
     字符串的大小写转换
    
   
- toLowerCase():转小写
- toUpperCase():转大写
    
     字符串的查找
    
   
- toCharArray():返回一个数组
- getBytes():返回byte 数组
- charAt():传递索引值定位字符串位置
- indexof():获取字符串第一次出现的位置
- lastindexof():获取字符串最后一次出现的位置
- contains():是否包含字符串,返回布尔值
- startsWith():判断开头的字符,返回布尔值
- endsWith():判断结尾的字符,返回布尔值
- 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介绍
   
- 类型装换错误
- 递归没有跳出逻辑的错误:StackOverFlowError
- 访问一个为空对象的成员方法:空指针错误,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大体系
    
   
- 单一数据体系:Cellection接口定义了相关的规则
- 成对的数据体系: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 版权协议,转载请附上原文出处链接和本声明。
