一个简单的Java程序
1 | public class Main { |
上面是一个简单的Java程序,作用是在控制台输出Hello World!。下面来分析这段代码
public
public是访问修饰符,这些修饰符用于控制程序的其他部分对这段代码的访问级别。访问
修饰符包括public private protect和默认修饰符.关于访问修饰符,后面会具体介绍。
class Main
class是关键字,class 类名用来定义一个类,Java程序的所有内容都必须放在类中。
Java类名的规则:
- 类名不能以数字开头,必须是字母
- 不能使用Java保留字(后面会介绍Java保留字)
Java类名的规范:(注意,规则是强制要求的,下面规范不是。不过遵守规范有利于代码结构清晰,建议遵守规范)
- 类名是以大写首字母开头的名词,如
First - 如果类名由多个单词组成,则每个单词首字母都应该大写(即驼峰命名法),如
FirstSimple
public static void main(Strinf[] args){…}
这个是在类Main中定义了一个方法。static是指静态,void表示无返回值,main是方法名(后面的文章会介绍)。注意:main
方法是一个特殊的方法,每一个Java应用程序都必须有一个main方法,没有main方法程序将不能执行,而且main方法的修饰符必须是public。
java的基本数据类型
java是一种强类型语言,这意味着必须给每一个变量声明一种类型。在Java中一共有八种基本类型,它们分别是
整形(byte,short,int,long),浮点型(float,double),字符型(char),表示真值的(boolean)
整形
整形表示没有小数部分的值,它允许是负数.java有四种整形,具体区别如下:
| 类型 | 储存需求 | 取值范围 |
|---|---|---|
| int | 4字节 | -2,147,483,648(-2^31)~ 2,147,483,647(2^31 - 1)(正好超过20亿) |
| short | 2字节 | -32768(-2^15)~ 32767(2^15 - 1) |
| byte | 1字节 | -128(-2^7)~ 127(2^7-1) |
| long | 8字节 | -9,223,372,036,854,775,808(-2^63)~ 9,223,372,036,854,775,807(2^63 -1) |
注意:long类型后面通常有L或l(l容易和1混淆,所以推荐使用大写的L),如2000000000000000L
二进制,八进制,十六进制
二进制 : 加上前缀0b或0B表示二进制,如0b1001表示9
八进制 : 加上前缀0表示八进制,如010表示8,不过八进制表示法容易混淆,所以不推荐使用
十六进制 : 加上前缀0x或0X表示十六进制.
从Java 7 开始,还可以为数字字面量加下划线,如用1_000_000表示一百万.这些下划线只为了让人更
易读,Java编译器会除去这些下划线。
浮点型
浮点型用于表示有小数部分数值的类型,在Java中有两种浮点类型,具体的区别如下:
| 类型 | 储存需求 | 取值范围 |
|---|---|---|
| float(单精度浮点值) | 4节字 | float 数据类型是单精度、32位、符合IEEE 754标准的浮点数; |
| double(双精度浮点值) | 8字节 | double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数 |
float类型的数值有一个后缀f或F,如果没有后缀的浮点值默认为double(也可以往浮点值后面加d或D,表示double类型)
特殊的浮点数值 :
- 正无穷大
- 负无穷大
- NaN 表示0/0或负数的平方根,不是一个数字
注意:不能用浮点型做精确运算;更不能使用while( i == 浮点数)作为循环条件,由于二进制本身的特性。
char
char类型的值用’’表示,如char a = 'a'.具体的关于char的说明请看后面的文章
char类型特殊字符的转义序列
| 转义序列 | 名称 | Unicode值 |
|---|---|---|
| \b | 退格 | \u0008 |
| \t | 制表 | \u0009 |
| \n | 换行 | \u000a |
| \r | 回车 | \u000d |
| \” | 双引号 | \u0022 |
| \’ | 单引号 | \u0027 |
| \ | 反斜杠 | \u005c |
| – | ™ | \u2122 |
| – | π | \u03c0 |
boolean类型
boolean(布尔)类型有两个值true和false.用来判断逻辑条件
String
String表示字符串类型如”abcdefg”,与上面的基本类型不同,String是引用类型(具体的后面会介绍)
数组
声明数组变量
首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
1 | dataType[] arrayRefVar; // 推荐 |
注意: 建议使用 dataType[] arrayRefVar 的声明风格声明数组变量。 dataType arrayRefVar[] 风格是来自 C/C++ 语言 ,
在Java中采用是为了让 C/C++ 程序员能够快速理解java语言。
1 | double[] myList; // 首选的方法 |
创建数组
Java语言使用new操作符(后面会介绍)来创建数组,语法:arrayRefVar = new dataType[arraySize];
上面的语法语句做了两件事:
- 使用 dataType[arraySize] 创建了一个数组。
- 把新创建的数组的引用赋值给变量 arrayRefVar。
1 | //数组变量的声明,和创建数组可以用一条语句完成,如下所示: |
数组的元素是通过索引访问的。数组索引从 0 开始,所以索引值从 0 到 arrayRefVar.length-1。
数组的拷贝
1 | //错误示例,这种方式两个数组变量将引用同一个数组 |
注释
在Java中有三种标记注释的方式
1 | //单行注释 |
变量
声明变量
在Java中声明变量的语法是类型 变量名,例如
1 | int a; |
注意:每个变量声明都必须以;结尾
变量初始化
1 | int a = 1;//直接初始化 |
注意:声明一个变量之后,必须进行初始化,不能使用未初始化的值,否则会报错。(成员变量声明后有默认值,已经初始化了,所以可以直接使用)
常量
在Java中,利用关键字final指示常量(常量是指不会变的量),例如:
1 | final int A = 10;//必须直接赋值,赋值后就不能再更改,习惯上常量名全大写 |
运算符
算术运算符
| 操作符 | 描述 | 例子 |
|---|---|---|
| + | 加法 | a + b |
| - | 减法 | a - b |
| * | 乘法 | a * b |
| / | 除法 | a / b |
| % | 取余 | a % b |
| ++ | 自增 | 有a++和++a两种,具体区别见下文 |
| – | 自减 | 有a--和--a两种,具体区别见下文 |
a++和++a的区别:
++a:先进行自增运算,再进行表达式运算,而a++先进行表达式运算,再进行自增运算.(a--和--a类似)
1 | int a = 1; |
关系运算符
| 运算符 | 描述 |
|---|---|
| == | 检查如果两个操作数的值是否相等,如果相等则条件为真。 |
| != | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 |
| > | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 |
| < | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 |
| >= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 |
| <= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 |
逻辑运算符
| 操作符 | 描述 | ||
|---|---|---|---|
&& |
当且仅当两个操作数都为真,条件才为真。 | ||
| ` | ` | 如果任何两个操作数任何一个为真,条件为真。 | |
! |
用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 |
位移运算符
操作符|描述|
|—–|—-|
|&|与运算|
|||或运算|
|〜|按位取反运算符|
|<<|按位左移运算符|
|>>|按位右移运算符|
|>>>|按位右移补零操作符|
赋值运算符
| 操作符 | 描述 | 例子 | |
|---|---|---|---|
= |
赋值运算符 | — | |
+= |
加和赋值操作符 | C += A等价于C = C + A | |
-= |
减和赋值操作符 | C -= A等价于C = C-A | |
* = |
乘和赋值操作符 | C = A等价于C = C A | |
/= |
除和赋值操作符 | C / = A等价于C = C / A |
以上只列举了比较常用的运算符,具体的运算符可以看菜鸟教程
java循环结构
while循环
while循环的基本形式:
1 | while(布尔表达式){ |
do…while循环
基本形式:
1 | do{ |
do...while循环和while循环的区别?
do...while循环中的语句至少会执行一次,而while循环里面的语句至少执行0次
for循环
例如:
1 | for (int i = 0; i < 10; i++) { |
首先i = 0与10比较,其结果为true,执行System.out.println(i);语句;之后执行i++,此时i = 1,再与10进行比较,直到i < 10的结果为false为止.
增强 for 循环
示例:
1 | int a[] = {1,2,3,4,5}; |
break和continue
break
break主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
break的使用
1 | break; //是跳出里层循环(针对几层循环而言)) |
continue
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
- 在 for 循环中,continue 语句使程序立即跳转到更新语句。
- 在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
continue也可以指定循环的名字,直接跳到该循环
条件语句
1 | //if语句 |
switch
基本语法
1 | switch(expression){ |
注意:
- expression变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
- 如果expression与任意
case中的值匹配,就相当于打开了开关,之后的值不会再比较而是直接运行语句,直到碰到过break.
示例:
1 | char grade = 'C'; |