Java程序基础

Java程序基本结构

因为Java是面向对象的语言,一个程序的基本单位就是class,class是关键字。

类名的要求:类名必须以英文字母开头,后接字母、数字和下划线的组合;习惯以大写字母开头。

public是访问修饰符,表示该class是公开的。不写public也能正确编译,但是这个类将无法从命令行执行。

在class内部,可以定义若干方法。

这些方法定义了一组执行语句,方法内部的代码将会被依次顺序执行。

 这里的方法名是main,返回值是void,表示没有返回值。

同时可以看到public除了可以修饰class外,也可以修饰方法。Java入口程序规定的方法必须是静态方法,方法名必须为main,括号内的参数必须是String数组。

方法名也有命名规则,首字母小写后面的单词首字母大写。

在方法内部,语句才是真正的执行代码。Java的每一行语句必须以分号结束。

变量和数据类型

在Java中,变量分为两种:基本类型的变量和引用类型的变量。

变量的一个重要特点是可以重新赋值。

基本数据类型:

        整数类型:byte(1),short(2),int(4),long(8)

        浮点数类型:float(4),double(8)

        字符类型:char(2)

        布尔类型:boolean

计算机内存最小的存储单元是字节,一个字节就是一个8位二进制,即8个bit。

整型

对于整型类型,Java只定义了带符号的整型。因此,最高位的bit表示符号位(0表示正数,1表示负数)

浮点数

浮点类型的数就是小数。对于float类型,需要加上f后缀。

布尔类型

布尔类型boolean只有true和false两个值,总是关系运算的计算结果。

字符类型

字符类型char表示一个字符。Java的char类型除了可表示标准的ASCII外,还可以表示一个Unicode字符。char类型使用单引号‘’,且仅有一个字符。

引用类型

除了基本类型的变量,剩下的都是引用类型,最常用的就是string字符串。

常量

定义变量的时候,如果加上final修饰符,这个变量就变成了常量。常量在定义时进行初始化后就不可再次赋值,再次赋值会导致编译错误。常量名通常全部大写。

var关键字 

有的时候,类型名字太长,写起来比较麻烦

如果想省略变量类型,可以使用var关键字

 

 编译器会根据赋值语句自动推断出变量sb的类型是StringBuilder。

整数运算

Java的整数运算遵循四则运算规则,可以使用任意嵌套的小括号。

整数的除法对于除数为0时运行时将报错,但编译不会报错。

整数由于存在范围限制,如果计算结果超出了范围,就会产生溢出,而溢出不会出错,却会得到一个奇怪的结果。

左移实际上就是不断地x2,右移实际上就是不断地/2

运算优先级

运算优先级从高到低依次是:

()

! ~  ++ --

* / %

+ -

<<  >>  >>>

&

|

+=  -=  *=  /=

类型自动提升与强制转型

在运算过程中,如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型。例如,short和int计算,结果总是int,原因是short首先自动被转型为int。

也可以将结果强制转型,即将大范围的整数转型为小范围的整数。强制转型使用,例如,将int强转为short。但是超出范围的强制转型会得到错误的结果,原因是转型时,高位字节直接被扔掉,仅保留了低位的字节。因此,强制转型的结果很可能是错的。

浮点数运算

浮点数运算和整数运算相比,只能进行加减乘除这些数值计算,不能做位运算和移位运算。浮点数常常无法精确表示。运算会产生误差。

由于浮点数存在运算误差,所以比较两个浮点数是否相等常常会出现错误的结果。正确的比较方法是判断两个浮点数之差的绝对值是否小于一个很小的数。

类型提升

如果参与运算的两个数其中一个是整型,那么整型可以自动提升到浮点型。在一个复杂的四则运算中,两个整数的运算不会出现自动提升的情况。例如:double d =1.2 +24/5;计算结果为5.2,原因是编译器计算24/5这个子表达式时,按两个整数进行运算,结果仍为整数4。

溢出

整数运算在除数为0时会报错,而浮点数运算在除数为0时,不会报错,但会返回几个特殊值:

NaN表示Not a Number

Infinity表示无穷大

-Infinity 表示负无穷大

强制转型

可以将浮点数强制转型为整数。在转型时,浮点数的小数部分会被丢掉。如果转型后超过了整型能表示的最大范围,将返回整型的最大值。如果要进行四舍五入,可以对浮点数加上0.5再强制转型

布尔运算

对于布尔类型,永远只有true和false两个值

布尔运算是一种关系运算,包括比较运算符( >   >=  <  <=  ==  !=)、与运算&&、或运算|| 非运算!

关系运算符的优先级从高到低依次是:

> , >=, <, <=

==,!=

&&

||

短路运算

如果一个布尔运算的表达式能提前确定结果,则后续的计算不再执行,直接返回结果。

如果没有短路运算,&&后面的表达式会由于除数为0而报错,但实际上该语句并为报错,原因在于与运算是短路运算符,提前计算出了结果为false。 

三元运算符

三元运算符b?x:y会首先计算b,如果b为true,则只计算x,否则,只计算y。此外,x和y的类型必须相同,因为返回值不是Boolean ,而是x和y之一。

字符和字符串

在Java中,字符和字符串是两个不同的类型。

字符类型

字符类型char是基本数据类型,他是character的缩写。一个char保存一个Unicode字符。要显示一个字符的Unicode编码,只需将char类型直接赋值给int类型即可,还可以直接用转义字符\u+Unicode编码来表示一个字符。

字符串类型

和char类型不同,字符串类型String是引用类型,我们用双引号“”表示字符串。一个字符串可以存储0个到任意个字符。

因为字符串使用双引号表示开始和结束,如果字符串本身恰好包含一个”字符就需要借助转义字符\。因为\是转义字符,所以\\表示一个\字符

字符串连接

可以使用+连接任意字符串和其他数据类型。如果用+连接字符串和其他数据类型,会将其他数据类型先自动转型为字符串,再连接。

多行字符串

字符串可以用“““ 。。。”””表示多行字符串

 多行字符串前面共同的空格会被去掉,总是以最短的行首空格为基准

不可变特性

字符串不可变

其实变的不是字符串,而是变量s的“指向” 。字符串“hello”还在,只是我们无法通过变量s访问它而已。因此,字符串的不可变是指字符串内容不可变。

空值null

引用类型的变量可以指向一个空值null,它表示不存在,即该 变量不指向任何对象。空字符串是一个有效的字符串对象,它不等于null。

数组类型

Java的数组有几个特点:

        数组所有元素初始化为默认值,整型都是0,浮点型是0.0,布尔型是false;

        数组一旦创建后,大小就不可改变。

要访问数组中的某一个元素,需要使用索引。数组索引从0开始。可以用数组变量.length获取数组大小。

数组是引用类型,在使用索引访问数组元素时,如果索引超出范围,运行时将报错 。

也可以在定义数组时直接指定初始化的元素,这样就不必写出数组大小,而是由编译器自动推算数组大小。

数组元素可以是值类型或引用类型,但数组本身是引用类型。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值