Java基础二

news2024/9/21 15:55:03

目录

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 集合泛型

泛型和类型的区别:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/351868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

165、【动态规划】leetcode ——337. 打家劫舍 III:记忆化递归+动态规划(C++版本)

题目描述 原题链接&#xff1a;337. 打家劫舍 III 解题思路 &#xff08;1&#xff09;记忆化递归 采用后序遍历的方式&#xff0c;设置一个unordered_map型Hash表record&#xff0c;记录每个结点的情况。当遍历到该节点时&#xff0c;判定之前是否遍历过&#xff0c;如果遍…

docker基本内容简单复习

文章目录一、docker简介docker镜像镜像的优化二、docker网络三、docker数据卷一、docker简介 docker是管理容器的引擎&#xff0c;docker为应用打包、部署平台&#xff0c;而非单纯的虚拟化技术 docker镜像 docker镜像是分层结构&#xff1b;共享宿主机kernel&#xff1b;同一…

【网安神器篇】——系统指纹探测工具finger

作者名&#xff1a;白昼安全主页面链接&#xff1a; 主页传送门创作初心&#xff1a; 以后赚大钱座右铭&#xff1a; 不要让时代的悲哀成为你的悲哀专研方向&#xff1a; web安全&#xff0c;后渗透技术每日鸡汤&#xff1a; 我不想停下&#xff0c;因为这次出发的感觉太好了一…

【双指针问题】977. 有序数组的平方

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…

Python快速上手系列--日志模块--详解篇

前言本篇主要说说日志模块&#xff0c;在写自动化测试框架的时候我们就需要用到这个模块了&#xff0c;方便我们快速的定位错误&#xff0c;了解软件的运行情况&#xff0c;更加顺畅的调试程序。为什么要用到日志模块&#xff0c;直接print不就好了&#xff01;那得写多少print…

【Linux】进程的概念及操作进程

目录1.什么是进程2.描述进程 - PCB3.进程的具体操作3.1进程的属性与文件属性的关系3.2查看进程准备工作使用指令查找对应进程&#xff1a;在文件中查看进程3.3关闭进程ctrlckill3.4进程的一些特性3.5通过系统调用获取进程标识符3.6通过系统调用创建子进程1.什么是进程 背景&am…

工程师手册:电源设计中的电容选用规则

摘要 电源往往是我们在电路设计过程中最容易忽略的环节。作为一款优秀的设计&#xff0c;电源设计应当是很重要的&#xff0c;它很大程度影响了整个系统的性能和成本。电源设计中的电容使用&#xff0c;往往又是电源设计中最容易被忽略的地方。一、电源设计中电容的工作原理 在…

前段时间公司招人,面了一个要20K的,一问自动化只会点皮毛···

前段时间公司要招2个自动化测试&#xff0c;同事面了几十个候选人&#xff0c;发现了一个很奇怪的现象&#xff0c;面试的时候&#xff0c;如果问的是框架api、脚本编写这些问题&#xff0c;基本上个个都能对答如流&#xff0c;等问到实际项目的时候&#xff0c;类似“怎么从0开…

vue+elementUI 实现设置还款日字母弹窗组件

1、业务背景 还款业务&#xff0c;设置每月还款日&#xff0c;选每月几号扣款&#xff0c;不需要29、30、31&#xff0c;因为不是每个月都有这三天的 2、预期效果图 3、代码实现 3.1 初始化vue项目 地址&#xff1a;https://cn.vuejs.org/guide/introduction.html 3.2 在项…

KMS钥匙管理系统产品分析

背景&#xff1a; 人造成的不可控因素很多 以前拿公司钥匙的时候要先进行纸质登记&#xff0c;还钥匙的的时候也要进行纸质统计&#xff0c; 这个过程中有很多不可控的因素&#xff0c;如果没有登记怎么办&#xff1f;人把钥匙丢了怎么办呢&#xff1f; 产品设计 引入机器&am…

UDP网络编程

UDP和TCP 前几节我们提到了计算机网络编程中的TCP编程&#xff0c;TCP和UDP都是计算机机网络通信的传输层中的传输协议&#xff0c;今天我们来学习计算机网络编程中的基于UDP传输协议的网络编程 首先我们要了解TCP和UDP的区别 它们是同属于计算机网络传输层的传输协议 TCP&…

LeetCode24两两交换链表中的节点 带有输入和输出的完整程序

题目&#xff1a;给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出…

CSAPP学习笔记——虚拟内存(一)

虚拟内存的能力 它将主存看成是一个存储在地址空间的高速缓存&#xff0c;在主存中只保存活动区域&#xff0c;并更具需要在磁盘和主存之间来回传送数据&#xff0c;通过这种方式来高效使用主存&#xff08;DRAM&#xff09;它为每个进程提供了一致的地址空间&#xff0c;从而…

python虚拟环境与环境变量

一、环境变量 1.环境变量 在命令行下&#xff0c;使用可执行文件&#xff0c;需要来到可执行文件的路径下执行 如果在任意路径下执行可执行文件&#xff0c;能够有响应&#xff0c;就需要在环境变量配置 2.设置环境变量 用户变量&#xff1a;当前用户登录到系统&#xff0c;…

【LeetCode】剑指 Offer 07. 重建二叉树 p62 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/zhong-jian-er-cha-shu-lcof/ 1. 题目介绍&#xff08;07. 重建二叉树&#xff09; 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的…

回溯算法问题汇总

文章目录模版一. 组合问题77. 组合216.组合总和III17.电话号码的字母组合39. 组合总和40.组合总和II131.分割回文串93.复原IP地址78.子集90.子集II491.递增子序列46.全排列47.全排列 II332.重新安排行程51. N皇后37. 解数独模版 void backtracking(参数) {if (终止条件) {存放…

Webpack(通俗易懂介绍)

主题&#xff1a;为什么需要webpack&#xff0c;用来干什么&#xff1f; 前言 例如&#xff1a;前端不断的技术更新迭代&#xff0c;为了浏览器更好的兼容到以及项目更好的开发&#xff0c;所有才有需要Webpack来打包代码&#xff0c;本文介绍下&#xff0c;Webpack的定义。 …

无FTTR不千兆,华为星光F30让家中不再有“隐秘的角落”

“恒有二者&#xff0c;余畏敬焉。位我上者&#xff0c;灿烂星空&#xff1b;道德律令&#xff0c;在我心中。”康德《实践理性批判》中&#xff0c;将人对外部世界的探索精神&#xff0c;抽象成了对无尽星空的追逐。以前&#xff0c;光为我们照亮现实世界。现在&#xff0c;人…

vue使用axios发送post请求携带json body参数,后端使用@RequestBody进行接收

前言 最近在做自己项目中&#xff0c;做一个非常简单的新增用户场景&#xff0c;但是使用原生axios发送post请求的时候&#xff0c;还是踩了不少坑的。 唉&#xff0c;说多了都是泪&#xff0c;小小一个新增业务&#xff0c;在自己前后端一起开发的时候&#xff0c;硬是搞了好…

使用QQ聊天机器人上传每日健康日报【Nonebot插件教程】

文章目录前言一、需求分析1.功能需求2.技术需求二、流程分析1.分析请求过程2.分析代码编写过程四、代码编写前言 作为2020级入学的大学生&#xff0c;在疫情的笼罩下步入了大学的校门&#xff0c;到校第一件事就是接到了每日进行健康日报身体情况上报的通知&#xff0c;每日醒…