Java基础语法d1_tips

这篇博客详细介绍了Java的基础语法,包括变量、整数运算、浮点数运算、布尔运算以及字符和字符串的操作。讲解了变量的四种类型、位运算、字符串连接、数组的使用以及字符串的不可变性等核心概念。
摘要由CSDN通过智能技术生成

结构

1、public修饰class/method-没有的话可以正确编译,但是无法从命令行执行。
2、java入口程序规定的方法必须是静态方法,方法名必须是main,括号内参数必须是String数组。
3、每一行语句必须以分号结束。
4、注意注释的方法-单行/多行
5、macOS快速格式化快捷键-四方格+上+F

一、变量

1)基本数据类型

整数(type1、long8)、浮点数(double8)、字符(char表示ASCII/Unicode)、布尔
对于float类型,需要加上f后缀
char使用单引号‘,且仅有一个字符,字符串是双引号“

2)引用类型

最常用的String字符串

3)常量

如果加上final 修饰符,即定义的变量变成了常量,不可再次赋值。

4)关键字

var代替变量类型 用赋值语句来让编译器get变量的类型

二、整数运算

正常运算,注意除法,除法取整数
整数的除法对于除数为0时运行报错,编译不报错
溢出问题:溢出不报错,会得到一个溢出的结果数字。如果溢出,可以考虑把类型从位数较短的类型变为长类型

1)移位运算

左移<< 右移>> 有符号运算
无符号右移运算 >>> 高位永远补0
对byte和short进行移位,先转为int再位移

2)位运算

按位进行与、或、非、异或的运算。
与-都为1则为1 都为0则为0 不同则为0
或-有1就为1
非-0和1互换
异或-不同为1 相同为0

3) 运算优先级

()
! ~ ++ –

  • / %

<< >> >>>
&
|
+= -= *= /=
可以用括号保证最高优先级

4)类型不一致-自动转型/强制转型

1、如果参与运算的两个数类型不一致,计算结果为较大类型的整型。
ps short类型是16位(2bytes) int 32(4bytes)
2、结果强制转型
超出范围的强制转型可能会出错,因为高位字节会直接被扔掉,别省内存,不划算。

三、浮点数运算

加减乘除
浮点数常常无法精确表示
如果整型和浮点型运算,整型自动提升到浮点型
浮点数运算除数为0时,不会报错(NaN表示not a number,Infinity无穷大,-Infinity负无穷大)

ps 如果要进行四舍五入,可以对浮点数加上0.5再强制转型。
ps注意 java的定义是,不能像python那样多个变量一起比如double a=b=x,这样会报错,因为实际上只定义了a

四、布尔运算

boolean 两个值 true/false
比较运算>,>=,<,<=,==,!=
与运算&&
或运算||
非运算!
优先级顺序如下:
!

,>=,<,<=
==,!=
&&
||
记不住老规矩上括号

短路运算

如果布尔运算能提前确定结果,则后续计算不再执行,直接返回结果。
eg false && x 永远是false so 不管x是啥 不管直接得到结果返回false
所以在这个case里,x就算其实是一个报错的含义(x=1/0比如除以了0可能会得到无穷大)也不会出现报错的
同理||

三元运算符

格式
b ?x :y 根据第一个布尔表达式的结果,返回后续两个表达式之一的计算结果。
eg 求绝对值会很好用
注意 这个式子会首先计算b 如果b为true 则只计算x,否则只计算y,x和y类型必须相同。返回值是x和y之一

note

与python进行对比,在python中 a<x<b,这种condition是合法的等同于x>a and x<b,但是java中比较结果是不可传递的,对java来说相当于a<x得到结果一个boolean值,然后用这个值和数值b比较是不可以的。

五、字符和字符串

字符

char (character),一个char保存一个Unicode字符:
eg char c1 = ‘A’
java在内存中总是使用Unicode表示字符,所以一个英文字符和一个中文字符都用char类型表示,都占用两个bytes。
显示一个字符的Unicode编码,只需要将char类型直接赋值给int类型即可。
/或者
使用转义字符’\u+Unicode’编码来表示一个字符

字符串

