自定义枚举类型。枚举类型包括有限个命名的值。如:
enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};
//声明这种类型的变量:
Size s = Size.MEDIUM;
Size 类型的变量只能存储这个类型声明中给定的某个枚举值,或者特殊值 null , null 表示这个变量没有设置任何值。
1.6、运算符
java 提供了一组丰富的算术和逻辑运算符以及数学函数。
1.6.1、算术运算符
在 java 中,使用算术运算符 +(加)、-(减)、*(乘)、/(除)运算。如:
int s1 = 8;
int s2 = 4;
//加
int s3 = s1 + s2;
//减
int s3 = s1 -s2;
//乘
int s3 = s1 * s2;
//除
int s3 = s1 / s2;
需要注意:整数被 0 除将会产生一个异常,而浮点数被 0 除将会得到无穷大或 NaN 结果。
1.6.2、数学函数与常量
在 Math 类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。
想要计算一个数值的平方根,可以使用 sqrt 方法:
double x = 4;
double y = Math.sqrt(x);
System.out.println(y);//输出
在 java 中,没有幂运算符,因此需要借助于 Math 类的 pow 方法。如:
double y = Math.pow(x,a);
pow 方法有两个 double 类型的参数,其返回结果也为 double 类型。
flooMod 方法的目的是解决一个长期存在的有关整数余数的问题。考虑表达式 n % 2。如果 n 是偶数,这个表达式为 0 ;如果 n 是奇数,表达式则为 1。当然,除非 n 是负数。如果 n 为负,这个表达式则为 -1;
Math 类提供了一些常用的三角函数:
Math.sin
Math.cos
Math.tan
Math.atan
Math.atan2
还有指数函数以及它的反函数——自然对数以及以 10 为底的对数:
Math.exp
Math.log
Math.log10
最后,java还提供了两个用于表示 π 和 e 常量的最接近的近似值:
Math.PI
Math.E
1.6.3、数值类型之间的转换
经常需要将一种数值类型转换为另一种数值类型。
在上图中,有 6 个实线箭头,表示无信息丢失的转换;另外有 3 个虚线箭头,表示可能有精度损失的转换。
当用一个二元运算符连接两个值时(例如 n + f,n 是整数,f是浮点数),先要将两个操作数转换为同一种类型,然后再进行计算。
- 如果两个操作数中有一个是 double 类型,另一个操作数就会转换为 double 类型。
- 否则,如果其中一个操作数是 float 类型,另一个操作数将会转换为 float。
- 否则,如果其中一个操作数是 long 类型,另一个操作数将会转换为 long 类型。
- 否则,两个操作数都将被转换为 int 类型
1.6.4、强制类型转换
在必要的时候,int 类型的值将会自动地转换为 double 类型。但有时候也需要将 double 转换为int ,在 java 中,允许进行这种数值之间的类型转换,当然有可能会丢失一些信息。这种可能损失信息的转换要通过 强制类型转换来完成。强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。如:
double s1 = 8.88;
int s2 = (int)s1;
s2的结果是 8 ;
还可以调用 Math 类 round 方法,转换后的结果是四舍五入后的结果。如:
double s1 = 8.88;
int s2 = (int) Math.round(s1);
s2 的结果是 9 ;
1.6.5、结合赋值和运算符
可以在赋值中使用二元运算符,这是一种很方便的简写形式。如
x += 4;
等价于:
x = x + 4;
也可以 +=、-=、/=、*=、%=……
1.6.7、自增与自减运算符
自增:变量本身加 1
自减:变量本身减 1
java 里面有两种形式:分别是:
-
运算符放在操作数后面的
-
运算符放在操作数前面
如:
int age = 18;
//第一种形式
age++;
age–;
//第二章形式
++age;
–age;
运算符在前面是先 加/减 1在计算
运算符在后面是先计算在 加/减 1
1.6.8、关系和 逻辑 运算符
关系运算符:
| 运算符 | 结果 |
| :-: | :-: |
| == | 等于 |
| != | 不等于 |
| > | 大于 |
| < | 小于 |
| >= | 大于或等于 |
| <= | 小于或等于 |
boolean(布尔)
值:false(错误)true(正确)
逻辑运算符
| 运算符 | 用法 | 含义 |
| :-: | :-: | :-: |
| && | x && y | 逻辑与(短路与) |
| & | x & y | 逻辑与 |
| || | x || y | 逻辑或(短路或) |
| | | x | y | 逻辑或 |
| ! | !x | 逻辑非 |
| ^ | x ^ y | 逻辑异或 |
&& 与 &:两边都为 true 则为 true ,不然 false,&& 要是第一个表达式为 false 那么它就不可能是 true 就不会在看右边的了,& 两边都一定会看。
||:其中一边为 true 则为 true ,不然 false,要是第一个表达式为 true那么它就不可能是 false 就不会在看右边的了,| 两边都会看。
!:相反的,加上逻辑非会把最终结果反过来,false 变 true ,true 变 false。
^:如果两边不一样则结果为 true ,如果两边一样 则 结果为false。
如:
int s1 = 10;
int s2 = 11;
if(s1 == s2 && s1 > s2){//结果为false
System.out.println(“true”);
}else{
System.out.println(“false”);
}
1.6.9、三元运算符
语法:表达式 ?true :false;
int s1 = 10;
int s2 = 11;
s1 > s2 ? “true”:“false”;
如果 左边表达式结果为 true 就返回 “true” 的内容
如果 左边的表达式结果为 false 就返回 “false” 的内容
1.6.10、位运算符
位运算符是直接对数字底层 二进制进行操作的
| 位运算符 | 名称 |
| :-: | :-: |
| & | 按位与 |
| | | 按位或 |
| ~ | 取反运算符 |
| ^ | 异或运算符 |
| << | 左移运算符 |
| >> | 右移运算符 |
| >>> | 无符号右移运算符 |
& 按位与:两个为 1 则为 1 ,不然为 0
| 按位或:一个为 1 则为 1 , 不然为 0
~ 取反:1 为 0 ,0 为 1
^ 异或:不一样则为 1 ,不然为 0
<< 左移运算符:二进制左移两位,右边补0
>> 右移运算符:二进制右移两位,正数左边第一位补0,负数补1
>>>无符号右移运算符:无符号右移运算符和右移运算符的主要区别在于负数的计算,无符号右移是高位补0,移多少位补多少个0
1.6.11、括号与运算符级别
- java的运算符都有自己的优先级,有()会先执行()里面的。
例如:由于 && 的优先级比 || 的优先级比 || 的优先级高,所以表达式
a && b || c
等价于
(a && b) || c
运算符优先级:
| 运算符 | 结合性 |
| :-: | :-: |
| [ ] . ( )(方法调用) | 有左向右 |
| ! ~ ++ – +(一元运算) -(一元运算)( )(强制类型转换)new | 从右向左 |
| * / % | 有左向右 |
| + - | 有左向右 |
| << >> >>> | 有左向右 |
| < <= > >= instanceof | 有左向右 |
| == != | 有左向右 |
| & | 有左向右 |
| ^ | 有左向右 |
| | | 有左向右 |
| && | 有左向右 |
| || | 有左向右 |
| ? : | 从右向左 |
| = += -= *= /= &= |= ^= <<= >>= >>>= | 从右向左 |
1.7、字符串
java 没有内置的字符串类型,而是在标准 java 类库中提供了一个预定类,很自然地叫做 String。每个用双引号括起来地字符串都是 String 类的一个实例:
String name = “”;//空字符串
String name = “zhangsan”;
1.7.1、子串
String 类的 substring 方法可以从一个较大的字符串提取出一个子串(某一段字符)。如:
String greeting = “Hello”;
String s = greeting.substring(0,3);
-
创建一个由字符"Hel"组成的字符串。
-
在 substring 中从 0 开始计算,直到 3 为止,但不包括3。
substring(开始位置,结束位置);
1.7.2、拼接
与绝大多数程序设计语言一样,java 语言 允许使用 + 号拼接两个字符串。
int age = 18;
int name = “zhangsan”;
System.out.println(name+age); //输出:zhangsan18
1.7.3、不可变字符串
String 类没有提供修改字符串中某个字符的方法。如果希望将 greeting 的内容修改为"Help",不能直接将 greeting 的最后两个位置的字符修改为 ’ p ’ 和 ’ ! '。
在 java 中实现这项操作可以提取想要保留的子串,再与希望替换的字符拼接:
greeting = greeting.substring(0,3) + “p!”;
上面这条语句将 greeting 变量的当前值修改为 “Help!”。
1.7.4、检测字符串是否相等
可以使用 equals 方法检测两个字符串是否相等。如:
x.equals(y)
如果字符串 x 与字符串 y 相等,则返回 true ;否则,返回 false。需要注意,x 与 y 可以是字符串变量,也可以是字符串字面量。如:
“Hello”.equals(greeting)
想要检测两个字符串是否相等,而不区分大小写,可以使用 equalsIgnoreCase 方法。
“Hello”.equalsIgnoreCase(“hello”)
equals 和 == 的区别
对于==:
作用于基本数据类型的变量,则直接比较其存储的 ”值“ 是否相等。
作用于引用类型的变量,则比较的是所指向的对象的地址。
对于 equals:
equals 方法不能作用于基本数据类型的变量。
如果没用对 Object 中 equals 方法进行重写,则比较的是引用类型的变量所指向的对象的地址,反之则比较的是内容
注意:String 这个类已经对 equals 方法进行了重写,比较的是字符串的内容。
1.7.5、空串与 Null 串
空串 “” 是长度为0的字符串。可以用以下代码检查一个字符串是否为空:
if(str.length() == 0)
或
if(str.equals(“”))
空串是一个 java 对象,有自己的串长度(0)和内容(空)。不过,String 变量还可以存放一个特殊的值,名为 null,表示目前没有任何对象与该变量关联。
检查一个字符串是否为 null,如:
if(str == null)
有时要检查一个字符串既不是 null 也不是空串,如:
if(str != null && str.length() != 0)
1.7.6、码点与代码单元
java 字符串由 char 值序列组成。char 数据类型是一个采用 UTF -16 编码表示 Unicode 码点的代码单元。
length 方法将返回采用 UTF-16 编码表示给定字符串所需要的代码单元数量。如:
String greeting = “Hello”;
int n = greeting.length(); //返回 5
想要得到实际的长度,即码点数量,可以调用:
int cpCount = greeting.codePointCount(0,greeting.length());
调用 s.charAt(n) 将返回位置 n 的代码单元,n 介于 0 ~ s.length()-1之间。如:
char first = greeting.charAt(0);//返回 H
char last = greeting.charAt(4); //返回 o
要想得到第 i 个码点,如:
int index = greeting.offsetByCodePoints(0,1);//位置
int cp = greeting.codePointAt(index); //转ASCII值
1.7.7、String API
java 中的 String 类包含了 50 多个方法。它们绝大多数都很有用,想了解 java 的类或方法就需要学会阅读 官方的 API 文档里面用对一些类或方法的详细讲解。
1.7.8、构建字符串
有些时候,需要由较短的字符串构建字符串,如果采用字符串拼接的方式来达到这个目的,效率会比较低。每次拼接字符串时,都会构建一个新的String 对象,即耗时,又浪费空间。使用 StringBuilder 类就可以避免这个问题的发生。
首先,构建一个空的字符串构建器:
StringBuilder builder = new StringBuilder();
当每次需要添加一部分内容时,就调用 append 方法。
builder.append(ch); //加一个字符串
builder.append(str);//再加一个字符串,结果应该是 chstr
在字符串构建完成时就调用 toString 方法,将可以得到一个 String 对象,其中包含了构建器中的字符串序列。
String completedString = buider.toStrine();
输出之后就是你 buider 里面的内容。
StringBuilder 跟 StringBuffer 的 API 是一样的。
下面一些 StringBuilder 类中的重要方法。
java.lang.StringBuilder
- StringBuilder()
构造一个空字符串构建器。
- int length()
返回构建器或缓冲器中的代码单元数量。
- StringBuilder append(String str)
追加一个字符串并返回 this(当前对象)
- StringBuilder append(char c)
追加一个代码单元并返回 this(当前对象)
- StringBuilder appendCodePoint(int cp)
追加一个码点,并将其转换为一个或两个代码单元并返回 this(当前对象)
- void setCharAt(int i,char c)
将第 i 个代码单元设置为 c
- StringBuilder insert(int offset , String str)
在 offset 位置插入一个字符串并返回 this(当前对象)
- StringBuilder insert(int offset , char c)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
再分享一波我的Java面试真题+视频学习详解+技能进阶书籍
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
int offset , char c)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-9iey0Plt-1713468633547)]
[外链图片转存中…(img-MGGhoRh4-1713468633550)]
[外链图片转存中…(img-djpBfWYH-1713468633552)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
再分享一波我的Java面试真题+视频学习详解+技能进阶书籍
[外链图片转存中…(img-osGmSQe4-1713468633554)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!