4.1 类结构
如下代码:
public class Test {
public static void main(String[] args){
System.out.println("hello world!");
}
}
结构为:
public class Test {
}
因为Java 是面向对象的语言,一个程序的基本单位就是 class,class 是关键字,这里定义的 class 名字就是 Test
注:
- 类名命名规范:
- 1)类名必须以英文字母开头,后接字母,数字和下划线的组合。
- 2)习惯以大写字母开头。
- 3)类的命名要有其意义,比如我这个类名为 Student,则表示这是一个学生类,不可随便命名为 A、B、C。
- public 是修饰符,表示这个类是公开的。
- 一个文件只能存在一个 public class,可以有多个 class,比如:
public class Test {
public static void main(String[] args) {
System.out.println(Node.value)
}
}
class Node {
public static String value = "node";
}
4.2 方法
在类里面,可以定义若干个方法,但是程序入口有且只有一个。
public class Test {
public static void main(String[] args) { // 程序入口
// 代码...
}
}
- 这里的方法名为 main;
- 返回值类型为 void,表示没有任何返回值;
- 上述的 public 既可以修饰类,也可以修饰方法;
- static 是关键字,修饰的方法表示静态方法, 关于这个,讲解《内存分析》的时候再说明;
- main 方法括号里的是参数,args 是参数名(可以其他命名),String[] 表示该参数是 String 类型的数组;main 方法固定这样写。
注:方法名命名规范:
- 方法名命名和类名命名规范类似,只是方法名的首字母要小写(大写也不会报错,只不过合格的程序员要遵循这种规范)。
- 方法名命名要有其意义,如 getMax(),表示这个方法的作用是获取最大值;不可随便命名为 a()、b()、c()。
4.3 语句
在方法内部,语句才是真正的执行的代码,每条语句必须以分号结束。
public class Test {
public static void main(String[] args) {
System.out.println("hello world!"); // 输出语句
}
}
输出语句:
System.out.println() 为输出语句,即括号内的会打印到控制台上。
4.4 注释
在 Java 程序中,注释是一种给人阅读的文本,不是程序的一部分,所以编译器会自动忽略注释。
优秀的程序员必须习惯写注释,告知这个类、这个方法是干什么的,这个属性是干什么的,让人一目了然。我们要清楚一点,3 个月前的你和 3 个月后的你完全不是同一个人。不写注释,读起代码十分费劲。
Java 有 3 种注释。
(1) 单行注释
以双斜线开头,直到这一行的结尾结束:
public class Test {
public static void main(String[] args) {
System.out.println("hello world!"); // 这是单行注释
}
}
(2) 多行注释
以 /* 星号开头,以 */ 结束,可以有多行:
public class Test {
public static void main(String[] args) {
System.out.println("hello world!"); // 这是单行注释
}
/*
这是多行注释,
获取最大值
*/
public static int getMax(int num1, int num2) {
return num1 > num2 ? num1 : num2;
}
}
(3)另一种多行注释
以 /** 开头,以 */ 结束,如果有多行,每行通常以星号开头,需要写在类和方法的定义处,可以用于自动创建文档。
/**
* 这是一个测试类
* @auther pkyShare
*/
public class Test {
public static void main(String[] args) {
System.out.println("hello world!"); // 这是单行注释
}
/**
* 获取最大值
* @param num1
* @param num2
* @return int
*/
public static int getMax(int num1, int num2) {
return num1 > num2 ? num1 : num2;
}
}
特别注意:虽然 Java 程序对格式没有明确的要求,多几个空格或者回车不影响程序的正确性,但是我们要养成良好的编程习惯。
- 1)命名规范必须遵循以上规则。
- 2)注意代码要对齐,如正确写法:
public class Test {
public static void main(String[] args) {
System.out.println("hello world!"); // 这是单行注释
}
public static int getMax(int num1, int num2) {
return num1 > num2 ? num1 : num2;
}
}
不要写成如下:
public class Test {
public static void main(String[] args) {
System.out.println("hello world!"); // 这是单行注释
}
public static int getMax(int num1, int num2) {
return num1 > num2 ? num1 : num2;
}
}
- 3)在写表达式的时候,比如 >、=、< 这些表达式符号时,两边的变量最好空格,如a > b,这是一种优雅的代码。尽量不要写成 a>b。
4.5 关键字
上述提到 public、class、static 等这些都是关键字,那 Java 有哪些关键字呢?如下表所示:
定义数据类型的关键字 | |||||||
class | void | byte | short | int | long | ||
float | double | char | boolean | interface |
定义流程控制的关键字 | |||||||
if | else | switch | case | default | while | ||
do | for | break | continue | return |
定义访问权限修饰符的关键字 | |||||||
public | protected | private | |||||
定义类、方法、变量修饰符的关键字 | |||||||
abstract | final | static | synchronized | ||||
定义类与类之间关系的关键字 | |||||||
extends | implements | ||||||
定义访问修饰符的关键字 | |||||||
true | false | null | |||||
定义建立实例及引用实例,判断实例的关键字 | |||||||
new | this | super | instanceof | ||||
异常处理的关键字 | |||||||
try | catch | finally | throw | throws | |||
包的关键字 | |||||||
package | import |
另外 Java 还有 3 个保留字,它们不是关键字,而是文字。包含 Java 定义的值。和关键字一样,它们也不可以作为标识符使用。
保留字 | |||||||
true | false | null |
这么多关键字我们到底该怎么记怎么学,这不用着急,随着深入学习,这些关键字都会一一掌握。
4.6 标识符
什么是标识符?就是程序中我们自己命名的,比如上述类名,方法名和变量名等这些都是标识符。它由英文小写字母、数字字符、$ 和 _ 组成。
在这里统一一下命名规则:
- 不能以数字开头
- 不能是 Java 的关键字和保留字
- 区分大小写
- 驼峰式写法
- 见名知义
比如:Student(学生)、Teacher(老师)、Car(车)、getMax(获取最大值)
4.7 常量与变量
(1)常量
固定不变的数据。
(2)变量
用于存储程序执行中用到的数据,存储的数据时可改变的。
(3)定义格式
- 变量:数据类型 变量名 = 初始化值; 如:int num = 4;
- 常量:
- 数据类型 fianl static 常量名 = 初始化值; 这是静态常量。 如:public static final double PI = 3.14;
- 数据类型 final 常量名 = 初始化值; 这是普通常量。 如:public final int x= 3;
- 还有其他定义常量的方式,之后会讲解。
4.8 运算符
我们学习数学也知道,+、- 、*、/、>、=、< 这些运算符,这里需要区分一下:
(1)赋值运算符(=、+=、-=、*=、/=、%=)
i :int a = 3;
ii :int b = a;
iii :a += 2;
- = 称为赋值,如上述中的意思是将 3 赋值给 a;将 a 赋值给 b(前提是 a 必须初始化)。
- +=,如 iii 中,一般可写成 a = a + 2;同理 -=、*=、/=、%= 一样的道理。
注:
short a = 3;
a += 3;
short b = 3;
b = b + 3;
默认转换(隐式转换)和强制转换的概念。
- 隐式转换:小类型转成大类型,联想上篇文章说到数据类型的范围,由小到大则为隐式转换。代码中 b = b + 3,由于 3 默认是 int 类型,编译器会默认将 b + 3 隐式转换为 int 类型,然后 int 类型的数据赋值给 short 类型(即大类型 --> 小类型),因此就编译不通过。
- 强制转换:大类型转成小类型。
- 格式为 目标类型 变量名=(目标类型)(被转换的数据);
- 代码中 a += 3,等价于 a =(short)(a + 3),强制将 a + 3 转为 short 类型,因此编译通过。
- 进行强制转换时需要谨慎(考虑范围)。
(2)算术运算符(+、-、*、/、%、++、–)
i :int a = 3;
ii :int b = a++;
iii :int c = ++a;
iv :int d = (a++) + (++a) + (a*10);
v :int e = a / 2;
vi :int f = a % 2;
- ++ 相当于 + 1,但需要注意前置和后置的区别,
- 如 ii 中,是将 a 赋值给 b,然后语句结束后 a 再 + 1,比如 a 初始值为 3,执行 ii 后,b 值为 3,a 最后 + 1 值为 4;
- 如 iii 中,是 a 先 + 1 值为 4,然后再将 a 的值赋值给 c ,c 值为 4。(这里跳过 ii 讲解)
- / 表示取整的意思,对于 int 类型,如 v 中,3 / 2 得 1 余 1 ,取商 1。
- % 表示取模的意思,对于 int 类型,如 vi 中,3 % 2 得 1 余 1 ,取余数 1。
输出语句内的运算:
System.out.println(1 + 1 + “1”); // 输出为 21;
System.out.println(“1” + 1 + 1); // 输出为 111;
这里的 + 号有两种含义:
(1)加号用于基本数据类型,表示加法运算符。
(2)加号用于 String 类型时,表示连接符。
1 + 1 + “1”,先执行 1 + 1 为 2,然后 2 再和 “1” 连接,则变成字符串 “21”;
“1” + 1 + 1,先执行 “1” + 1 连接成字符串 “11”,然后字符串 “11” 再和 1 连接变成字符串 “111”。
(3)关系运算符(>、==、<、>=、<=、!=)
!= 表示“不等于”。关系运算符的结果是 boolean 类型,true 或者 false。
int a = 3;
int b = 3;
System.out.println(a == b);
注:== 不要写成 =。
(4)逻辑运算符
&(与) 、|(或) 、!(非)&&(短路与)、||(短路或)、^(异或)
说明
• &:一个为假,则为假,逻辑与,从左往右判断,直到结尾才停止。如 2 > 1 & 3 < 1 & 0 < 1,这个一直判断到 0 < 1 才返回 false。
• &&:一个为假,则为假,短路与,从左往右判断,当遇到 false 则停止判断。如 2 > 1 & 3 < 1 & 0 < 1,判断到 3 < 1 则立即返回 false。
• | :一个为真,则为真,逻辑或,从左往右判断,直到结尾才停止。
• || :一个为真,则为真,逻辑或,从左往右判断,当遇到 true 则停止判断。
• ! :非 false 则 true,非 true 则 false。
• ^ :两个不同,则为 true,相同则为 false。
(5)三目运算符
(关系表达式) ? 表达式1 : 表达式2;
- 如果关系表达式结果为 true,运算后的结果是表达式1;
- 如果关系表达式结果为 false,运算后的结果是表达式2
如:
int a = 3;
int b = 4;
int c = (a > 5) ? a : b;
最终 c 值为 4。
如 : 求 三个数的最大值,用三目运算符表示。
4.9 表达式
操作数 + 运算符,组成一个表达式。如 3 + 4,这是一个加法运算, + 就是运算符,3、4 就是参与运算的操作数,3 + 4 整体就是一个算术表达式。
4.10 转义字符(\)
一些字母前加“\”,表示转移字符。直接了解如下常见转义字符的作用。
符号 | 作用 |
\n | 换行 |
\t | 水平制表 |
\’ | 单引号 |
\” | 双引号 |
\\ | 产生一个斜杆 |
例子:
(1)输出语句不用“ln”进行换行(输出语句的 ln 表示换行的意思)。
System.out.print("姓名:pkyShare\n年龄:**\n学校:*****");
(2)使用制表符优化显示效果
System.out.println("姓名\t\t年龄\t学校");
System.out.println("pkyShare\t**\t*****");
其他的自行尝试