java基础

 

JDK 11 在线中文手册

  1. 容器

    1. 数组

 

//一维数组

int [] a1 = new int [] {1,2,3};

int [] a2 = {1,2,3};

int [] a3 = new int [3] ;

// a3 = {1 ,2 3};//只有声明是可以这样赋值;

a3 = new int [] {1,2,3};//常规赋值要用new;

 

//二维数组

//长方形数组

int [][] b0 = new int [3][4];

//非长方形数组

int [][] b1 = new int [][] {{1,2,3},{2,3},{3}};

int [][] b2 = {{1,2,3},{2,3},{3}};

int [][] b3 = new int [4][];

b3[0] = new int[] {1,2,3};

// b3[0] = {1,2,3};//错,常规赋值要用new;

b3[1] = new int[] {2,3};

 

复制数组,System的静态方法:

static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)将指定源数组中的数组从指定位置复制到目标数组的指定位置。

 

  1. 操作数组的 Arrays 工具类

软件包 : java.util.Arrays

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

public static int binarySearch(int[] a,int fromIndex,int toIndex,int key)

 

使用二叉搜索算法搜索指定的int数组的指定值。 在进行此调用之前,必须对数组进行排序。找到返回索引,否则返回-1;

 

 

public static int[] copyOf(int[] original,int newLength)

复制指定的数组;

 

 

public static boolean equals(int[] a,int[] a2)

如果两个指定的int数组彼此相等 ,则返回true

 

public static void fill(int[] a,int val)

public static void fill(int[] a,int fromIndex,int toIndex,

int val)

将指定的int值分配给指定的int数组的指定范围的每个元素

  1. 泛型容器

 

LinkedList

该类实现了List接口,允许有null(空)元素。主要用于创建链表数据结构,该类没有同步方法,LinkedList 查找效率低。

ArrayList

该类也是实现了List的接口,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。该类也是非同步的,在多线程的情况下不要使用。ArrayList 增长当前长度的50%,插入删除效率低。

HashSet

该类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个。存放在HashMap集合key部分和HashSet集合中的元素需要同时重写hashCode和equals。

 

TreeMap的key或者TreeSet集合中的元素要想排序,有两种实现方式:

    第一种:实现java.lang.Comparable接口。

    第二种:单独编写一个比较器Comparator接口。

HashMap

它存储的内容是键值对(key-value)映射。该类实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。

Iterator
这里通过实例列出 Iterator ListIterator 接口提供的所有方法。

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. 操纵容器的Collections 工具类

软件包 java.util.Collections

public static <T> boolean addAll(Collection<? super T> c,

T... elements)

将所有指定的元素添加到指定的集合。 要添加的元素可以单独指定或作为数组指定。 这种方便方法的行为与c.addAll(Arrays.asList(elements))相同

 

public static <T> void copy(List<? super T> dest,

List<? extends T> src)

将所有元素从一个列表复制到另一个列表中。

 

public static void reverse(List<?> list)

反转指定列表中元素的顺序。

 

public static void shuffle(List<?> list)

使用默认的随机源随机排列指定的列表

 

 

public static <T extends Comparable<? super T>> void sort(List<T> list)

根据其元素的natural ordering ,将指定的列表按升序排序。 列表中的所有元素必须实现Comparable接口

 

  1. 容器之间的转换
 1 int[] data = {4, 5, 3, 6, 2, 5, 1};
 2 List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList());
 3 // int[] 转 List<Integer>
 4 // Arrays.stream(arr) 可以替换成IntStream.of(arr)。
 5 // 1.使用Arrays.stream将int[]转换成IntStream。
 6 // 2.使用IntStream中的boxed()装箱。将IntStream转换成Stream<Integer>。
 7 // 3.使用Stream的collect(),将Stream<T>转换成List<T>,因此正是List<Integer>。
 8     // int[] 转 Integer[]
 9 Integer[] integers1 = Arrays.stream(data).boxed().toArray(Integer[]::new);
10 // 前两步同上,此时是Stream<Integer>。
11 // 然后使用Stream的toArray,传入IntFunction<A[]> generator。
12 // 这样就可以返回Integer数组。
13 // 不然默认是Object[]。
14     // List<Integer> 转 Integer[]
15 Integer[] integers2 = list1.toArray(new Integer[0]);
16 //  调用toArray。传入参数T[] a。这种用法是目前推荐的。
17 // List<String>转String[]也同理。
18     // List<Integer> 转 int[]
19 int[] arr1 = list1.stream().mapToInt(Integer::valueOf).toArray();
20 // 想要转换成int[]类型,就得先转成IntStream。
21 // 这里就通过mapToInt()把Stream<Integer>调用Integer::valueOf来转成IntStream
22 // 而IntStream中默认toArray()转成int[]。
23     // Integer[] 转 int[]
24 int[] arr2 = Arrays.stream(integers1).mapToInt(Integer::valueOf).toArray();
25 // 思路同上。先将Integer[]转成Stream<Integer>,再转成IntStream。
26     // Integer[] 转 List<Integer>
27 List<Integer> list2 = Arrays.asList(integers1);
28 // 最简单的方式。String[]转List<String>也同理。
29     // 同理
30 String[] strings1 = {"a", "b", "c"};
31     // String[] 转 List<String>
32 List<String> list3 = Arrays.asList(strings1);
33     // List<String> 转 String[]
34 String[] strings2 = list3.toArray(new String[0]);

 

 

