1.1开发环境
1. JDK和JRE分别是什么
*参考第9节1.3,或者上网询问*
2. 集成开发环境IDE是什么
*请上网询问,了解IDE与语言本身的区别*
1.2 开发工具
1. MyEclipse
创建项目,导入项目或文件,导出项目或文件
二、Java 语言基础
2.1 数据类型
1. 变量(variable)
- 命名规则是()
- 命名约定是()
- 规则和约定的区别是()
*书中P11和P12*
2. 数据类型(type)
- 数据有多种类型 *参考书中2.1.1至2.1.4*
请同学们注意,这部分信息繁杂,有很多细节,不要追求一次都记住,能够识别基本类型,会最基本使用即可,知识细节要在运用中逐步习得,轻松又自然。
- 我们在项目中频繁使用的 String,不是基本数据类型,而是Java语言库中定义好的类。String 这个单词的本意是绳、串,一般的文本是由一个个字符构成的“串”,故称字符串。
- 字符型 char (单词character 的前四个字母)则是基本数据类型,注意区分二者。
3. 定义变量(define avariable)
- 定义变量的内涵是()
一切程序都在内存(memory)中存活,程序中的一切数据和可执行代码都只有存在于内存中才有意义。定义变量的本质,是在内存中为定义的变量分配(allocate)大小合适的区域,同时规定了这块区域中的内容的使用方法。比如说,int 型占据4个字节,作为整数类型,对它的使用,包括进行加减乘除等操作,但不可用来做“真”或“假”的判断(和C语言不同)。变量名,可以理解为抓住这个内存区的一个“把手”,有了这个“把手”,我们才能对这块我们摸不到的内存空间进行各种操作。
*不同数据类型占据的内存空间,参考P12,P13中的表格*
2.2 运算
1. 运算符(operator)
- 有了变量,也就有了内存中的数据空间,但是只有让这些数据空间被调动起来,才能完成各种工作,也就是要对变量进行各种运算。
*书中2.2节,P17*
再次请同学们注意,不要追求一次记住这些信息,在运用中逐步掌握。
2. 语句(statement)
Java语言中,每一句完整的话,都要用分号标志结束,就像我们写文章一定离不开句号一样。遗漏分号,是一种常见的语法错误(syntax error),语法错误,简单说,就是你说的话计算机听不懂,与之相对的常见错误是逻辑错误,这时,计算机听懂你的话并执行了,但是执行的结果却不符合你的预期,因为程序的执行逻辑中隐含了错误。
3.3 逻辑结构
1. 分支结构
程序最基本结构之一,用于在不同条件下执行不同的代码。最长用的是if,以及switch,这里注意,if语句的嵌套使用是极为常见的。
*书中2.3.3节,P24*
2. 循环结构
程序最基本结构之二,常用while 及for。
*书中2.3.4节*
3. 顺序结构
我们常常忽略了最最基本的程序结构,就是顺序结构,因为这种结构不需要额外的控制语句,代码从上而下的书写顺序,就体现了顺序结构的流程。值得注意的是,这种结构有一定的灵活性,比如:
Int a = 3;
Int b = 4;
System.out.print(“a is ” + a);
System.out.print(“b is ” + b);
也可以写成:
Int a = 3;
System.out.print(“a is ” + a);
Int b = 4;
System.out.print(“b is ” + b);
这两者的书写顺序不同,执行流程也有区别,但是从程序的目的来观察,我们要先打印a的值,再打印b的值,从这个目的来说,这两种写法并没有区别,达到了同样的目的。变量的定义位置,是特别灵活的一个地方,但是从软件工程的角度来说,通常选择在最接近使用的地方去定义,这使得变量被定义的目的易于被了解。
3.3 技术细节
1. main
main 方法来自于C中的main,用来做程序的入口,入口可以理解为代码在内存空间中最开始的位置,只有抓住这个位置,程序才能按照顺序执行。所以,main作为门户,写法上有特定的要求,其四个要素缺一不可。
*书中P11,开头部分*
2. 输入语句
在基础部分,我们需要程序能在控制台接受用户输入,为此专门学习了输入语句的用法,与之相关的要点有:
Import java.util.Scanner;
……
Scanner sc = new Scanner(System.in);
……
sc.next();
……
sc.nextInt(); 等等。
*书中P23*
二、面向对象编程
2.1 面向(orient)对象(object)的概念
面向对象的概念对于初学者很难理解,它是区别于面向过程编程的概念,如果对面向过程理解尚浅,就很难体会面向对象的好处。把面向对象直接类比于现实世界中的物品,并不能说明很多编程层面的内涵,我建议大家先不要过分纠结于这些概念,先上手编程使用即可。
面向对象,名为对象,编程的核心却是类(class)的设计,对象是类的实例化(instance)。所以面向对象的核心概念是类。所谓的实例化,可以理解为把一个虚空的概念变成现实。类,好比房子的建筑图纸,对象,则是按照这张图纸在内存里把房子搭建起来。
相对于C++这样的语言,Java对面向对象的完整性要求要高得多, C++中可以像C一样,直接写一个 main函数,但是Java不可以,Java中的main必须被类包裹起来,成为类的一部分,这就是为什么我们创建一个项目之后,立刻就要创建一个类,然后在这个类中才能开始写main。
2.2 包
包不是面向对象语言的特有内容,而是Java语言提供的便于对代码组织管理的一种机制。
1. 创建包
- 会在MyEclipse中创建包
- 会把文件用拖拽的方法加入包中
- 理解创建包发生的事情
头部出现包的声明语句,包的名称对应实际的目录结构。
*书中P39 中介绍的内容,有余力再研究例3-1*
2. 导入包
- 在学习Scanner时已经用过
*书中P42*
2.3 类(class)
类,最简单、直接的理解就是一种自定义类型。所谓自定义类型是相对于基本类型而言,比如int,char,boolean……这些类型占用的空间大小,被使用的方式,都是被预先定义、不可更改的,但是类,也定义了一种类型,这个类型的大小,使用的方式,都是由程序员自行定义的。
1. 类的定义
- public class ClassName { }
*书中P43,但是书中的定义因为追求完整而显得繁琐,难以理解,建议从上面的一定开始,逐步学习*
- 命名约定:和变量的命名约定相比,首字母总是大写。
2. new 运算符
int a = 4;
这个语句的含义是:定义整型变量a,并将其初始化为4。这里需注意:变量被初始化的值和变量的类型必须一致,因为我们说过,变量的类型决定了变量在内存中的空间大小还被使用的方式,如果被赋予的值和它的类型不一致,就好像用花盆装西瓜,出现容器与内容不匹配的问题。
既然class也是一种类型,那么我们也期待它被同样的方式来使用。假设我们自定义了一种新类型
class MyType {
……
}
我们希望在用它定义变量时,像用基本类型定义变量一样
MyType a = XXX;
这里,XXX出现问题,因为不同于基本类型,NewType是自定义的,没有像整数或字符一样可以直接用来给它赋值的值,所以,使用 class 必须有它独特的语法要求,这个语法就是 new。
MyType a = new MyType();
new 关键字做的工作是,对类型MyType进行实例化,得到一个对象。这个语句把这个对象挂在变量名 a 的名下。注意,和int a = 4; 一样,这时,等号两边的类型是一样的。
*书中P43 末尾*
3. 类中的成员(member)
- 含义。类的一个最基本的好处,是把相关联的数据都打包到一起,便于管理和阅读。这些相关联的数据,就成为类里面的成员。从内存的观点,可以认为,成员决定了这种类型将占据内存空间的大小。
- 定义的方式。
*书中P45*
4. 类中的方法(method)
- 含义。从内存观点,可以认为,方法决定了这块内存被使用的方法。
- 定义的方式。
*书中P50,但是书中的定义因为追求完整而难以理解,可参考C语言中函数的定义*
- get和set 方法
get和set是类的封装特性的具有代表性的常见例子。封装、继承和多态是面向对象编程的三大特性。需掌握在MyEclipse中右键直接生成get 和set代码的方法。
*书中P50*
5. 构造方法(constructor)
- 含义,对类中成员进行初始化操作。
- 构造方法的重载
*书中P48,P52*
2.4 技术细节
1. static
静态,用来修饰成员或成员方法。前面说过,对象是类的实例化,不经过new,类中的成员就无法从图纸上变成现实。然而,被static 修饰的成员或方式是个例外。它不跟随new 被创建,也不在对象的内存空间里。所以,它可以直接通过类名加点来访问,这对于普通成员或方法是做不到的。
2. final
被final关键字修饰的成员不可以被修改。final 修饰的方法则表示,在继承关系中,父类中的final方法不能被子类重写。
3. 访问控制符
private,public,protected等都是用来控制类中成员或方法的访问权限的。什么都不写就是默认权限。访问控制权限集中反映了类的封装性。
*书中P46*
这部分关系很繁琐,不要心急,在编写代码中遇到各种情况细细体会。