本章概括:
第一部分:java开发体验
1、编写HelloWorld小程序
2、类、方法(主方法)
3、文件存储
4、编译
5、运行
第二部分:语法
1、关键字
2、标识符
3、常量、变量
4、数据类型
5、运算符
第三部分:流程控制
1、顺序结构
2、循环结构
3、分支结构
4、注释
第一部分:java开发体验
1、HelloWorld小程序
学Java技术最重要的一点是平时要多敲代码多练习,这样学习和写代码的水平才会提高的快。下面先来体验一下编写第一个java小程序,从而了解java的语言基本结构。
1.1、 打开文本编辑器,新建一个java文件命名为“HelloWorld.java”
规则:文件后缀名是“.java”,文件名必须不能带空格,命名最好可以见名知意,(小提示:命名以及文件的保存路径原来是可以用中文的,原来我以为不行,就通通验证了一遍,但是还是建议使用英文规范命名文件名和保存的文件路径)。
1.2、 在文件中使用英文输入法编辑程序(包括所有符号都要用英文),只有被注释的内容才可以使用非英文字符进行编辑,如图所示。
1.3、 保存编写的java文件,打开DOS命令行,将DOS命令行当前目录设定到编写的“HelloWorld.java”文件的目录下(有两种方法可以实现:在java文件目录的显示目录框下输入“CMD”回车即可出现已转到该目录下的命令行窗口;点击【开始】>【运行】>输入“CMD”回车,在跳出的命令行窗口上用命令行的指令跳转到相应目录),在目录后面输入“javac HelloWorld.java”回车,不输出信息则表示编译成功,如果输出报错信息则表示有地方编写错误,这时要返回文件查看并修正错误并保存再编译,编译成功后再输入“java HelloWorld”回车(注意:这里输入的是“java”而上一步输入的是“javac”,这里的文件名不用跟后缀名),执行成功则会打印出“Hello World”,如图:
1.4、到这里,编写的第一个小程序就执行成功了!代码展示如下(建议手写熟练,不要复制):
<pre name="code" class="java">//这是定义一个类的语句
class HelloWorld
{
//这是一个定义类中方法的语句
public static void main (String[] args)
{
//这是打印语句,在控制台上打印出HelloWorld
System.out.println(“Hello World!”);
}
}
写代码应该按照这样的方式构思:
/*
1、需求:helloworld小程序
2、思路:、、、
3、步骤:、、、
*/
2、类、方法、语句
2.1、类是java语言体系中的基本组成元素,定义的格式为“修饰符 class 类名 {}”,大括号中写入该类定义的内容,如HelloWorld中的书写,具体规范在下面描述。
2.2、方法是类中的成员,方法写在类中,方法的格式为“修饰符 返回值 方法名(参数){}”,main方法是一个程序的主方法,main方法能被JVM(java虚拟机)识别,它是程序的入口,保证了程序的独立运行。
2.3、要执行的语句写在方法内部,如“HelloWorld”中的“System.out.println(“Hello World”);”即是一条执行语句,意思就是打印括号内引号里面的内容到控制台上。
3、文件存储
3.1、编写的java程序的文件叫java源文件,要存储成“.java”格式的文件,JVM不能直接执行该文件,需要通过编译成字节码文件JVM才能识别、运行。
4、编译
4.1、 编写好的java源文件需要通过编译成“.class”字节码文件才能被JVM执行,“javac.exe”是windows环境下的一个java编译程序,可以通过在控制台调用“javac”命令对java源文件执行编译,生成“.class”文件。
4.2、 当java源文件编写有误或源文件不在指定的目录下编译时会报告错误,这时要会根据报告的错误查找并解决错误问题,使之顺利编译生成字节码文件。
5、执行程序
5.1、 通过在控制台输入“java”命令调用java的执行程序执行class文件即可执行编译的java程序。
第二部分:词法、语法
1、关键字
1.1、定义:Java中,一些被java赋予特定含义,用作专门用途的字符串称为关键字。
规则:关键字都是小写字母的(Java语言是对大小写敏感的语言)。
未在语法中定义,但也属于关键字的字符串叫保留字。(如:goto、const)。
1.2、关键字的分类:
1.2.1、定义数据类型的关键字:
基本数据类型关键字(用于表示定义一个基本数据):
整型: byte 、short、 int、 long
浮点型:float 、double
字符型:char
布尔型:boolean
引用数据类型关键字(用于表示一些特定java类型):
class(类) interface(接口)
void(用于函数上表示无返回类型)
用于定义数据类型值的关键字:
true、 false、 null
1.2.2、定义流程控制的关键字
判断:if 、else、 switch、 case、 default
循环: while、 do、 for
跳转: break、 continue、 return
1.2.3、定义修饰符的关键字:
定义访问权限修饰符的关键字
public(公共的)、 protected(受保护的)、 private(私有的)
定义功能修饰符的关键字
static(静态的) 、 abstract(抽象的) 、final(最终的)、 synchronized(同步的)、 enum(枚举)
1.2.4、表示类型关系的关键字
extends(继承)、 implements(实现) 、this(当前引用) 、 super(父类引用) 、
instanceof(判断对象类型) 、 new(建立实例)、 import(导入类)
1.2.5、用于异常处理的关键字
try(检查异常) 、 catch(捕获异常) 、 finally(最终执行)
throw(抛出异常)、 throws(声明异常)
1.2.6、其他关键字
package(创建包)
native(本地)
strictfp(strict float point,精确浮点)
transient(变量修饰符,用它声明一个实例变量,在对象序列化时不会被序列化)
volatile(类型修饰符,用来修饰被不同线程访问和修改的变量)
assert(断言)
注:main不是关键字,却是被虚拟机所识别的一个名称。
附关键字一览表:
关键字 | 描述 | 关键字 | 描述 |
abstract | 抽象方法,抽象类的修饰符 | native | 表示方法用非java代码实现 |
assert | 断言条件是否满足 | new | 分配新的类实例 |
continue | 不执行循环体剩余部分 | package | 一系列相关类组成一个包 |
default | switch语句中的默认分支 | private | 表示私有字段或方法等,只能从类内部访问 |
do-while | 循环语句,循环体至少会执行一次 | protected | 表示保护类型字段 |
double | 64-bit双精度浮点数 | public | 表示共有属性或者方法 |
else | if条件不成立时执行的分支 | return | 方法返回值 |
enum | 枚举类型 | short | 16位数字 |
extends | 表示一个类是另一个类的子类 | static | 表示在类级别定义,所有实例共享的 |
final | 表示定义常量 | strictfp | 浮点数比较使用严格的规则 |
finally | 无论有没有异常发生都执行代码 | super | 表示基类 |
float | 32-bit单精度浮点数 | switch | 选择语句 |
for | for循环语句 | synchronized | 表示同一时间只能由一个线程访问的代码块 |
goto | 用于流程控制 | this | 调用当前实例或者调用另一个构造函数 |
if | 条件语句 | throw | 抛出异常 |
implements | 表示一个类实现了接口 | throws | 定义方法可能抛出的异常 |
import | 导入类 | transient | 修饰不要序列化的字段 |
instanceof | 测试一个对象是否是某个类的实例 | try | 表示代码块要做异常处理 |
int | 32位整型数 | void | 标记方法不返回任何值 |
interface | 接口,一种抽象的类型,仅有方法和常量的定义 | volatile | 标记字段可能会被多个线程同时访问,而不做同步 |
long | 64位整型数 | while | while循环 |
2、标识符
2.1、定义:在程序中自定义的名称,称作标识符。
2.2、作用:用于给包、类、类中成员的命名。
2.3、合法标识符的定义规则:
(1)标识符由英文字母大小写、数字、“_”、“$”组成。
(2)数字不可以开头
(3)不可以使用关键字
2.4、标识符的命名规范:
(1)为提高阅读性,命名要尽量有意义,最好见名知意。
(2)包名命名规范:由一个或多个单词组成,所有单词字母都小写(如:aaabbbccc)
(3)类名、接口名命名规范:由一个或多个单词组成,所有单词首字母大写(如:AaaBbbCcc)
(4)变量名、函数名命名规范:从第二个单词开始单词的首字母大写(如:aaaBbbCcc)
(5)常量名命名规范:所有单词字母都大写,单词之间加用“_”隔开(如:AAA_BBB_CCC)
3、常量、变量
3.1、常量的定义:Java中固定不变的量、表示一个不能被改变的数值。
3.1.1、常量的分类:
(1)数值常量:java中所有整数和小数类型都是常量。
(2)布尔型常量。布尔型常量只有两个值,就是true 和 false。
(3)字符常量。单个数字或字母、符号都是字符常量,用英文符号' '进行标识(如:’a’)。
(4)字符串常量。字符串常量是由一个或者多个字符组成,“”进行标识(如:”abc”)。
(5)null常量。只有一个数值:null,表示空值。
3.2、变量的定义:
变量就是将不确定的数据进行存储,变量是java程序中最基本的存储单元,其要素包括变量名、变量类型和作用域,可以简单理解为一个数值可以被改变的量。
3.2.1、变量的作用:
用来反复存放同一类型的数据,以便用于进行计算。变量是计算机分配的内存空间,使用前需要对其进行声明。
3.2.2、声明变量的格式:
数据类型 变量名 =初始值;
或先声明后赋值(如;数据类型 变量名; 变量名 = 初始值;)
3.2.3、变量的分类:
(1)按声明的位置分:
局部变量:在方法或语句块内部定义的变量
成员变量:在方法外部、类的内部定义的变量
(2)按数据类型分:
引用数据类型变量
基本数据类型变量
(3)还可以按用法分成静态变量和非静态变量
4、数据类型
4.1Java语言是强类型语言,对每一中数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。
Java数据类型分基本数据类型和引用数据类型
4.2基本类型:
4.2.1数值型:
整数类型:byte、short、int(默认)、long
浮点类型:float、double(默认)
4.2.2字符型:char
4.2.3布尔型:boolean
4.3引用类型:
类(class)、接口(interface)、数组([])、枚举(enum)
4.4基本数据类型的长度
4.4.1计算机都是用门电位对数据进行存储的,计算机硬件的电位数量是有限的,所以在使用计算机对数据进行计算时,要给数据定义一个相对固定的长度,一个固定长度的数据就是基本数据类型,计算机的最小存储单元是字节,每字节中包含八个电位。
4.4.2附带一张基本数据类型长度表:
类型
占用存储空间
表数范围
byte
1个字节
-128~127
short
2 个字节
-2^15~2^15-1
int
4 个字节
-2^31~2^31-1
long
8 个字节
-2^63~2^63-1
float
4 个字节
-3.403E38~3.403E38
double
8 个字节
-1.798E308~1.798E308
4.5类型提升和强制转换
4.5.1类型提升:
java在进行数值计算时,当两个数值类型长度不同时,计算的结果会自动转成精度较高的类型。容量小的类型自动转换为容量大的数据类型(容量大小即表数范围大小)。
其中byte、short、char之间不能相互转换,他们三者在计算时首先会被转换为int类型。
4.5.2强制类型转换:
容量大的数据类型转换为容量小的数据类型时要加上强制转换符,但可能造成精度降低或溢出,使用时要格外注意。有多中类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
如:byte b = 3;
b = b + 4;//4默认是int,所以会报错
b = (byte)(b+4);//这里用到强制转换,是正确表述,注意这里“b+4”要用括号括起来,否则计算机会认为你要转换的只是“b”
5、运算符
5.1运算符分类:
5.1.1算术运算符(如图):
5.1.2赋值运算符:
=、+=、-=、*=、/=、%=
表示将一个值赋给一个引用。
与算术符号结合的赋值运算符表示先用自身数值与要赋值的数进行算术运算后再做赋值动作。
5.1.3比较运算符(运算结果都是boolean值)
<、>、==、!=、<=、>=、instanceOf(比较对象)
这里的比较运算符和小学学习的数学比较数值的规则意义相同。
5.1.4逻辑运算符(运算的都是boolean值,运算结果也是boolean值)
&(与)、|(或)、!(非)、^(异或)&&(短路与)、||(短路或)
这里用文字表述“与”表示的是并且的意思,“或”表示或者的意思,“非”表示否定,“异或”表示同则假,异则真
短路表示当左边条件不成立的情况下依然执行符号右边的判断和运算,而非短路则不执行右边的判断和运算
运算规则如图:
5.1.5位运算符
<<、>>、>>>、&、|、^、~(反码)
<<:表示数值位左移,高位移出,低位填充0
>>:表示数值位右移,低位移出,高位填充原符号位的值
>>>:无符号位移,高位统一填充0
&、|、^、~:数值0表示假,1表示真,按相应逻辑运算。(~用法同“非”)
5.1.6三目运算符
? :
即:条件表达式?表达式1:表达式2
表示当条件表达式成立时执行表达式1,否则执行表达式2.
5.2运算符优先级与结合性(附图说明:优先级由上而下):
注:优先级表示在一条语句出现多种运算符时优先运算哪个,结合性表示运算时符号两边的运算顺序。
进行取模运算时,如果有负数,运算结果取决于运算左边有没有负数。
字符串数据和任何数据使用 +都是相连接,运算结果都会变成字符串。
6、转义字符
6.1概念:通过“\”来转变后面字母或符号的含义。
6.2常用转义字符:
\b:退格
\n:换行
\t:制表符,相当于tab键
\r:回车
\\:表示反斜杠
\':表示单引号
\":表示双引号
第三部分:流程控制
1、语法结构:
1.1、顺序结构:即在执行的代码块中按顺序逐一往下执行语句
1.2、循环结构:当程序中某一段语句需要重复执行就需要定义循环语句
(1)for
格式:
for(初始化表达式;条件表达式;操作表达式)
{
循环体
}
示例:代码如下
//创建一个类,命名ForDemo class ForDemo { //主函数,程序从主函数开始执行 public static void main(String[] args) { //用for循环语句在控制台上打印100次HelloWorld for (int x =0;x<100 ;x++ ) { //每循环一次,执行一次for内部的代码和操作表达式 //循环打印HelloWorld System.out.println("HelloWorld"); } } }
(2)for嵌套:
for循环中嵌套for循环,每循环完一轮内层for循环外循环才循环一次
格式:
for(初始化表达式1;条件表达式1;操作表达式1)
{
for(初始化表达式2;条件表达式2;操作表达式2)
{
循环体
}
}
示例:打印一个9*9乘法表
/* 需求:在控制台上打印一个9*9乘法表 思路:用for循环嵌套,实现打印的行列转换 行标和列标在循环条件中都有对应关系 步骤:写一个for循环,设计好行跳转的条件 在for循环里面在设一个for循环,设计列的书写格式 */ //创建一个类,命名DoubleForDemo(英语不好,大概意思意思) class DoubleForDemo { //主函数,程序从主函数开始执行 public static void main(String[] args) { //执行完一次内部循环,外部循环才执行一次 //相当于用内部循环打印一行数据,外部循环控制行的递增 for (int x =1;x<=9 ;x++ ) { //内循环控制每行打印的次数,每行打印的次数是递增的, //因为行标是递增的,所以可以将循环条件设为小于等于行标x for (int y = 1;y<=x ;y++ ) { //根据9*9乘法表的排布定义打印的数字 //这里的print是不换行的,而println是带换行的 //加一个\t表示打印时添加一个制表符,使打印更整齐 System.out.print(y+"*"+x+"="+x*y+"\t"); } //打印完一行数据换行一次 System.out.println(); } } }
(3)while
格式:
初始化表达式
while(条件表达式)
{
循环体
}
while循环同样可以进行嵌套循环,while循环与for循环的区别是初始化表达式中定义的变量作用域不同,for循环中定义的初始化变量只在for循环内有效,而while循环的初始化变量是定义在外部的,对整个语句体都有效,而且变量的生命周期比较长,for循环比while循环效率稍高
示例:用while打印100次HelloWorld
/* 需求:打印100次Helloworld */ //创建一个类,命名WhileDemo class WhileDemo { //主函数,程序从主函数开始执行 public static void main(String[] args) { //用while同样能实现打印100次HelloWorld int i = 0; while (i<100) { //打印HelloWorld System.out.print("HelloWorld"); //注意:要记得定义循环操作表达式,以控制循环的次数,否则会发生死循环(一直不停的循环) i++; } } }
(4)do while
格式:
do{
循环体
}while(条件表达式);
do while的特点是先执行再判断,所循环语句至少被执行了一次
示例:演示当不满足循环条件时do while内的语句也会先执行一次
/* 需求:验证do while在不条件不成立时仍会执行一次 */ //创建一个类,命名DoWhileDemo class DoWhileDemo { //主函数,程序从主函数开始执行 public static void main(String[] args) { do { //打印HelloWorld System.out.print("HelloWorld"); //用false做循环条件,条件恒不成立 }while (false); //do while中,while语句结尾一定要记得加分号 } }
(5)foreach
高级for循环是JDK1.5出现的新特性,用于遍历数组、集合
由于高级for要涉及未接触的知识,就不演示了,到时再讨论
1.3、分支结构
1.3.1、判断结构:
关键字:if else
格式1:if (条件表达式) {执行语句}
格式2:if (条件表达式) {执行语句} else {执行语句};(如果-否则语句)
格式3:if (条件表达式) {执行语句} else if (条件表达式) {执行语句} ...else{执行语句};(多重判断)
1.3.2选择结构:关键字:switch case default
格式:switch(条件表达式){ case 常量:执行语句; case 常量... default:执行语句;}
条件表达式可接收的参数:byte、short、int、long、char、String、enum
1.4、跳转
(1)break
用于选择结构和循环结构,表示跳出该层结构
(2)continue
跳出本次循环继续下轮循环
(3)return
函数定义的返回语句,用于返回计算结果
2、注释
2.1、注释的作用:
(1)注解、说明、解释我们的程序,提高代码的阅读性。;
(2)被注释的段落不会被JVM执行
(3)调试程序。例如程序出现错误,可以利用注释来查找出错的地方。
2.2有三种注释方式:
单行注释(//)、多行注释(/**/)、文档注释(/***/)。
单行注释:
格式:
//注释文字
多行注释:
格式:
/*
-------中间可以有多行注释文字-------
*/
注:多行注释不要嵌套多行注释,否则容易造成注释结构混乱。
文档注释:
是Java特有的注释,通常书写在类、域、构造函数、方法、定义之前。注释内容可以被JDK中的工具javadoc.exe所解析,生成一套以网页文件形式体现的该程序分说明文档。
格式:
/**
下段代码结构的作用说明
@内容
等
*/
2.3、哪些地方要注释:
(1)代码难理解的地方加单行注释
(2)在一段的中间要解释说明的加多行注释
(3)文档注释是java特有的注释,用于创建类该类或类库功能和使用事项的说明文档
2.4、注释的规范:
(1)写在需要注释的语句的上方,先注释思路,再形成代码
(2)注释的书写尽量既简洁又通俗易懂
(3)要养成一边写注释,一边写代码的习惯
本章总结:
1、从敲代码开始摸索java的基本构成,了解java的实现细节
2、java的语法由关键字、标识符、数据类型、常量、变量、以及运算符等构成
3、java还需要一套健全的流程控制机制保证程序的准确运行,java的语法边界由()、{}等来划分,划分成一个个相对独立的代码块来执行,程序的流程可以分为顺序执行、循环执行和判断执行,这样可以保证程序执行动作的多样化,从而实现功能的多样化,日后的学习都是建立在对这些语法知识的灵活运用上,所以对语法的熟悉尤为重要。
4、此外,学习时还要多思考,多练习,一些代码编写的规范虽然不按照那样写也可以执行,但为了增强代码的阅读性和结构的美观流畅度,还是建议严格按照规范来书写,以便于写完后的错漏检查和工作交流。还要养成一边写代码一边写注释的习惯,这样可以使思维更为流畅严谨,减少错误,增强代码的可用性。