字符串String

 

 在Java内部都是Unicode编码;
//返回str以gbk编码的byte[]  ;
str.getBytes("gbk")    

//将byte数组以gbk编码方式解码成Unicode
new String(byte[],"gbk")

 

char charAt(int index)
返回指定索引处的 char 值。

int compareTo(String anotherString)
按字典顺序比较两个字符串。

int compareToIgnoreCase(String str)
按字典顺序比较两个字符串,不考虑大小写。

String concat(String str)
将指定字符串连接到此字符串的结尾。

static String copyValueOf(char[] data)
返回指定数组中表示该字符序列的 String

static String copyValueOf(char[] data, int offset, int count)
返回指定数组中表示该字符序列的 String

boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结束。

boolean equals(Object anObject)
将此字符串与指定的对象比较。

boolean equalsIgnoreCase(String anotherString)
将此 String 与另一个 String 比较,不考虑大小写。

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此字符串复制到目标字符数组。

int indexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引。若没有则返回 -1

int indexOf(int ch, int fromIndex)
返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。

int indexOf(String str)
 
返回指定子字符串在此字符串中第一次出现处的索引。

int indexOf(String str, int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。

int lastIndexOf(int ch)
 
返回指定字符在此字符串中最后一次出现处的索引。

int lastIndexOf(int ch, int fromIndex)
返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。

int lastIndexOf(String str)
返回指定子字符串在此字符串中最右边出现处的索引。

int lastIndexOf(String str, int fromIndex)
 
返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。

int length()
返回此字符串的长度。

boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。

String replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。

String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。

String[] split(String regex, int limit)
根据匹配给定的正则表达式来拆分此字符串。

boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开始。

boolean startsWith(String prefix, int toffset)
测试此字符串从指定索引开始的子字符串是否以指定前缀开始。

String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。

String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。

char[] toCharArray()
将此字符串转换为一个新的字符数组。

String toLowerCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

String toUpperCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

String trim()
返回字符串的副本,忽略前导空白和尾部空白。

contains(CharSequence chars)
判断是否包含指定的字符系列。

isEmpty()
判断字符串是否为空。

 

  1. StringBuffer

构造器

StringBuffer()

构造一个字符串缓冲区,其中没有字符,初始容量为16个字符。

StringBuffer​(int capacity)

构造一个字符串缓冲区,其中没有字符和指定的初始容量。

StringBuffer​(String str)

构造一个初始化为指定字符串内容的字符串缓冲区。

方法

StringBuffer

append​(char c)

 char参数的字符串表示形式追加到此序列。

StringBuffer

append​(char[] str)

 char数组参数的字符串表示形式追加到此序列。

StringBuffer

append​(char[] str, int offset, int len)

 char数组参数的子数组的字符串表示形式追加到此序列。

StringBuffer

append​(String str)

将指定的字符串追加到此字符序列。

StringBuffer

append​(StringBuffer sb)

将指定的 StringBuffer追加到此序列。

int

capacity()

返回当前容量。

char

charAt​(int index)

返回指定索引处的此序列中的 char值。

int

compareTo​(StringBuffer another)

按字典顺序比较两个 StringBuffer实例。

StringBuffer

delete​(int start, int end)

删除此序列的子字符串中的字符。

StringBuffer

deleteCharAt​(int index)

按此顺序删除指定位置的 char 

int

indexOf​(String str)

返回指定子字符串第一次出现的字符串中的索引。

int

indexOf​(String str, int fromIndex)

从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引。

StringBuffer

insert​(int offset, char c)

 char参数的字符串表示形式插入此序列中。

StringBuffer

insert​(int offset, char[] str)

 char数组参数的字符串表示形式插入此序列中。

StringBuffer

insert​(int index, char[] str, int offset, int len)

 str数组参数的子数组的字符串表示形式插入此序列中。

StringBuffer

insert​(int offset, String str)

将字符串插入此字符序列。

int

lastIndexOf​(String str)

返回指定子字符串最后一次出现的字符串中的索引。

int

lastIndexOf​(String str, int fromIndex)

返回指定子字符串最后一次出现的字符串中的索引,从指定索引开始向后搜索。

StringBuffer

replace​(int start, int end, String str)

使用指定的 String的字符替换此序列的子字符串中的字符。

StringBuffer

reverse()

导致此字符序列被序列的反向替换。

void

setCharAt​(int index, char ch)

指定索引处的字符设置为 ch 

void

setLength​(int newLength)

设置字符序列的长度。

String

substring​(int start)

返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。

String

substring​(int start, int end)

返回一个新的 String ,其中包含当前包含在此序列中的字符的子序列。

void

trimToSize()

尝试减少用于字符序列的存储空间。

 

  1. StringBuilder
  1. IO

    1. java.io包下需要掌握的流有16个:

       

 

    文件专属:

        java.io.FileInputStream(掌握)

        java.io.FileOutputStream(掌握)

        java.io.FileReader

        java.io.FileWriter

 

    转换流:(将字节流转换成字符流)

        java.io.InputStreamReader

        java.io.OutputStreamWriter

 

    缓冲流专属:

        java.io.BufferedReader

        java.io.BufferedWriter

        java.io.BufferedInputStream

        java.io.BufferedOutputStream

 

    数据流专属:

        java.io.DataInputStream

        java.io.DataOutputStream

 

    标准输出流:

        java.io.PrintWriter

        java.io.PrintStream(掌握)

 

    对象专属流:

        java.io.ObjectInputStream(掌握)

        java.io.ObjectOutputStream(掌握)

  1. FileInpuFteam 字节流

FileInpuFteam

FileInputStream(String name) 创建一个 FileInputStream ,路径名 name

int available() 返回从此输入流中可以读取(或跳过)的剩余字节数

void close() 关闭此文件输入流并释放与流相关联的任何系统资源。

int read() 从该输入流读取一个字节的数据。读取结束返回-1

int read(byte[] b) 从该输入流读取最多 b.length个字节的数据到一个字节数组。返回实际读取的个数,读取结束返回-1

int read(byte[] b, int off, int len) 从该输入流读取最多 len个字节的数据到字节数组。

long skip(long n) 跳过并从输入流中丢弃 n字节的数据。

FileOutputStream

FileOutputStream(String name) 创建文件输出流以指定路径 name 写入文件。

FileOutputStream(String name, boolean append) 创建文件输出流以指定路径 name 写入文件,append决定是否从文件尾开始写入.

void write(byte[] b) b.length字节从指定的字节数组写入此文件输出流。

void write(byte[] b, int off, int len) b[off]开始lenbyte写入此文件输出流。

void write(int b) 将指定的字节写入此文件输出流。

 

示例代码:

//打开文件
FileInputStream fis = new FileInputStream("First/temp.txt");
//
创建以该文件还可读取字节数目为长度的byte数组
byte[] str = new byte[fis.available()];
//
读取文件str.length个字节
fis.read(str);
//
关闭文件
fis.close();
System.out.println(new String(str));

String s = "hello
世界!";
byte[] b = s.getBytes();
FileOutputStream fos = new FileOutputStream("First/out.txt");
fos.write(b);
fos.close();

 

  1. FileReader FileWritter 字符流

用法与字节流相似。用 char数组读写;

  1. Other

 

  1. 异常

 

异常类型

说明

ArithmeticException

算术错误异常,如以零做除数

ArraylndexOutOfBoundException

数组索引越界

ArrayStoreException

向类型不兼容的数组元素赋值

ClassCastException

类型转换异常

IllegalArgumentException

使用非法实参调用方法

lIIegalStateException

环境或应用程序处于不正确的状态

lIIegalThreadStateException

被请求的操作与当前线程状态不兼容

IndexOutOfBoundsException

某种类型的索引越界

NullPointerException

尝试访问 null 对象成员,空指针异常

NegativeArraySizeException

再负数范围内创建的数组

NumberFormatException

数字转化格式异常,比如字符串到 float 型数字的转换无效

TypeNotPresentException

类型未找到

 

异常类型

说明

ClassNotFoundException

没有找到类

IllegalAccessException

访问类被拒绝

InstantiationException

试图创建抽象类或接口的对象

InterruptedException

线程被另一个线程中断

NoSuchFieldException

请求的域不存在

NoSuchMethodException

请求的方法不存在

ReflectiveOperationException

与反射有关的异常的超类

 

异常方法

下面的列表是 Throwable 类的主要方法:

 

序号    方法及说明

1    public String getMessage()

返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。

2    public Throwable getCause()

返回一个Throwable 对象代表异常原因。

3    public String toString()

使用getMessage()的结果返回类的串级名字。

4    public void printStackTrace()

打印toString()结果和栈层次到System.err,即错误输出流。

5    public StackTraceElement [] getStackTrace()

返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。

6    public Throwable fillInStackTrace()

用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。

处理异常:

1 捕获异常: try-catch,在catch中处理异常

2 声明异常: 在方法中声明(throws)异常,由调用方处理

 

在方法改写中,子类声明的异常不能不父类多,即要么不抛异常,要么就抛出跟父类方法相同的异常或该异常的子类。

 

  1. 线程

    1. 创建线程的两种方法:

      1. Thread进行扩展,为其提供一个新的run方法;
      2. 创建 Runnable接口的实例,把它作为入口参数传给Thread构造函数,来创建 Thread的实例。

 

public void start()
使该线程开始执行;Java 虚拟机调用该线程的 run 方法

public void run()
如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;

否则,该方法不执行任何操作并返回。

public final void setName(String name)
改变线程名称,使之与参数 name 相同。

public final void setPriority(int priority)
 更改线程的优先级。

public final void setDaemon(boolean on)
将该线程标记为守护线程或用户线程。

public final void join(long millisec)
等待该线程终止的时间最长为 millis 毫秒。

public void interrupt()
中断线程。

public final boolean isAlive()
测试线程是否处于活动状态。

上述方法是被 Thread 对象调用的,下面表格的方法是 Thread 类的静态方法。

public static void yield()
暂停当前正在执行的线程对象,并执行其他线程。

public static void sleep(long millisec)
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)

