标签:cst 动作 数值 问题 字符串 cte vat exce 静态方法
目录
什么是API?
? API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给
我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学
习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。
API使用步骤
Scanner类介绍
一个可以解析基本类型和字符串的简单文本扫描器
使用步骤
导包:import java.util.Scanner;
构造函数:public Scanner(InputStream source)
常用方法:
public String next()
查找并返回来自此扫描器的下一个完整标记public int nextInt()
将输入信息的下一个标记扫描为一个 int代码
public static void main(String[] args) {
System.out.println("请输入您的姓名:");
String name = new Scanner(System.in).next();
System.out.println("请输入您的年龄:");
int age = new Scanner(System.in).nextInt();
System.out.println("您的姓名:" + name);
System.out.println("您的年龄:" + age);
}
Random类介绍
此类的实例用于生成伪随机数流。
Random类使用步骤
导包:import java.util.Random;
构造方法:public Random()
常用方法:
public int nextInt(int n)
返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值代码:
public static void main(String[] args) {
Random random = new Random();
// 获取 0-1之间的随机数
double num1 = random.nextDouble();
System.out.println(num1);
// 获取 0-3之间的随机整数数
int num2 = random.nextInt(4);
System.out.println(num2);
// 获取 1-3之间的随机整数
int num3 = random.nextInt(3) + 1;
System.out.println( num3 );
}
ArrayList介绍
java.util.ArrayList 是大小可变的数组的实现,存储在内的数据称为元素。此类提供一些方法来操作内部存储
的元素。 ArrayList 中可不断添加元素,其大小也自动增长。
ArrayList的使用步骤
导包:java.util.ArrayList <E>
构造方法:public ArrayList()
常用方法:
public boolean add(E e)
:将指定的元素添加到此集合的尾部。public E remove(int index)
:移除此集合中指定位置上的元素。返回被删除的元素。public E get(int index)
:返回此集合中指定位置上的元素。返回获取的元素。public int size()
:返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界。代码:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
// add
list.add("张三");
list.add("李四");
list.add("王五");
// remove
list.remove(1);
// size 和 get
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// contains
System.out.println(list.contains("李四"));
}
概述
java.lang.String
类代表字符串。
Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例。
类 String 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻 译为大写或小写的所有字符的字符串的副本。
特点
字符串不变:字符串的值在创建后不能被更改。
String s1 = "abc";
s1 += "d";
System.out.println(s1); // "abcd"
// 内存中有"abc","abcd"两个对象,s1从指向"abc",改变指向,指向了"abcd"。
因为String对象是不可变的,所以它们可以被共享。
String s1 = "abc";
String s2 = "abc";
// 内存中只有一个"abc"对象被创建,同时被s1和s2共享。
"abc" 等效于 char[] data={ ‘a‘ , ‘b‘ , ‘c‘ } 。
例如:
String str = "abc";
相当于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
// String底层是靠字符数组实现的。
导包和构造方法
导包:import.lang.String
构造方法:
public String()
:初始化新创建的 String对象,以使其表示空字符序列。public String(char[] value)
:通过当前参数中的字符数组来构造新的String。public String(byte[] bytes)
:通过使用平台的默认字符集解码当前参数中的字节数组来构造新的 String。代码:
// 无参构造
String str = new String();
// 通过字符数组构造
char chars[] = {'a', 'b', 'c'};
String str2 = new String(chars);
// 通过字节数组构造
byte bytes[] = { 97, 98, 99 };
String str3 = new String(bytes);
// 常用方式
String str4 = "字符串";
判断功能的方法
方法:
public boolean equals (Object anObject)
:将此字符串与指定对象进行比较。public boolean equalsIgnoreCase (String anotherString)
:将此字符串与指定对象进行比较,忽略大小 写。代码:
public static void main(String[] args) {
String str1 = "hello";
String str2 = "Hello";
System.out.println(str1.equals(str2)); // false
System.out.println(str1.equalsIgnoreCase(str2)); // true
}
获取功能的方法
方法:
public int length ()
:返回此字符串的长度。public String concat (String str)
:将指定的字符串连接到该字符串的末尾。public char charAt (int index)
:返回指定索引处的 char值。public int indexOf (String str)
:返回指定子字符串第一次出现在该字符串内的索引。public String substring (int beginIndex)
:返回一个子字符串,从beginIndex开始截取字符串到字符 串结尾。public String substring (int beginIndex, int endIndex)
:返回一个子字符串,从beginIndex到 endIndex截取字符串。含beginIndex,不含endIndex7. public boolean contains(CharSequence s)
检测指定的子字符串是否存在。代码:
public static void main(String[] args) {
String str1 = "abc";
String str2 = "defg";
//1. `public int length ()` :返回此字符串的长度。
System.out.println(str1.length());// 3
//2. `public String concat (String str)` :将指定的字符串连接到该字符串的末尾。
System.out.println(str1.concat(str2)); // abcdefg
//3. `public char charAt (int index)` :返回指定索引处的 char值。
System.out.println(str1.charAt(1)); // b
//4. `public int indexOf (String str)` :返回指定子字符串第一次出现在该字符串内的索引。
System.out.println(str1.indexOf("b")); // 1
System.out.println(str1.indexOf("j")); // -1 不存在
//5. `public String substring (int beginIndex)` :返回一个子字符串,从beginIndex开始截取字符串到字符 串结尾。
System.out.println(str1.substring(1)); // bc
//6. `public String substring (int beginIndex, int endIndex)` :返回一个子字符串,从beginIndex到 endIndex截取字符串。含beginIndex,不含endIndex
System.out.println(str2.substring(1,3)); // ef
// 7. public boolean contains(CharSequence s) 检测指定的子字符串是否存在
System.out.println(str2.contains("ef")); // true
System.out.println(str2.contains("efgh")); // false
}
转换功能的方法
方法:
public char[] toCharArray ()
:将此字符串转换为新的字符数组。public byte[] getBytes ()
:使用平台的默认字符集将该 String编码转换为新的字节数组。public String replace (CharSequence target, CharSequence replacement
) :将与target匹配的字符串使 用replacement字符串替换。代码:
public static void main(String[] args) {
String str1 = "abac";
// 1. `public char[] toCharArray ()` :将此字符串转换为新的字符数组。
char[]cs = str1.toCharArray();
// 2. `public byte[] getBytes () `:使用平台的默认字符集将该 String编码转换为新的字节数组。
byte[]bs = str1.getBytes();
// 3. `public String replace (CharSequence target, CharSequence replacement`) :将与target匹配的字符串使 用replacement字符串替换。
System.out.println(str1.replace("a","A")); // AbAc
}
分割功能方法
方法:
public String[] split(String regex)
:将此字符串按照给定的regex(规则)拆分为字符串数组。代码:
public static void main(String[] args) {
//`public String[] split(String regex)` :将此字符串按照给定的regex(规则)拆分为字符串数组。
//创建字符串对象
String s = "aa-bb-cc";
String[] strArray = s.split("-"); // ["aa","bb","cc"]
for(int x = 0; x < strArray.length; x++) {
System.out.println(strArray[x]); // aa bb cc
}
}
概述
java.util.Arrays
此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法,调用起来 非常简单。
常用方法
方法:
public static String toString(int[] a)
:返回指定数组内容的字符串表示形式。public static void sort(int[] a)
:对指定的 int 型数组按数字升序进行排序。代码:
public static void main(String[] args) {
int[]nums = {100,400,200,300,600,500};
// 1. `public static String toString(int[] a) `:返回指定数组内容的字符串表示形式。
System.out.println(Arrays.toString(nums)); // [100, 400, 200, 300, 600, 500]
// 2. `public static void sort(int[] a)` :对指定的 int 型数组按数字升序进行排序。
Arrays.sort(nums);
System.out.println(Arrays.toString(nums)); // [100, 200, 300, 400, 500, 600]
}
概述
? java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具 类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单。
方法
方法:
public static double abs(double a)
:返回 double 值的绝对值。public static double ceil(double a)
返回大于等于参数的最小的整数。代码:
public static void main(String[] args) {
System.out.println(Math.abs(-100)); // 100
System.out.println(Math.ceil(10.1)); // 11.0
System.out.println(Math.floor(10.1)); // 10.0
}
概述
java.lang.Object
类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。
如果一个类没有特别指定父类, 那么默认则继承自Object类
根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。今天我们主要学习其中的2个:
public String toString()
:返回该对象的字符串表示。public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。toString方法
public String toString()
:返回该对象的字符串表示。toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。
覆盖方法:
public class Person {
private String name;
private int age;
private String gender;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}
equals方法
public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的“相同”有默认和自定义两种方式。
默认地址比较,如果没有覆盖重写equals方法,那么Object类中默认进行==
运算符的对象地址比较,只要不是同一个对象,结果必然为false。
对象内容比较,如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。
public class Person {
private String name;
private int age;
private String gender;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name) &&
Objects.equals(gender, person.gender);
}
@Override
public int hashCode() {
return Objects.hash(name, age, gender);
}
}
Objects类
在刚才IDEA自动重写equals代码中,使用到了java.util.Objects
类,那么这个类是什么呢?
在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。方法如下:
public static boolean equals(Object a, Object b)
:判断两个对象是否相等。我们可以查看一下源码,学习一下:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
Date基本使用
java.util.Date
类 表示特定的瞬间,精确到毫秒。
继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。
public Date()
:分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。public Date(long date)
:分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。public long getTime()
把日期对象转换成对应的时间毫秒值。代码:
public static void main(String[] args) {
// 创建当前日期对象
Date date = new Date();
System.out.println(date); // Sat Dec 07 17:29:13 CST 2019
// 根据时间戳创建指定日期对象
Date date2 = new Date(0);
System.out.println(date2); // Thu Jan 01 08:00:00 CST 1970
// 返回当前日期的时间戳
System.out.println(date.getTime()); // 1575710983951
}
DateFormat日期格式类
概述:java.text.DateFormat
是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
构造方法:由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat
。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:
public SimpleDateFormat(String pattern)
:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。参数pattern是一个字符串,代表日期时间的自定义格式。格式规则常用的格式规则为:
标识字母(区分大小写) | 含义 |
---|---|
y | 年 |
M | 月 |
d | 日 |
h | 时 |
m | 分 |
s | 秒 |
常用方法
public String format(Date date)
:将Date对象格式化为字符串。public Date parse(String source)
:将字符串解析为Date对象。代码:
public static void main(String[] args) throws ParseException {
// 创建当前日期对象
Date date = new Date();
// 创建格式化对象
DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String dateStr = format.format(date);
System.out.println(dateStr); // 2019-12-07 05:37:53
// 把格式化日期转换为日期对象
Date date2 = format.parse("2100-12-12 12:12:12");
System.out.println(date2); // Sun Dec 12 00:12:12 CST 2100
}
Calendar类
概述:java.util.Calendar
是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
获取Calendar对象:Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象
public static Calendar getInstance()
:使用默认时区和语言环境获得一个日历常用方法:
public int get(int field)
:返回给定日历字段的值。public void set(int field, int value)
:将给定的日历字段设置为给定值。public abstract void add(int field, int amount)
:根据日历的规则,为给定的日历字段添加或减去指定的时间量。public Date getTime()
:返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。field:Calendar类中提供很多成员常量,代表给定的日历字段:
字段值 | 含义 |
---|---|
YEAR | 年 |
MONTH | 月(从0开始,可以+1使用) |
DAY_OF_MONTH | 月中的天(几号) |
HOUR | 时(12小时制) |
HOUR_OF_DAY | 时(24小时制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | 周中的天(周几,周日为1,可以-1使用) |
代码:
public static void main(String[] args) {
// 获取日历对象
Calendar calendar = Calendar.getInstance();
// 获取当前日期的部分数据
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
System.out.println(calendar.get(Calendar.MINUTE));
System.out.println(calendar.get(Calendar.SECOND));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
}
概述
java.lang.System
类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:
public static long currentTimeMillis()
:返回以毫秒为单位的当前时间。
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
:将数组中指定的数据拷贝到另一个数组中。
参数序号 | 参数名称 | 参数类型 | 参数含义 |
---|---|---|---|
1 | src | Object | 源数组 |
2 | srcPos | int | 源数组索引起始位置 |
3 | dest | Object | 目标数组 |
4 | destPos | int | 目标数组索引起始位置 |
5 | length | int | 复制元素个数 |
代码
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
int[]nums1 = {1,2,3,4,5};
int[]nums2={88,99,188};
System.arraycopy(nums1,1,nums2,0,2);
System.out.println(Arrays.toString(nums2)); // [2, 3, 188]
long endTime = System.currentTimeMillis();
System.out.println("共耗时:" + (endTime-startTime) + "毫秒");
}
字符串拼接问题
由于String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象,既耗时,又浪费空间。为了解决这一问题,可以使用java.lang.StringBuilder
类。
概述
查阅java.lang.StringBuilder
的API,StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
原来StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。
它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder会自动维护数组的扩容。
构造方法
public StringBuilder()
:构造一个空的StringBuilder容器。public StringBuilder(String str)
:构造一个StringBuilder容器,并将字符串添加进去。常用方法
public StringBuilder append(...)
:添加任意类型数据的字符串形式,并返回当前对象自身。public String toString()
:将当前StringBuilder对象转换为String对象。代码:
public static void main(String[] args) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 10000; i++) {
builder.append(i);
}
System.out.println(builder.toString());
}
概述
Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类
如下:
基本类型 | 对应的包装类(位于java.lang包中) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
装箱与拆箱
基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
用Integer与 int为例:(看懂代码即可)
基本数值---->包装对象
Integer i = new Integer(4);//使用构造函数函数
Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法
包装对象---->基本数值
int num = i.intValue();
自动装箱与自动拆箱
由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。例如:
Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5;
//加法运算完成后,再次装箱,把基本数值转成对象。
基本数据类型和字符串互相转换
基本数据类型转换字符串:基本类型的数据 + ""
字符串转基本数据类型:除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型:
public static byte parseByte(String s)
:将字符串参数转换为对应的byte基本类型。public static short parseShort(String s)
:将字符串参数转换为对应的short基本类型。public static int parseInt(String s)
:将字符串参数转换为对应的int基本类型。public static long parseLong(String s)
:将字符串参数转换为对应的long基本类型。public static float parseFloat(String s)
:将字符串参数转换为对应的float基本类型。public static double parseDouble(String s)
:将字符串参数转换为对应的double基本类型。public static boolean parseBoolean(String s)
:将字符串参数转换为对应的boolean基本类型。代码使用(仅以Integer类的静态方法parseXxx为例)如:
public class Demo18WrapperParse {
public static void main(String[] args) {
int num = Integer.parseInt("100");
}
}
注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出
java.lang.NumberFormatException
异常。
标签:cst 动作 数值 问题 字符串 cte vat exce 静态方法
原文地址:https://www.cnblogs.com/lpl666/p/12002844.html