我的老师让我们跟着Java 程序设计基础开始学习先打好基础。所以从现在开始就跟着闵老师的专栏开始学习了。
1.第一天:环境搭建
1.1 关于Java
- 我们在安装开发环境前,可以先了解一点计算机和编程语言的历史。
- 我们在安装开发环境前,可以先了解一点计算机和编程语言的历史。
当然还有很多其他编程语言2500种以上(如用于浏览器的JavaSript、现在很火的Python等)。
- 与C和C++不同的是Java是一种面向对象发编程语言
- 平台独立性和可移植性,它号称可以“一次编写,到处执行”(因为有JVM,只要平台带有JVM则可屏蔽操作系统的差异)
比如把windows编写的代码放到Linux中,只需要把.class改成.jar
1.2 Java开发环境
JDK
JDK(Java Development Kit),Java开发工具。它包含开发所需要的工具,如编译、运行、调试等。JDK是整个Java的核心,它里面包括了JRE(Java Runtime Environment)、JVM。
图 Java Platform Standard Edition 8 documentation
1.3 Java环境搭建
- 下载JDK和环境变量
官网下载:Java Downloads | Oracle
还要对它进行环境变量配置,主要有三个:JAVA_HOME、PATH、CLASSPATH(我配置的环境的路径比书上少,但是运行又暂时没有影响,它CLASSPATH多的路径和在lib下的路径所以应该不影响)
JAVA_HOME: 表示JDK的安装目录(Eclipse等引用Java_HOME就可以找到JDK)
D:softwaseJavajdk1.8.0_281 (我的JDK安装目录)
PATH: 设置指定命令搜索路径 (cmd命令行中输入java/javac,电脑即可找到jjava.exe/javac.exe)
%JAVA_HOME%bin
%JAVA_HOME%jrebin
CLASSPATH: 设置提供类搜索路径
.;%JAVA_HOME%lib
%JAVA_HOME%是相对路径,PATH和CLASSPATH就是在这个路径下再写具体位置
因为JDK没有提供具体编译器, 这个时候我们就可以通过记事本编译。
- IDE(集成开发环境)
显然记事本编程没有高亮、提示,还需要通过命令行转化到源程序目录,然后运行javac命令和java命令。这太麻烦了,于是我们就需要在JDK的基础上再安装编辑工具或者集成开发环境。所谓集成 IDE 就是把代码的编写、调试、编译、执行都集成到一个工具中了。为了更好的学习、编写Java代码,所以这里我们还需要下载了一个Eclipse。
Eclipse官网下载:Eclipse Downloads | The Eclipse Foundation
1.4编写HelloWorld.java.
package day01;
public class Example1 {
public static void main(String []args) {
System.out.print("Holle,world!");
}//of class main
}//Of class HelloWorld
合法标识符定义规则
- 由26个英文字母(大小写)、0-9、_或$组成;
- 不能以数字开头;
- 不能使用关键字和保留字;
- 严格区分大小写;
- 不能包含空格;
- 名称命名规范
名称命名规范
- 大小写敏感:Java是对大小写敏感的语言,所以大小写不同表示的内容就不同。
- 包名:多个单词构成全部小写,如:mystudent;
- 类名、接口名:多个单词构成,每个单词首字母大写(大驼峰),如:MyStudent;
- 变量名、方法名:多个单词构成,第一个单词小写,后面的单词首字母大写(小驼峰),如:myStudent;
- 常量名:多个单词构成时,由下划线连接,全部大写,如:PI
输出
print()方法:不能换行、一个基本数类型的数据
比如"a=10",则需要:
"a=" +a(后面的a转化为了字符串)
println()方法:能换行、可有一个数据类型的参数
参数和变量
参数:调用过程中需要输入参数,参数才有值;过程中可使用。
变量:存在于过程中,过程中不可用;需要赋值才能调用值。
printf()方法:多格式数据输出
printf(String format, Object... args)
foramt:[普通字符]%[标志字符][输出宽度][.小数点位]格式控制字符[普通字符](标红必须有)
| 标识符 | 作用 |
| - | 输出数据左对齐 |
| # | 以8/16进制输出时,数据前加上“0”/“0X” |
| + | 强制输出符号(正负) |
| ' ' | 输出正数时前面有一个空格 |
| 0 | 输出数据不达指定宽度时填充0 |
| , | 千分位 |
| ( | 输出为负数给负数加括号 |
下面来用一下:
2.第 2 天: 基本算术操作 2.1数据类型
2.2运算符
- 优先级和结合性(左结合右结合)
- 运算符(9种)
| 运算符 | 含义 |
| + - * / % | 二元算数运算符 |
| + - ++ -- | 一元算数运算符 |
| > >= < <= == != | 关系运算符 |
| && || ! | 逻辑运算符 |
| & | ~ << >> >>> | 位运算符 |
| = | 赋值运算符 |
| ?: | 条件运算符 |
| += -= *= /= %= &= ^= |= <<= >>= >>>= | 扩展的运算符 |
| instanceof | 判断某对象是否是某个类的实例 |
下面来用一下:
package day02;
public class BasicOperations {
public static void main(String args[]) {
int tempFirstInt,tempSecoundInt,tempResultInt;
double tempFirstDouble,tempSecoundDouble,tempResultDouble;
tempFirstInt = 15;
tempSecoundInt = 4;
tempFirstDouble = 1.2;
tempSecoundDouble = 3.5;
//Addition
tempResultInt = tempFirstInt + tempSecoundInt;
tempResultDouble = tempFirstDouble + tempSecoundDouble;
System.out.println("" + tempFirstInt + " + " + tempSecoundInt + " = " + tempResultInt);
System.out.println("" + tempFirstDouble + " + " + tempSecoundDouble + " = " + tempResultDouble);
//Subtraction
tempResultInt = tempFirstInt - tempSecoundInt;
tempResultDouble = tempFirstDouble - tempSecoundDouble;
System.out.println("" + tempFirstInt + " - " + tempSecoundInt + " = " + tempResultInt);
System.out.println("" + tempFirstDouble + " - " + tempSecoundDouble + " = " + tempResultDouble);
//Multiplication
tempResultInt = tempFirstInt + tempSecoundInt;
tempResultDouble = tempFirstDouble + tempSecoundDouble;
System.out.println("" + tempFirstInt + " + " + tempSecoundInt + " = " + tempResultInt);
System.out.println("" + tempFirstDouble + " + " + tempSecoundDouble + " = " + tempResultDouble);
//Modulus
tempResultInt = tempFirstInt % tempSecoundInt;
System.out.println("" + tempFirstInt + " % " + tempSecoundInt + " = " + tempResultInt);
}//Of class Main
}//Of class BasicOperations
总结:
- 我编写的时候有写到第二个的时候就没有给输出的运算符左右打空格了,需要注意。
- 这里我们也可以看到包是全小写,类名是大驼峰的命名方式,变量是使用的小驼峰的方式命名。
- 还有一点我不明白的是在单独输入(答:如果输出的第一个是变量那么就要先写一个 "")
System.out.println("");
可以换行,但是如果后面有其他内容,前面不加""结果也是一样的。可能是为了代码的规范性?
System.out.println("" + tempFirstInt + " + " + tempSecoundInt + " = " + tempResultInt);
3.第 3 天: 基本if 语句
3.1流程控制语句
Java控制流程语句分为三种:顺序、选择、循环控制语句。会涉及到if-else、while、do-while、for、return、break和选择语句switch。
顺序控制语句:从前往后依次执行。
选择控制语句:(if、switch)
循环控制语句:(for)
if选择语句:
- 简单if语句
if(条件表达式){ //可以是逻辑常量、逻辑变量,一般是关系或逻辑表达式
多条语句(if字句) //一条if语句可以不加大括号
}
- if-else语句
if(条件表达式){
语句1
}else
语句2
max = a>b? a:b;
- if语句的嵌套(没有固定模式)
注意:嵌套层数一般不超过3层,嵌套过多会降低程序的可读性。
- if-else if-else(可实现多情况的判断)
if-else if-else就是if-else语句只不过书写形式改变了。
- if嵌套和if-else if-else的使用:
package day03;
import java.util.Scanner;
public class IfNest {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int score;
String grade;
System.out.print("输入成绩:");
score = reader.nextInt();
if(score >= 90)
grade = "优秀";
else
if(score >= 80)
grade = "良好";
else
if(score >= 70)
grade = "中等";
else
if(score >= 60)
grade = "及格";
else
grade = "不及格";
System.out.print("成绩等级为:" + grade);
System.out.println();
System.out.println("成绩等级为:" + grade);
System.out.printf("成绩等级为:%sn", grade);
reader.close();
}//Of class Main
}//Of class IfNest
package day03;
import java.util.Scanner;
public class IfElse {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int score;
String grader;
System.out.print("输入成绩:");
score = reader.nextInt();
if(score >= 90)
grader = "优秀";
else if(score >=80)
grader = "良好";
else if(score >= 70)
grader = "中等";
else if(score >= 60)
grader = "及格";
else
grader = "不及格";
System.out.println("成绩等级为:" + grader);
reader.close();
}//Of class Main
}//Of class IfElse
我们可以看到使用if-else if-else比if嵌套精减,其实if-else if-else就是if-else语句的另一种书写形式。
3.2 注释原则:形式统一、内容准确简洁
注释条件:
基本注释(必须加)
- 类(接口)的注释
- 构造函数的注释
- 方法的注释
- 全局变量的注释
- 字段/属性的注释
注意:简单的代码做简单注释,注释内容不大于10个字即可,另外,持久化对象或VO对象的getter、setter方法不需加注释。
特殊必加注释(必须加)
- 典型算法必须有注释。
- 在代码不明晰处必须有注释。
- 在代码修改处加上修改标识的注释。
- 在循环和逻辑分支组成的代码中加注释。
- 为他人提供的接口必须加详细注释。
注释格式:
- 单行(single-line)注释:“//……”(Ctrl+/)
- 块(block)注释:“”(Ctrl+Shift+/)(Ctrl+Shift+)
- 文档注释:“”(ALT + SHIFT +J)
- javadoc 注释标签语法
@author 对类的说明 标明开发该类模块的作者
@version 对类的说明 标明该类模块的版本
@see 对类、属性、方法的说明 参考转向,也就是相关主题
@param 对方法的说明 对方法中某参数的说明
@return 对方法的说明 对方法返回值的说明
@exception 对方法的说明 对方法可能抛出的异常进行说明
注意:文档注释是可以生成文档的。
3.3 编写IfStatement.java- 方法(函数)调用: 增加代码的复用性.
- 方法(函数)头部规范的注释, 是后期生成文档的基础.
下面来用一下:
package day03;
public class IfStatement {
public static void main(String args[]) {
int tempNumber1, tempNumber2;
//Try a positive value
tempNumber1 = 5;
if(tempNumber1 >= 0) {
tempNumber2 = tempNumber1;
} else {
tempNumber2 = -tempNumber1;
} // Of if
System.out.println("The absolute value of " + tempNumber1 + " is " +tempNumber2);
//Try a negative value
//Lines 22 through 28 are the same as Lines 34 through 40
tempNumber1 = -3;
if(tempNumber1 >= 0) {
tempNumber2 = tempNumber1;
} else {
tempNumber2 = -tempNumber1;
} // Of if
System.out.println("The absolute value of " + tempNumber1 + " is " + tempNumber2);
//Now we use a method/function for this purpose.
tempNumber1 = 6;
System.out.println("The absolute value of " + tempNumber1 + " is " + abs(tempNumber1));
tempNumber1 = -8;
System.out.println("The absolute value of " + tempNumber1 + " is " + abs(tempNumber1));
}// Of main
public static int abs(int paraValue) {
if(paraValue >= 0) {
return paraValue;
} else {
return -paraValue;
} // Of if
}// Of abs
}// Of class IfStatement
总结:代码中就对类、方法、字段和其他进行了注释。
4.第四天:闰年的计算 4.1 if 语句的嵌套昨天我们已经写到了控制流程语句→选择控制流→if语句。今天来复习复习if语句的嵌套。
- if嵌套语句没有固定的格式
- if-else if-if也是if嵌套的一种写法
之前我们有写Java的基本数据类型有四类八种(整型数、浮点数/实型数、字符型数、布尔型数),布尔型数就是逻辑值(用于表示真假),值用true和false表示。
4.3编写LeapYear.javapackage day04;
public class LeapYear {
public static void main(String[] args) {
//Test isLeapYear
int tempYear = 2021;
System.out.print("" + tempYear + " is ");
if(!isLeapYear(tempYear)) {
System.out.print("NOT ");
} // Of if
System.out.println("a leap year.");
tempYear = 2000;
System.out.print("" + tempYear + " is ");
if(!isLeapYear(tempYear)) {
System.out.print("NOT ");
} // Of if
System.out.println("a leap year.");
tempYear = 2100;
System.out.print("" + tempYear + " is ");
if(!isLeapYear(tempYear)) {
System.out.print("NOT ");
} // Of if
System.out.println("a leap year.");
tempYear = 2004;
System.out.print("" + tempYear + " is ");
if(!isLeapYear(tempYear)) {
System.out.print("NOT ");
} // Of if
System.out.println("a leap year.");
//Test isLeapYaerV2
System.out.println("Now use the second version.");
tempYear = 2021;
System.out.print("" + tempYear + " is ");
if(!isLeapYearV2(tempYear)) {
System.out.print("NOT ");
} // Of if
System.out.println("a leap year.");
tempYear = 2000;
System.out.print("" + tempYear + " is ");
if(!isLeapYearV2(tempYear)) {
System.out.print("NOT ");
} // Of if
System.out.println("a leap year.");
tempYear = 2100;
System.out.print("" + tempYear + " is ");
if(!isLeapYearV2(tempYear)) {
System.out.print("NOT ");
} // Of if
System.out.println("a leap year.");
tempYear = 2004;
System.out.print("" + tempYear + " is ");
if(!isLeapYearV2(tempYear)) {
System.out.print("NOT ");
} // Of if
System.out.println("a leap year.");
}// Of main
private static boolean isLeapYear(int paraYear) {
if((paraYear % 4 == 0) && (paraYear % 100 != 0) || (paraYear % 400 == 0)) {
return true;
} else {
return false;
} // Of if
}// Of isLeapYear
private static boolean isLeapYearV2(int paraYear) {
if(paraYear % 4 != 0) {
return false;
} else if (paraYear % 400 == 0) {
return true;
} else if (paraYear % 100 == 0) {
return false;
} else {
return true;
} // Of if
}//Of isLeapYearV2
}//Of class LeapYear
总结:
关于注释:
- 通过四天的学习我们可以发现,对类和方法/函数进行注释时,在最后一个大括号后面是没有加空格的;在对if注释时,在最后一个大括号后面加了空格。
- 在使用print/println时,如果输出的第一个是变量那么就要先写一个 ""
System.out.println("" + tempYear);
- 一个问题,在自动生成isLeapYear和isLeapYearV2的文本注释时,生成了@return但是没有要这个注释。是只需要对参数进行说明,不需要对返回值做说明?
关于代码:
- 代码中先定义了isLeapYear和isLeapYearV2,然后调用方法增加了复用性
- 代码中定义的这两种方法分别用到了if-else语句(更简洁)和if-else if-else语句。



