目录
基本语法/规范
标识符
变量
Java 内置数据类型
Java 引用数据类型
Arrays 类
1.自动类型转换
2.强制类型转换(编译器)
Java 常量
Java转义字符(ASCII码值)
Java 程序执行逻辑
A. 循环结构(for、while、do...while)
a. For-Each 循环(增强for循环/加强型循环)
B. 条件结构(if...else)
C. 管道结构(switch case)
Java Number&Math 类
Number&Math 类的常用方法:(以后补充)
Java Character&String 类
Java StringBuffer&StringBuilder 类
append、insert、SteringBuilder、StringBuffer的区分:
1.append 始终将指定字符添加到缓冲区的末端,而 insert 方法则会更改缓冲区然后再插入字符到指定的点。
Java Date 类
SimpleDateFormat 类(处理日期时间的类)
Java sleep():使当前线程进入停滞状态
Calendar 类
在Java世界里,可以说一切皆对象!
注:枚举可以单独声明或者声明在类里面。而方法、变量、构造函数也可以使用枚举修饰符。
格式 | 效能 |
---|---|
values() | 将枚举成员以数组形式返回 |
valueOf() | 将字符串转化成枚举类型 |
compareTo() | 比较两个枚举对象的定义顺序 |
ordinal() | 返回此枚举成员的索引 |
数组是重要的数据结构,Java 语言中提供的数组是用来存储固定大小的同类型元素。而字符串类型 String 在底层就是用 char[] 数组实现的。
java.util.Arrays 类是专门操作数组的类,它提供的所有方法都是 static 静态的。
格式 | 效能 |
---|---|
public static int binarySearch(Object[] a, Object key) | 对指定数组a进行二分查找指定元素key |
public static boolean equals(Object[] a, Object[] b) | 比较数组a、b元素数量是否相等 |
public static void fill(Object[] a, Object o) | 将指定o元素分配给数组a |
public static void sort(Object[] a) | 对指定数组a按自然顺序进行升序排列(比如0~9) |
前提:必须满足转换前的数据类型的位数要低于转换后的数据类型。(衣服只能越做越大,不能越做越小)
由低到高:
byte、short、char ——> int ——> long ——> float ——> double
前提:转换的数据类型必须是兼容的。(即具有一定的转换逻辑)以下为格式display
int i = 10;
byte b = (byte)i;
隐含的强制类型转换:
byte num1 = 10;
//整数的默认类型是int,上面就发生了int转byte的隐性强制类型转换
float num2 = 1.3f;
/*小数的默认类型是double,在给float类型赋小数值时就必须在数字后面加F或f;
即先让1.3转为float类型再赋值给num2变量*/
错误的强制类型转换:
byte num;
num = num + 1;
/*将会发生编译错误,因为发生了两次运算:
第一次num + 1是在计算运行时被提升到了int类型
第二次把int类型结果赋值给num
而这时是不会发生强制类型转换的*/
特点:常量在程序运行时是不能被修改的。(上了过山车就不能随便改座位了)
final double PI = 3.14;
//需要使用 final 关键字来表示 PI 是个常量
转义字符 | 效果 | ASCII码值(十进制) |
---|---|---|
\a | 响铃 | 007 |
\b | 退格 | 008 |
\f | 换页 | 012 |
\n | 换行 | 010 |
\r | 回车 | 013 |
\t | 水平制表(按Tab) | 009 |
\v | 垂直制表 | 011 |
\\ | 代表一个反斜线字符“\” |
092 |
\' | 代表一个单引号(撇号)字符 | 039 |
\" | 代表一个双引号字符 | 034 |
\0 | 空字符(null) | 000 |
\ddd | 1到3位的八进制所代表的任意字符 | 三位八进制 |
\xhh | 1到2位的十六进制所代表的任意字符 | 二位十六进制 |
这里就不涉及讲Java修饰符和Java运算符了。
1.
for(初始化;逻辑表达式;更新) {
//循环体
}
2.
while(逻辑表达式) {
//循环体
}
3.
do {
//循环体
}while(逻辑表达式);
for (type element:array) {
//循环体
}
1.
if(逻辑表达式) {
//true执行体
}
2.
if(逻辑表达式) {
//true执行体
}else {
//false执行体
}
if...else 语句可以连续嵌套使用
switch(表达式) {
case value1:
//执行语句
break;//可选项
case value2:
...
//你可以写任意条case语句
default://可选项
//默认执行语句
}
switch case 结构的表达式里只能填写整数型和枚举型。
当我们需要更高级的对象而不是内置数据类型时,包装类应运而生!(包装类都是抽象类 Number 的子类)Number 类属于 java.lang 包。
内置数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
(可以看出除了 char 和 int 的包装类是特别的,其余的都只不过是大写了开头字母罢了)
由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类;相应的,编译器也可以把一个数据对象拆箱为内置类型。
Java 的 Math 类的方法都被定义为 static 形式,这方便了我们的调用。
方法格式 | 效能 |
---|---|
xxxValue() | 将 Number 对象转换为xxx数据类型的值并返回 |
compareTo() | 将number对象与参数比较 |
equals() | 判断number对象是否与参数相等 |
valueOf() | 返回一个Number对象指定的内置数据类型 |
toString() | 以字符串形式返回值 |
parseInt() | 将字符串解析为int类型 |
abs() | 返回参数的绝对值 |
ceil() | 返回>=给定参数的的最小整数,类型为双精度浮点型 |
floor() | 返回<=给定参数的最大整数 |
rint() | 返回与参数最接近的整数。返回类型为double |
round() | 它表示四舍五入,算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整 |
min() | 返回两个参数中的最小值 |
max() | 返回两个参数中的最大值 |
exp() | 返回自然数底数e的参数次方 |
log() | 返回参数的自然数底数e的对数值 |
pow() | 返回第一个参数的第二个参数次方 |
sqrt() | 求参数的算术平方根(即开平方) |
sin() | 求指定double类型参数的正弦值 |
cos() | 求指定double类型参数的余弦值 |
tan() | 求指定double类型参数的正切值 |
asin() | 求指定double类型参数的反正弦值 |
acos() | 求指定double类型参数的反余弦值 |
atan() | 求指定double类型参数的反正切值 |
atan2() | 将笛卡尔坐标转换为极坐标,并返回极坐标的角度值 |
toDegrees() | 将参数转化为角度 |
toRadians() | 将角度转换为弧度 |
random() | 返回一个随机数,即是一个 [0.0, 1.0) 的伪随机 double 值 |
格式 | 效能 |
---|---|
isLetter() | 是否是一个字母 |
isDigit() | 是否是一个数字字符 |
isWhitespace() | 是否是一个空白字符 |
isUpperCase() | 是否是大写字母 |
isLowerCase() | 是否是小写字母 |
toUpperCase() | 指定字母的大写形式 |
toLowerCase() | 指定字母的小写形式 |
toString() | 返回字符的字符串形式,即字符串的长度仅为1 |
直接创建字符串 String,直接套用双引号 ""
String str = "我是直接创建的字符串";
构造函数创建字符串 String,使用关键字 new
String str2 = new String("我是用构造函数创建的字符串");
以上 str 和 str2 的区别是:str存储在公共池里,而str2存储在堆上。(前者是大家都可以引用它,后者是开辟了一个独有的空间)
格式 | 效能 |
---|---|
char charAt(int index) | 返回指定索引处的 char 值 |
int compareTo(Object o) | 把这个字符串和另一个对象比较 |
int compareTo(String anotherString) | 按字典顺序比较两个字符串 |
int compareTolgnoreCase(String str) | 按字典顺序比较两个字符串(不考虑大小写) |
String concat(String str) | 将指定字符串连接到此字符串的结尾 |
boolean contentEquals(StringBuffer sb) | 当且仅当字符串与指定的StringBuffer有相同顺序的字符时候返回真 |
static String copyValueOf(char[] data) | 返回指定数组中表示该字符序列的 String |
static String copyValueOf(char[], int offset, int count) | 返回指定数组中表示该字符序列的 String |
boolean endsWith(String suffix) | 测试此字符串是否以指定的后缀结束 |
boolean equals(Object anObject) | 将此字符串与指定的对象比较 |
boolean equalslgnoreCase(String anotherString) | 将此 String 与另一个 String 比较(不考虑大小写) |
byte[] getByte() | 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中并返回 |
byte[] getByte(String charsetName) | 使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中并返回 |
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) | 将字符从此字符串复制到目标字符数组 |
int hashCode() | 返回此字符串的哈希码 |
int indexOf(int ch, int fromIndex) | 返回在此字符串中第一次出现指定字符处的索引(从指定的索引开始搜索) |
int indexOf(String str) | 返回指定子字符串在此字符串中第一次出现处的索引 |
int indexOf(String str, int fromIndex) | 返回指定子字符串在此字符串中第一次出现处的索引(从指定的索引开始) |
String intern() | 返回字符串对象的规范化表示形式 |
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) | 告知此字符串是否匹配给定的正则表达式 |
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) | 测试两个字符串区域是否相等 |
boolean regionMatches(int toffset, String other, int ooffset, int len) | 测试两个字符串区域是否相等 |
String replace(char oldChar, char newChar) | 返回一个新的字符串(它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的) |
String replaceAll(String regex, String replacement) | 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串 |
String replaceFirst(String regex, String replacement) | 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串 |
String[] split(String regex) | 根据给定正则表达式的匹配拆分此字符串 |
String[] split(String regex, int limit) | 根据匹配给定的正则表达式拆分此字符串 |
boolean startsWith(String prefix) | 测试此字符串是否以指定的前缀开始 |
boolean startsWith(String prefix, int toffset) | 测试此字符串从指定索引开始的子字符串是否以指定前缀开始 |
charSequence subSequence(int beginIndex, int endIndex) | 返回一个新的字符序列(它是此序列的一个子序列) |
String substring(int beginIndex) | 返回一个新的字符串(它是此字符串的一个子字符串) |
String substring(int beginIndex, int endIndex) | 返回一个新字符串(它是此字符串的一个子字符串) |
char[] toCharArray() | 将此字符串转换为一个新的字符数组 |
String toLowerCase() | 使用默认语言环境的规则将此 String 中的所有字符都转换为小写 |
String toString() | 返回此对象本身(注意!它已经是一个字符串) |
String toUpperCase() | 使用默认语言环境的规则将此 String 中的所有字符都转换为大写 |
String toUpperCase(Locale locale) | 使用给定 Locale 的规则将此 String 中的所有字符都转换为大写 |
String trim() | 返回字符串的副本(忽略了前导空白和尾部空白) |
static String valueOf(primitive data type x) | 返回给定 data type 类型 x 参数的字符串表示形式 |
contains(CharSequence chars) | 判断是否包含指定的字符系列 |
inEmpty() | 判断字符串是否为空 |
想知道更多,就看Java API 文档吧!
当有对字符串 String 进行多次修改的需求时,就需要使用 StringBuffer&StringBuilder 类。
因为 String 是不可变序列,所以每当修改 String 类型时都等同于新建了个 String 对象,再让指针指向它。由此可见,频繁修改的字符串最好不用 String 类型,因为会对系统性能造成影响。(特别是当内存中的无引用对象多了以后,JVM 的 垃圾回收器 GC 就会开始工作,这极大的影响了速度)
和 String 类不同的是, StringBuffer&StringBuilder 类的对象能够被多次修改,而不必再创建新的对象。
字符串类: | String | StringBuffer | StringBuilder |
字符串修改功能 | - | ✔ | ✔ |
线程安全 | ✔ | ✔ | × |
速度优势 | 最慢 | 老二 | 最快 |
线程操作 | 不可变序列(只读安全) | 多线程 | 单线程 |
相同点 | 都经过 final 修饰,不允许被继承。(底层使用 char[] 存储) |
JVM 的智能理解:
String s1 = "I love" + "China";
一个字符串 String 对象内的拼接表示:上下两行代码的意义是相同的:(这时跟StringBuilder的执行效率一样)
String s1 = "I love China";
但是如果是多个字符串呢?那么还是得新建对象存储!如:
String s1 = "I love";
String s2 = "China"
String result = s1 + s2;
格式 | 效能 |
---|---|
public StringBuffer append(String s) | 将指定的字符串追加到此字符序列 |
public StringBuffer reverse | 将此字符序列用其反转形式取代 |
public delete(int start, int end) | 移除此序列的子字符串中的字符 |
public insert(int offset, int i) | 将 int 参数的字符串表示形式插入此序列中 |
insert(int offset, String str) | 将 str 参数的字符串插入此序列中 |
replace(int start, int end, String str) | 使用给定 String 中的字符替换此序列的子字符串中的字符 |
StringBuilder 是单机版,StringBuffer 是联机版。
格式 | 效能 |
---|---|
int capacity() | 返回当前容量 |
char chatAt(int index) | 返回此序列中指定索引处的 char 值 |
void ensureCapacity(int minmumCapacity) | 确保容量至少等于指定的最小值 |
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) | 将字符从此序列复制到目标字符数组 dst |
int indexOf(String str) | 返回第一次出现的指定子字符串在该字符串中的索引 |
int indexOf(String str, int fromIndex) | 返回第一次出现的指定子字符串在该字符串中的索引(从指定的索引处开始) |
int lastIndexOf(String str) | 返回最右边出现的指定子字符串在此字符串中的索引 |
int lastIndexOf(String str, int fromIndex) | 返回 String 对象中子字符串最后出现的位置(从指定的索引处开始) |
int length() | 返回长度(字符数) |
void setCharAt(int index, char ch) | 将给定索引处的字符设置为 ch |
void setLength(int newLength) | 设置字符序列的长度 |
CharSequence subSequence(int start, int end) | 返回一个新的字符序列,该字符序列是此序列的子序列(根据指定的开始和结束) |
String substring(int start) | 返回一个新的 String,它包含此字符序列当前所包含的字符子序列(根据指定的开始) |
String substring(int start, int end) | 返回一个新的 String,它包含此序列当前所包含的字符子序列(根据指定的开始和结束) |
String toString() | 返回此序列中数据的字符串表示形式 |
注:CharSequence与String都能用于定义字符串,但CharSequence的值是可读可写序列,而String的值是只读不可变序列。(简单来说字符串常量是包含在双引号""之间的字符序列)
java.util 包提供了Date类来封装日期/时间,我们先看看它的两个构造函数:
1.
Date()
2.
Date(long millisec)
格式 | 效能 |
---|---|
boolean after(Date date) | 若当调用此方法的Date对象在指定日期之后返回true,否则返回false |
boolean before(Date date) | 若当调用此方法的Date对象在指定日期之前返回true,否则返回false |
Object clone() | 返回此对象的副本 |
int compareTo(Date date) | 比较当调用此方法的Date对象和指定日期(两者相等时候返回0,调用对象在指定日期之前则返回负数,调用对象在指定日期之后则返回正数)晚于负数,早于正数 |
int compareTo(Object obj) | 若obj是Date类型则操作等同于compareTo(Date date),否则它抛出ClassCastException |
boolean equals(Date date) | 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false(比较) |
long getTime() | 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的Date对象表示的毫秒数 |
int hashCode() | 返回此对象的哈希码值 |
void setTime(long time) | 使用自 1970 年 1 月 1 日 00:00:00 GMT 以后的 time 毫秒数来设置时间和日期 |
String toString() | 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy(其中,dow 是一周中的某一天:Sun,Mon,Tue,Wed,Thu,Fri,Sat)zzz是时间标准 |
引入一下词条:SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。
格式 | 效能 |
---|---|
SimpleDateFormat() | 创建默认格式化方式的对象 |
public SimpleDateFormat(String pattern) | 创建指定pattern格式的对象 |
格式 | 效能 | 方向 |
---|---|---|
public String format(Date date) | 格式化时间对象date | 时间对象封装成字符串对象返回:日期 ——> 文本 |
public Date parse(String source) | 解析给定的字符串文本,返回日期对象 | 字符串对象解析成时间对象返回:文本 ——> 日期 |
日期时间的格式化编码表(pattern格式)
格式 | 描述 |
yyyy | 年份 |
MM | 月份 |
dd | 日 |
hh | 1~12小时制度 |
HH | 0~23小时制度 |
mm | 分钟 |
ss | 秒 |
S | 毫秒 |
E | 星期 |
D | 一年以来的第几天 |
F | 一月以来的第几个星期(即这月过的天数再除以7) |
w | 一年以来的第几个星期 |
W | 一月以来的第几个星期(根据实际情况来,比F更严谨) |
a | 上下午标识(am、pm) |
k | 1~24小时制度 |
K | 0~11小时制度 |
z | 代表时区 |
java.util
Thread.sleep(时间参数(单位:毫秒));
前面的格式化及创建操作我们已经学习了,但是我们如何设置、获取和运算这些日期时间呢?Calendar 类它来了!
格式 | 效能 |
---|---|
Calendar.getInstance() | 默认返回是当前系统日期 |
Calendar c1 = Calendar.getInstance();
c1.set(2023, 10-1, 6);
//c1 日期是 2023 年 9 月 6 日
Calendar 常量 | 描述 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份 |
Calendar.DATE | 日期 |
Calendar.DAY_OF_MONTH | 日期,跟DATE的意义一样 |
Calendar.HOUR | 12小时制度的小时 |
Calendar.HOUR_OR_DAY | 24小时制度的小时 |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.DAY_OR_WEEK | 星期几 |
注意:Calendar 类的月份是从 0 开始的,但其日期和年份是从 1 开始的
还有比较专业的日期时间类:GregorianCalendar 类,我这里就先不赘述了。
接下来推荐一篇文章!
Java三大特性学习笔记(基础)_忌冬的博客-CSDN博客