Java复习·语法部分

CY 2017年06月10日 168次浏览

在网上看了一些开源的项目,有些大神写的代码,让人第一眼看了感觉云里雾里的,但是细细的研究一下,发现写的真的是太无敌了,尽管我之前写代码的时候也用到了很多设计模式,也为代码的低耦合和简洁做足了努力,但是看到这些代码以后我感觉之前我的代码简直太弱了,这不得不让我重新审视一下Java基础。于是看书以最快的速度复习一下。

基础概念

定义类

public class定义,需要类名和文件名完全相同

class定义,类名和文件名可以不同

同一个文件里面可以有多个class,只能有一个public classmain方法不一定非要写在public class中,但是执行的时候一定要使用java main方法所在的类的类名

Class遵循大驼峰命名方式

System.out.println()System.out.print()区别于换行

每一个语句一定要写分号;结尾

注释

单行注释

// 单行注释

多行注释

/* 多行注释... */

文档注释

作用是生成Javadoc文档,当使用开发软件的时候,鼠标放到属性、方法或者类上面的时候,就显示这个类,方法,属性有什么意义,干什么用,方法中的参数有什么作用,返回值又有什么用,等等信息。

/** 文档注释 */

标识符与关键字

标识符意思就是名字,比如说变量的名字可以标识这个变量,所以变量的名字就是标识符。变量标识符使用小驼峰命名,标识符中是可以有$符号的,只要不用莫名其妙的字符、不以数字开头、不使用了关键字就可以,程序员都懂。反正大家一般都不用$符号,因为大部分情况$符号会在编译好的二进制文件中出现。对了,Java支持中文标识符。

关键字的话,不解释了。因为所谓的Java基础就是不断的去认识新的关键字,知道每个关键字的作用和限制,不断的去避免写重复代码,不断的去认识语法,不断的去看懂源码...

assert关键字JDK1.4加入

enum关键字JDK1.5加入

constgotoJava的两个保留字,就是没有用到的关键字,但是他也是关键字

数据类型

数据类型有基本数据类型和引用数据类型两种。

8种基本数据类型:

  • 数值型(不涉及到内存的开辟)

    • 整形:byte, short, int, long
    • 浮点型:floatdouble
  • 字符型: char

  • 布尔型: boolean

3种引用数据类型:

数组接口

浮点型因为有精度的问题,所以不能用来存储精确的数字信息

经常使用byte数组来存储二进制,布尔型也就是truefalse,小数一般使用double,一般是不用float的,日期时间和文件大小使用long

JDK10开始可以使用var关键字,来让JDK自己推断数据类型。

整型

如果整形的最大值 + 1就变成了最小值,最小值 - 1就变成了最大值,也就是如果超出了范围就会做循环操作,但是如果用更大范围的数据类型接收这个结果,会得到正常的结果,因为数据会自动转型。

做运算的时候数据类型小一点的类型自动转成大的类型,大的类型如果要转换为小类型就需要强制转换。强制转换一定要注意数据溢出,也就是会做循环操作,所以将很大的long类型数字赋值给int类型,很有可能返回一个负数。

因为byte数据比较常用,所以给byte赋值一个int类型的数字,不用强制转型

这些数据类型的保存范围,可以用包装类型里面的MAX_VALUEMIN_VALUE查看

大写和对应的小写字符之间差32ASCII字符

如果直接使用整形进行 / 运算,默认是不会保留小数位的

浮点型

默认就是double,如果要使用float接收浮点型需要在数字后面写上F或者f,或者强制转型为float

数值类型的字面值可以写成3.15E2

字符型

字符型是可以和整形进行相加处理的。相加的结果是ASCII码 + 整型

Java字符型可以保存中文,但是系统环境需要支持中文

字符型必须只能存储一位字符

布尔型

Java里面是不能使用10来描述布尔变量的。

字符串

字符串连接可以使用+号连接,但是不推荐,因为这样会产生很多的垃圾。

在进行字符串+操作的时候,如果连续加了两个数字,这两个数字是不会做+操作的,可以用括号来解决这个问题

字符串的一些转义字符...,这个不说了。在字符串中使用“""的话需要转义的。

基本类型和字符串相加都等于String

运算符

数学运算符

+-*/%

简化数学运算符 +=-=...

++ 自增,++在前面,先自增,再参与运算,++在后面先运算再自增

--和上面的++一样的道理

关系运算符

><==!=>=<=

数字可以和字符进行比较

但是需要注意的是,基本类型和基本类型比,引用类型和引用类型比,比如说用String类型和10进行比较就会报错,布尔值也是不能和数字进行比较的,尽量做到同类型比较吧。

三目运算符

三目运算符一般用来进行赋值操作,并且三目运算符可以无限的嵌套,不过就是有点乱。

逻辑运算符

&&&|||!

非短路和短路的区别

短路意味着条件成立后就不再往后继续比较了,非短路成立后还会继续往后比较

位运算符

&|^~>><<>>>

&:两个都为1才是1

|:两个都是0才是0

^ :相同为0不同为1

23次方: 2 << 2

涉及到二进制的时候才用位运算,很多时候位运算非常好用,比如说颜色值,比如说Java模拟JS中的Uint8Array等,具体的使用场景以后会用一篇文章具体分析。

逻辑控制

分支结构

ifif ... elseif ... else if ...else

具体的用法没必要说,可以不适用大括号{},但是需要注意,如果不使用大括号,只执行最近的一条语句,剩下的语句不会被执行,所以一般还是写上大括号,不然不容易阅读还容易造成逻辑错误。

关于if ... else if ...else可以使用switch代替,但是switch只能判断内容,JDK1.7才加入String类型的判断。

可以使用break关键字来停止case穿透

循环结构

forwhiledo...while

do...while至少会执行一次

循环条件一直成立叫做死循环,避免方法是在循环内部修改循环条件

明确知道循环次数的情况下使用for循环

循环是可以嵌套的

continue可以退出本次循环

break可以跳出当前整个循环,但是无法结束嵌套循环

方法

定义和使用

方法必要的三部分是参数,过程,返回值

如果没有返回值使用void关键字,如果有返回值一个return都不能少

方法名使用小驼峰命名

重复的代码一定要定义为方法,如果因为类型不同不能提取出一个方法,就考虑使用多态,使用泛型,总之,代码要考虑结构的合理性。

如果执行到了return语句,那么后面的代码就不会被执行了,没有返回值的方法也可以使用return来停止方法的执行

方法的重载

名称相同,参数类型或个数不同,JVM会根据调用时候参数的数量和类型来选择执行哪个方法,尽量使重载的方法返回值相同,强调一下重载和返回值没有关系。

方法递归调用

自己调用自己就是递归

一定要有递归出口,不然内存溢出,每次调用时必须改变传过来的参数,不然就不会有出口。