public static boolean holdsLock(Object x)
当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true。

public static Thread currentThread()
返回对当前正在执行的线程对象的引用。

public static void dumpStack()
将当前线程的堆栈跟踪打印至标准错误流。

 

  1. 把代码标成同步的两种方法

synchronized把整个方法都变成同步(执行时必须获得包含该方法的对象(this)锁)

synchronized(obj){}把一段程序代码变成同步(执行时,必须获得 obj的锁)

 

死锁:两个线程,相互等待对方释放锁。Java不能自动检测和避免

可采用以下方法来避免:

确定获取锁的次序;始终遵守该次序;以相反的次序来释放锁

 

  1. 线程通信

 

 

  1. 常用类

    1. Date

1、获取系统当前时间

        Date d = new Date();

    2、日期格式化:Date --> String

        yyyy-MM-dd HH:mm:ss SSS

        SimpleDateFormat sdf = new SimpleDate("yyyy-MM-dd HH:mm:ss SSS");

        String s = sdf.format(new Date());

    3、String --> Date

        SimpleDateFormat sdf = new SimpleDate("yyyy-MM-dd HH:mm:ss");

        Date d = sdf.parse("2008-08-08 08:08:08");

    4、获取毫秒数

        long begin = System.currentTimeMillis();

        Date d = new Date(begin - 1000 * 60 * 60 * 24);

  1. 数字

