javaSE总结01

​ 自定义枚举类型。枚举类型包括有限个命名的值。如:

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开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

追加一个字符串并返回 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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-pAb5PthM-1715351557971)]

[外链图片转存中…(img-VXsFHv8J-1715351557971)]

[外链图片转存中…(img-aArvwFwO-1715351557972)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值