我每天都在面向“对象”编程。 ———来自本文作者的冷笑话。
阅读指南
这篇文章为Java最为基础的语言基础。也就是说,你完全可以泛读一遍,让心里有个印象,仅仅接受自己可以接受的知识点就好。我希望做到的是在你心里建立一个词典,知道有这么回事儿就好。然后在下次遇到的时候回到手头的文档,或者工具书(当然我会给你一本的),来查看就好。那个时候在力尽可能的弄清楚。请记住这个学习方法。或许这个方法在考试上无效,但是在学习编程和技术上可以大显神威的。
Java语法基础
基础概念
在Java中处理少数基础类型,其他的都是类和对象。
- 类:英文就是Class。表示对具有相同一类属性的对象的一种抽象。(注意这里也说是一种抽象了,很有可能两个人的“抽”发很不同但是都可以去解决实际问题,老司机可以写出超级优秀的抽象)往往我们说,类具有熟悉和方法。
- 对象:一个拥有具体属性和方法的“类”的实例。两个实例可以拥相同的属性和方法,但是却是两实例。
- 实例:我们常常说某个对象,是某个类的实例。
- 属性、方法: 描述一个类的特征,或者说对象拥有的特性。
一个列子全解决:
我们从小动物讲起。我们知道动物就是一个类,应为每个动物都有一些抽象出来的相同的属性和能力(这里可以理解为方法)。就属性来说比如毛发的颜色,身高体重之类的。然后动物又有一些统一的方法,比如走、跑、吃、喝。就相当于类下面的方法。但是我们说动物是个类是抽象的。那么我可以说一只兔子就是动物的一个实例。我就也就可以叫这只兔子是对象了。那么它的属性就确定下来,比如毛发是白色,身高一米二之类的。方法也确定下来,毕竟兔子的吃法和老虎的吃法是不一样的。
聪明的你一定发现了,有的时候我们可以认为兔子也是一个类,级别要比动物低一些,然后兔子有很多种类,很好吃的家养兔和不太容易吃到的野生兔子。当然还有很多其他的分类方法。那么Java可以表示这些关系吗?当然是可以的。这就要涉及到继承和多态了。不要急我会在OOP(面向对象编程)中非常详细的介绍的。
Java的命名规范
大小写敏感
。类名
首字母大小。然后如果由多个单词组成单词的首字母大小。比如HappyGirlClass。方法名
方法名首字母要小写,后面的的单词首字母大写。比如findByPhoneNum。源文件名
源文件名和类名保持一致。完全的一致,然后以.java
结尾就好。
Java 关键字
Java的关键字,是不能用做变量名的字符串。也不是很多。下面有一张速查表方便你阅读。
关键字 | 描述 |
---|---|
abstract | 抽象方法,抽象类的修饰符 |
assert | 断言条件是否满足 |
boolean | 布尔数据类型 |
break | 跳出循环或者label代码段 |
byte | 8-bit 有符号数据类型 |
case | switch 语句的一个条件 |
catch | 和try搭配扑捉异常信息 |
char | 16-bit Unicode字符数据类型 |
class | 定义类 |
const | 未使用 |
continue | 不执行循环体剩余部分 |
default | switch语句中的默认分支 |
do | 循环语句,循环体至少会执行一次 |
double | 64-bit双精度浮点数 |
else if | 条件不成立时执行的分支 |
enum | 枚举类型 |
extends | 表示一个类是另一个类的子类 |
final | 表示一个值在初始化之后就不能再改变了表示方法不能被重写,或者一个类不能有子类 |
finally | 为了完成执行的代码而设计的,主要是为了程序的健壮性和完整性,无论有没有异常发生都执行代码。 |
float | 32-bit单精度浮点数 |
for | for循环语句 |
goto | 未使用 |
if | 条件语句 |
implements | 表示一个类实现了接口 |
import | 导入类 |
instanceof | 测试一个对象是否是某个类的实例 |
int | 32位整型数 |
interface | 接口,一种抽象的类型,仅有方法和常量的定义 |
long | 64位整型数 |
native | 表示方法用非java代码实现 |
new | 分配新的类实例 |
package | 一系列相关类组成一个包 |
private | 表示私有字段,或者方法等,只能从类内部访问 |
protected | 表示字段只能通过类或者其子类访问子类或者在同一个包内的其他类 |
public | 表示共有属性或者方法 |
return | 方法返回值 |
short | 16位数字 |
static | 表示在类级别定义,所有实例共享的 |
strictfp | 浮点数比较使用严格的规则 |
super | 表示基类 |
switch | 选择语句 |
synchronized | 表示同一时间只能由一个线程访问的代码块 |
this | 表示调用当前实例或者调用另一个构造函数 |
throw | 抛出异常 |
throws | 定义方法可能抛出的异常 |
transient | 修饰不要序列化的字段 |
try | 表示代码块要做异常处理或者和finally配合表示是否抛出异常都执行finally中的代码 |
void | 标记方法不返回任何值 |
volatile | 标记字段可能会被多个线程同时访问,而不做同步 |
while | while循环 |
基本数据类型
我说过在Java中除了基础数据类型以外都是对象。那么我们先来看一下基础的数据类型。
字节型(byte)
字节型是一种 8 位有正负的二进制整数
最小值是 -128(-2^7)
最大值是 127(2^7-1)
默认值为 0
字节型数据类型主要是为了在大型数组内节省空间,主要是替代整数由于字节型比整数小 4 倍。
例如:byte a = 100 , byte b = -50
短整数(short)
短整数是一种 16 位有正负的二进制整数
最小值是 -32768(-2^15)
最大值是 32767(2^15-1)
短整数类型的数据也可以像字节型一样用于节省空间。短整数比整数小两倍
默认值为 0
例如:short s = 10000, short r = -20000
整数型(int)
整数型是一种 32 位有正负的二进制整数
最小值是 - 2,147,483,648(-2^31)
最大值是 2,147,483,647(2^31 -1)
整数型一般默认被应用于整数值除非担心内存不够用。
默认值为 0
例如:int a = 100000, int b = -200000
长整型(long)
长整型是一种 64 位有正负的二进制整数
最小值是 -9,223,372,036,854,775,808(-2^63)
最大值是 9,223,372,036,854,775,807 (2^63 -1)
这种数据类型一般是在需要比整数型范围更大时应用。
默认值为 0L
例如:long a = 100000L, int b = -200000L
浮点型(float)
浮点型数据是一种单精度的 32 位 IEEE 754 标准下的浮点数据。
浮点型数据主要是为了在大型浮点数字数组中节约内存。
默认值是 0.0f。
浮点型数据不能用于如货币这样的精确数据。
例如:float f1 = 234.5f
双精度型(double)
双精度型数据是一种双精度的 64 位 IEEE 754 标准下的浮点数据。
这种数据类型主要是默认被用于表示小数的值,一般是默认的选择。
双精度型数据不能用于如货币这样的精确数据。
默认值是 0.0d
例如:double d1 = 123.4
布尔型(boolean)
布尔型数据代表一个信息比特。
它只有两个可能的值:真(true)和假(false)
这种数据类型用于真假条件下的简单标记。
默认值是假(false)
例如:boolean one = true
字符型(char)
字符型数据是简单的 16 位 Unicode 标准下的字符。
最小值是: ‘\u0000’ (或 0)。
最大值是: ‘\uffff’ (或 65,535 )。
字符型数据可以用来储存任意字母。
例如: char letter A(字符型的字母A) =’A’
引用数据类型
引用数据类型是由类的编辑器定义的。他们是用于访问对象的。这些变量被定义为不可更改的特定类型。例如:Employee, Puppy 等等。
类对象和数组变量就是这种引用数据类型。
任何引用数据类型的默认值都为空。
一个引用数据类型可以被用于任何声明类型和兼容类型的对象。
例如:Animal animal = new Animal(“giraffe”);
也就是在你定义一个变量的时候必须知道他的类型,这也是为什么Java也是强类型的原因
变量
去一个例子,直接来看看这些变量的使用和这些变量的修饰符。
|
|
流程控制
这里就是每个语言都要有的流程控制了。很简单看看就好。
循环控制
while 循环
while循环是一个控制结构,可以重复的特定任务次数。
- 语法1234while(Boolean_expression){//Statements}
在执行时,如果布尔表达式的结果为真,则循环中的动作将被执行。只要该表达式的结果为真,执行将继续下去。
在这里,while循环的关键点是循环可能不会永远运行。当表达式进行测试,结果为假,循环体将被跳过,在while循环之后的第一个语句将被执行。
do…while 循环
do … while循环类似于while循环,不同的是一个do … while循环是保证至少执行一次。
- 语法1234do{//Statements} while (Boolean_expression);
请注意,布尔表达式出现在循环的结尾,所以在循环中的语句执行前一次布尔测试。
如果布尔表达式为真,控制流跳回,并且在循环中的语句再次执行。这个过程反复进行,直到布尔表达式为假。
for 循环
for循环是一个循环控制结构,可以有效地编写需要执行的特定次数的循环。
知道一个任务要重复多少次的时候,for循环是有好处的。
- 语法1234for(initialization; Boolean_expression; update){//Statements}
下面是一个for循环的控制流程:
- 初始化步骤首先被执行,并且仅一次。这个步骤可声明和初始化任何循环控制变量。不需要把一个声明放在这里,只需要一个分号出现。
- 接下来,布尔表达式求值。如果是 true,则执行循环体。如果是false,则循环体不执行, 并且流程控制的跳转到经过for循环的下一个语句。
- 之后循环体在for循环执行时,控制流程跳转备份到更新语句。该语句允许更新任何循环控制变量。这个语句可以留空,只要一个分号出现在布尔表达式之后。
- 布尔表达式现在再次评估计算。如果是true,循环执行,并重复这个过程(循环体,然后更新的步骤,然后布尔表达式)。之后,布尔表达式为 false,则循环终止。
- 示例
|
|
for 循环在 Java 中新特性
- 语法1234for(declaration : expression){//Statements}
声明
: 新声明块变量,这是一种与你所正在访问数组中的元素兼容的变量。该变量在for块内可被利用并且它的值作为当前的数组元素将是相同的。表达
: 这个计算结果完成需要循环数组。表达式可以是一个数组变量或返回一个数组的方法调用。
- 示例1234567891011121314151617public class Test {public static void main(String args[]){int [] numbers = {10, 20, 30, 40, 50};for(int x : numbers ){System.out.print( x );System.out.print(",");}System.out.print("\n");String [] names ={"James", "Larry", "Tom", "Lacy"};for( String name : names ) {System.out.print( name );System.out.print(",");}}}
break 关键字
关键字break是用来停止整个循环的。 break关键字必须使用于任何循环中或一个switch语句中。
关键字break将停止最内层循环的执行,并开始执行在块之后的下一行代码。
语法
1break;示例
1234567891011121314public class Test {public static void main(String args[]) {int [] numbers = {10, 20, 30, 40, 50};for(int x : numbers ) {if( x == 30 ) {break;}System.out.print( x );System.out.print("\n");}}}
continue 关键字
continue关键字可以在任一环的控制结构使用。它使循环立即跳转到循环的下一次迭代.
- 在for循环中,continue关键字会导致控制流立即跳转到更新语句。
- 在一个while循环或do/while循环,控制流立即跳转到布尔表达式。
- 语法
continue 语法是任何循环中一个单独的语句:
- 示例123456789101112public static void main(String args[]) {int [] numbers = {10, 20, 30, 40, 50};for(int x : numbers ) {if( x == 30 ) {continue;}System.out.print( x );System.out.print("\n");}}}
条件判断
if语句
- 示例12345678910111213141516public class Test {public static void main(String args[]){int x = 30;if( x == 10 ){System.out.print("Value of X is 10");}else if( x == 20 ){System.out.print("Value of X is 20");}else if( x == 30 ){System.out.print("Value of X is 30");}else{System.out.print("This is else statement");}}}
if 之后可以使用很多个else。或者使用嵌套。
switch 语句
switch 语句允许一个变量来对一系列值得相等性进行测试。每个值被称为一 case,并且被启动的变量会为每一个 case 检查。
- 语法1234567891011switch(expression){case value ://Statementsbreak; //optionalcase value ://Statementsbreak; //optional//You can have any number of case statements.default : //Optional//Statements}
以下规则适用于 switch 语句:
- 在 switch 语句中使用的变量只能是一个字节,short,int 或 char。
- 在一个 switch 语句中可以有任何数量的 case 语句。每个 case 后跟着即将被比较的值和一个冒号。
- 对于 case 的值必须是相同的数据类型作为开关变量,它必须是一个常量或文字。
- 当被启动了的变量与 case 是相等的,那 case 后的语句将执行,一直到 break 为止。
- 当达到一个 break 语句,switch 终止,并且控制流跳转到跟着 switch 语句的下一行。
- 不是每一个 case 需要包含一个 break。如果没有出现 break,控制流将贯穿到后面的 case 直到 break 为止。
- switch 语句可以有一个可选默认 case ,它必须出现在 switch 的结束处。在执行一项任务时没有任何 case 是真,那默认 case 可被使用。在默认 case 中不需要 break。
后记
以上就是java的基本语法了。内容很少,不必记忆。下面一节,是面向对象编程的内容,是java中最核心的基本理论。好了看完就睡吧:)