string是引用类型 “” 双引号表示字符串,可以储存0-任意个字符。
ps注意 空格也算一个字符的
ps2注意 如果字符串本身包含一个“双引号,需要借助转义字符
eg 对于abc”123 是要写成 “abc"123"
ps3注意 如果字符里包括转义字符\,那么需要\来表示转义字符hhhh套娃的快乐。
ps4注意 常见的转义字符
" 表示字符"
’ 表示字符’
\ 表示字符
\n 表示换行符
\r 表示回车符
\t 表示Tab
\u#### 表示一个Unicode编码的字符

字符串连接

java的编译器对字符串做了特殊照顾,可以使用+连接任意字符串和其他数据类型。
eg string1=’a‘,string2=’b‘,那么string3=string1+string2=ab 或者 string3 = string1+” ” +string2 +“!”=a b!

对于连接对象不都是字符串的时候
如果用+连接字符串和其他数据类型,会将其他数据类型先自动转型为字符串再连接
eg int age = 25; String s = "age is " + age;
s实际上= “age is 25“

多行字符串

String s = “first line \n”
+ “second line \n”
+ “end”;
java 13之后,可以用"""…""“表示Text Blocks
并不用写很多"以及很多\n
第一行只写”"" ,后面的根据自己格式写

不可变特性

这个地方可以参考理解 指针的概念。(如果理解指针就很好理解这个了啦)
比如说 String s= “a”;打印s 是 a
然后s = “b”;打印出来是b
但是在这个过程中,这两个字符串本身没变,是s指的位置变了,在第一句时,jvm虚拟机先创建字符串“a”,然后把字符串变量s指向了这个字符串;然后创建了字符串“b”,再把变量s指向了后来的字符串
这里就是 字符串类型所说的 “引用类型”。

空值null

引用类型的变量可以指向一个空值null,也就是指向一个不存在的东西,即这个变量不知向任何对象。

note

记住 java里每一个新的变量你都要记得定义,python里可以string = int(a)+int(b)+” “;但是java里你的int(a)和int(b)没有定义啊啊啊他们本质上还是原来的类型。

char类型之间的运算本质是把char类型提升为int类型输出对应的字符,so是小数据转大数据很自然的提升;
但是int强制转换char时,在java中使用的是(char)x,和python不一样。
这里的这个插图主要是表达用字符串与char相加=字符串的意思 注意顺序,如果这个空字符放到后面就会变成先几个int相加然后与空字符相加

数组类型-值类型、引用类型

数组定义
int[] ns = new int[5];
ns[0] = 68;
ns[1] = 69;

定义一个数组类型的变量,使用”类型[]",数组变量的初始化必须使用 new 数据类型[x] 表示创建一个可容纳x个元素的数组

java数组的一些特点:
1、数组所有元素初始化为默认值,整型都是0,浮点型是0.0,布尔型是false;
2、数组一旦创建后,大小不可改变。记住了不可改变┗|`O′|┛ 嗷~~。

访问数组元素,使用索引。

数组变量.length获取数组大小。

可以在定义数组时直接指定初始化的元素,可以不必写数组大小,编译器自己很懂事的会懂。
eg int[] ns = new int []{68,78,65,43,45};
或者 int[] ns = [1,2,3,4,5]

ps note 数组是引用类型,参考前面String,且大小不可变,引用就还是,变得不是数组,是指向数组的位置变了。

字符串数组

数组元素是一个引用类型的元素。
eg 定义一个字符串数组;
String[] names = {“ABC”,“xyz”,“123”};
对于这个字符串数组的数组变量names,包含3个元素,每个元素都是指向某个字符串的变量;
对names[1]赋值,eg names[1]=“cat”;
xyz没变,是指向xyz的引用指向了“cat”,xyz还在,只是无法通过names访问了。
建议看下下图
┌─────────────────────────┐
names │ ┌─────────────────────┼───────────┐
│ │ │ │ │
▼ │ │ ▼ ▼
┌───┬───┬─┴─┬─┴─┬───┬───────┬───┬───────┬───┬───────┬───┐
│ │░░░│░░░│░░░│ │ “ABC” │ │ “XYZ” │ │ “zoo” │ │
└───┴─┬─┴───┴───┴───┴───────┴───┴───────┴───┴───────┴───┘
│ ▲
└─────────────────┘

太好理解了,真的超级喜欢廖大大的教程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值