3.1、DecimalFormat数字格式化

        ###,###.## 表示加入千分位,保留两个小数。

        ###,###.0000 表示加入千分位,保留4个小数,不够补0

 

        //加入千分位,保留两位小数

DecimalFormat df = new DecimalFormat("###,###.##");

System.out.println(df.format(1234.23452));

//加入千分位保留4位小数,不够补零

System.out.println(new DecimalFormat("###,###.0000").format(12345.12));

    3.2、BigDecimal

        财务软件中通常使用BigDecimal

  1. Random

    4.1、怎么产生int类型随机数。

        Random r = new Random();

        int i = r.nextInt();

    4.2、怎么产生某个范围之内的int类型随机数。

        Random r = new Random();

        int i = r.nextInt(101); // 产生[0-100]的随机数。    

  1. Other
  1. 反射

    1. Java中的类反射

构造Class对象有3种方式:

1.Class.forName();

Class clazz = Class.forName("java.lang.String");

Object obj = clazz.newInstance();

2..class;

    Class stringClass = String.class;

3.Object.getClass();

    String s = "s";

Class cStr = s.getClass();

 

  1. Java反射中的主要类和方法

软件包 java.lang.reflect

提供类和接口,以获取关于类和对象的反射信息。

  1. ttt
  1. Java小知识

    1. byte,short 运算后变为int;
    2. 大范围类型向小范围类型强转,小范围向大范围自动转换;
    3. 方法体中不能定义静态变量;
    4. 只有final 可以修饰方法参数;
    5. 子类改写方法的访问控制权限不能比父类窄;
    6. 子类改写方法声明异常不能比父类多;
    7. 子类改写方法返回类型可以是父类的方法返回类型的子类;
    8. System.currentTimeMillis();返回当前时间(毫秒,long;
    9. System.gc();建议回收垃圾;

 

  1. 案例

  2. ResourceBundle

// 属性资源文件绑定

ResourceBundle bundle = ResourceBundle.getBundle("包名.文件名");//resources.jdbc

// 根据属性配置文件key获取value

String driver = bundle.getString("driver");

  1. t
  2. onthr
posted @ 2022-03-05 22:11  awei666  阅读(31)  评论(0编辑  收藏  举报