A Quick Tour of Java
1. 历史: 从James Gosling开始说起
Gosling 为什么要开发Java: 为了开发applet
applet 是什么: 一种可运行于Java支持的浏览器的小应用-现已过时
Gosling 首先将Java命名为Oak, 后改名为Java
-
探究: applet 与 application 的区别
- applet不包含main method, 而application必须包含main method
-- 因为, application的前提条件是能够独立运行, 不借助于浏览器或其他软件 - applet不可以通过command line(Interpreter)直接运行, 而applicatinon可以
- applet可以通过浏览器间接使用, 因此扩大了其应用范围, 当时红极一时.
- applet不包含main method, 而application必须包含main method
注意: Java不是Java Script的缩写, 两者不是同一个东西
2. Java Features(特点)-本学科强调讲解了Java的特色: Object oriented
- Compiled and Interepted Language: 解释型编译语言 - 既要解释(需要解释器), 又要编译(编译器)
- 探讨: Java与单纯的编译型语言的区别:
- 编译过程不同
- Java的编译过程:
- 人机交互->.java文件->.class文件->Hardware Excuting System
- 文件属性: Java Source Code->Byte Code
- 平台: Editor -> Compilor -> Interpreter
* C语言的编译过程:
> * 人机交互->.c文件->.o文件->Excute
> * 文件属性: C Source Code->Object Code->.out最终可运行文件
> * 平台: Editor -> Compilor -> Linker
- 运行侧重点不同:
- C语言编译的时候, 因为系统存在差异,同一个Source Code可能会得到不同的Object Code, 因为这样, Compiled Language不具有可移植性(.o文件不能再不同系统上运行), 想要在不同系统上运行必须重新编译.
- 但是, 因为C语言在编译的时候不需要经过解释, 所以在时间和空间的运行上大大节省了时间, 因此论运行速度, 编译型语言要快的多
- Java编译的时候通过创建了与系统一对一的解释器,赋予了机器解析Byte Code的能力, 这种Byte Code可以在任何系统上运行. 因此, Compilor得到的文件可移植.
- 但是因为创建了中间产物, 运行速度不如编译型语言迅捷.
- 编译过程不同
Independent to Different System: (依赖于具有泛用性的Byte Code)
-- 也叫Portable-
Object Oriented (Later)
- 表现形式
Java Class
Java Object
Java Method 另外, Java的一大特点是, 不用考虑内存的分配和创建问题, 全部由系统默认自动完成,因此不存在Segmentation Fault
3. 第一个Java Project: HelloWorld.java
// HelloWorld.java: Display "Hello World" on the screen
import java.lang.* ;
public class HelloWorld{
public static void main(String args[]){
System.out.println("HelloWorld!");
}
}
-
Command Line Compile and Run
- 使用terminal 或 cmd:
- javac -version, java -version
- javac HelloWorld.java ==> 得到一个同名的.class文件
- java HelloWorld ==> 得到Excute Result
-
结构:
-
Comment
- Multi-line Comment: /* 文本一\n 文本二\n */
- Single-line Comment: // 文本
- JavaDoc Comment: /** 文本一\n 文本二\n */
- Java doc 具有固定格式, 具有可以让IDE自动读取并识别的功能,是写代码必不可少的工具, 多应用于签名
-
标题引用(Library): import java.lang.* ;
- 功能与C语言中的: #include <stdio.h> 相近, 都是调取package中的特定library
- 但是操作上还是有区别的: Java不需要调取同一package中的其他java文件, 这里的引用多用于编好的library
- ".*"表示全部文件
-
Class Definintion
- Define 一个 Class
- 在Java中, 所有的programme 文件都是以class的角色编写和应用的
- 需要注意的是: Class Name = 文件名 - 即 class HelloWorld = HelloWorld.java
-
Constructor
- 每一个class都可以拥有一个或多个constructor, 用于class的初始化和构建
- constructor 中可以创建新的variable
- 可以初始化已有的variable
- 可以给创建好的variable赋值
- 当然也可以调用建好的method
-
Method Definition
- Define一个新的可运行的Method
- 基本格式: public(标签) + abstract(是否省略) + static(状态) + return type(输出类型) + Method Name + (arguments){}
- 特殊Method: Main ==> 这是programme独立运行的基础, 不然连调试都做不到.
- Method的功能是functionality: 与C语言的function相照应, 但是功能上有一定的区别, Method是针对于class进行的开发, 这与function具有一定的区别
- Command Line Argument(main method): (String args[])
- 这是一个String的array, 以空格作为分隔符, 从控制台读取String 储存进args 这个variable, 接下来以供使用
-
4. Identifier(标识符) Data Type(数据类型) Variable(变量) 和 Constant(常量)
- Identifiers: 标识符是一个程序中赋予其元素的名字: 也叫Object Name
- 每一个Object都由 Identifier 和 location 构成
- 起名原则:
- 不以数字开头
- 名字只包含数字, 字母 和 下划线
- Java的Identifier长度是不受限制的, 也就是说为了解释清楚, 多长的名字都可以接受
- (大小写区别): Rate 和 RATE 以及 rate 是三个不同的名字
- Identifier Conventions: 共识
- 驼峰命名法: topSpeed bankRate timeOfArrival
- 命名原则: 不可以等于敏感字(关键字): this new 等等
- Predefined Identifiers:
- 系统生成好的名字, 也就是关键字, 放在Java standard Package中
- 如: String System Math println 等等
5. Data Type:
[图片上传失败...(image-6cc86d-1601962605920)]
[图片上传失败...(image-a421b4-1601962605920)]
- 浮点型详解:
- float: 单精度浮点型
- 范围: -3.4^38 - +3.4^38
- 能表示7位以下小数
- 代码: float a = 2.3F
- double: 双精度浮点型 (泛用)
- 范围: -1.79^308 - +1.79^308
- 能表示16位以下小数
- 代码: double b = 6.7
6. Variables 变量
- 变量: 能够追溯到储存在程序内存的信息的元素: 可以改变 (mutable)
- 变量分为两部分: memory location 和 identifier
- 使用规则:
- 变量必须优先宣布并初始化(Declare and Initialize)
- Declaration: String c;
- Initialization: c = "HelloWorld";
- Data Type Chain Rule:
- byte->short->int->long->float->double
- char->int
- Chain Rule 使用了Type Casting 的原理(Later)
- Assignemnt operator: "="
- Java Variable Classification:
- Instance variable: Later
- static(or class) variable: Later
- local vatiable: Defined inside a Java Method
- 变量必须优先宣布并初始化(Declare and Initialize)
7. Constant 常量
- 常量: 一个不会随着programme excution变化, 而产生变化的值.
- 也叫作: READ Only values
- 使用规则:
- Declaration: final int MAX_LENGTH = 4;
- Identifier: 必须为大写字母, 而且使用下划线分割法
- 必须注明Constant 的Data Type (这在C语言中是不必要的)
- Code Example:
// ConstantsVariablesExample.java
// Demonstrates the use of constants and variables
public class ConstantsVariablesExample {
public static void main(String args[]) {
final double PI = 3.1428; // Constant inside a method
// All the variables below are local variables
float radius = 5.5F;
double area;
boolean x = true;
area = PI * radius * radius;
System.out.println("Circle Radius = "
+ radius + " Area = " + area);
System.out.println("Boolean Value = " + x);
}
}
Programme Output
Circle Radius = 5.5 Area = 95.0697
Boolean Value = true
8. Operators: 运算符
- Java 运算符分类明细:
- Arithmetic: 算数运算符
- + Addition
- - Subtraction
- * Multiplication
- / Division
- % Modification
- 算数运算符的输出结果由算数的type决定
- Relational: 关系运算符
- < 小于
- <= 小于等于
- > 大于
- >= 大于等于
- == 等于
- != 不等于
- 关系运算符输出结果是 Boolean
- Logical: 逻辑运算符
- && and
- || or
- ! not
- Assignment: 赋值运算符
- = Assignment
- Increment and Decrement: 增减运算符
- ++
- --
- Conditional: 条件运算符
- ? If Condition
- : Then and else
- x = (a > b) ? a : b
- if(a > b) x = a;
- else x = b;
- Bitwise: 算位运算符
- & AND
- | OR
- ^ exclusive OR
- ~ One's compliment
- << Shift Left
- >> Shift Right
- >>> Shift Right with zero fill
- Special: 特殊运算符
9. Package Functions: Math
- Java can read functions from constructed packages such as Math class, defined in the
Java.lang.Math Documentation - Package 中包含了两个数学常数 e natural base logarithms 和 PI 圆周率
- Package 中还有很多数学常用的运算公式
- static double abs(double a): Returns the absolute value of a double value.还有float, int, long版本(overload)
- static double acos(double a): Returns the arc cosine of a value;
-- the returned angle is in the range 0.0 through pi. 还有 asin, atan. - 等等
10. Flow of Control 控制流
- Definition: Java的控制流由两部分构成 looping 和 Branching
Looping
- 大多数循环条件都是由 Boolean 表达式控制的原因
boolean 表达式的结果只有true 和false 两种
boolean 是 primitive data type(原始天尊) - 结构:
- Body: The repeated part of the loop is called the body of the loop
- Iteration: Body的每一次重复都被称为 iteration of the loop
- Loops can be nested
Java Looping Statement
- while statement: 不多做介绍
- for statement: 不多做介绍
- do-while statement:
- while statement 优先做一次判断, 所以有可能不进入循环就出去了
- do-while statement 优先做一次循环, 再进行判断, 因此必定会进行一次循环
Break Statement
- Break statement causes to exit the loop(while, do or for)
- Example:
// BreakExample.java - Demonstrates the use of the break statement
public class BreakExample {
public static void main(String[] args) {
loop1: for (int i = 0; i < 3; i++) {
// loop label 1
loop2: for (int j = 0; j < 3; j++) {
// loop label 2
System.out.println("i=" + i + " j=" +j);
if (j == 1)
break loop1; // break specified loop 1
}
}
}
}
- Programme Output:
i = 0 j = 0
i = 0 j = 0
Continue Statement
Continue statement skips the rest of the statements in the loop(while, do or for)
-
Example:
// ContinueExample.java - Demonstrates the use of the continue statement public class ContinueExample { public static void main(String[] args) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (j == 1) continue; System.out.println("i=" + i + " j=" +j); } } } }
Programme Output:
i = 0 j = 0
i = 0 j = 2
i = 1 j = 0
i = 1 j = 2
i = 2 j = 0
i = 2 j = 2
Branching (Condition Control)
Java Branching Statement
- if-else statement
- if-else statement (multi-way version)
-- 也叫 else-if statement
- Example:
//IfElseExample.java - Demonstrates if-else control flow
public class IfElseExample {
public static void main(String args[]){
int i = 5;
if (i < 10) {
System.out.println("i is less than 10");
}
else {
System.out.println("i is greater than or equal to 10");
}
}
}
- Programme Output:
i is less than 10
- switch statement
- 模板
switch(Controlling_Expression)
{
case Case_label_1:
Statement_Sequence_1;
break;
case Case_label_2:
Statement_Sequence_2;
break;
case Case_label_3:
Statement_Sequence_3;
break;
}
- Example
//SwitchExample.java - Demonstrates the switch statement
public class SwitchExample {
public static void main (String args[]) {
char x = 'b';
switch(x) {
case 'a': // 如果x = 'a'
System.out.println("Chracter = a");
break;
case 'b': // 如果x = 'b'
System.out.println("Character = b");
break;
default: //default 表达的是: 如果x不等于以上,将以默认的方式处理
System.out.println("Other character");
break;
}
}
}
- Programme Output:
Character = 'b'
- 注意:
- switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
- switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
- case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
- 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
- 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句(直接执行, 没有判断),直到出现 break 语句。
- switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
- Two-way Decision Statement
- Example:
```java
// TwoWayExample.java - Demonstrates two way decision making
class TwoWayExample {
public static void main(String args[]) {
int i = 5;
int flag;
flag = (i < 10) ? 0 : 1;
System.out.println("Flag = " + flag);
}
}
```
- Programme Output
```
Flag = 0
```
Lecture Question & Answer
1. Which of the following basic concepts is the main differentiator of the object oriented software design paradigm?
- selection
- output
- iteration
- calculaion
- none of the above
Answer:
- 该问题 主题为 basic concepts of OOSD paradigm(范式), 定语为main differentiator(意思大概是主要部分吧)
- 所以答案应该是OOSD的主题的选项
- Selection 是一种algorithm, 强调的是挑选方法中最简便的一种
- Output 是结果, 强调的是 software design 的结果
- Iteration 是一种运算方法, 强调的是不断进行类似的步骤来达到目的
- Calculation 是强调运算, 以此为特点的最著名的是 matlab
- None of above
- OOSD的主题应该是一种以操作对象为主题, 围绕主题进行代码设计的理念.
- 所以我的答案是 None of above
- 理由: OOSD的主要理念为 - Abstraction: the way self-contained, reusable units are generated. In object oriented programming this is done through creating classes which have attributes and methods(Later details)
2. Describe the difference between the terms class and objects
Answer:
- class 是一种代码的概念, 是以对象的类为参考建立的代码模拟, 模拟对象的形态, 模拟对象的functionality
- object 是对class的具现物, 对class模拟的类的属性进行具体化, 特殊化, 以满足模拟一个个体的目的, 也是代码概念, 并非真实存在
参考答案:
- Class:
* A definition or for the and properties shared by a of objects.
* For , a StuffedAnimal defines what it means to be a stuffed animal(colour size weight)
- Object:
* A set of that .
* For , a teddyBear may be a StuffedAnimal that is large, brawn and light. Objects are sometimes also calledinstances, as they are a perticular instance of a class.
3. A variable whose value is associated with an object of a class is called
- an instance variable
- a local variable
- a global variable
- a class variable
- none of above
Answer:
- 问题的主题是 variable, 特点为 whose value is associated an object of a class
- 问题在问一种可以与Object合作的variable
* instance variable 是已经生成Object的class variable, 当然与Object是合作关系
* local variable 是class 中在method内部创建的variable
* global variable 是
* class variable是未创建Object的情况下创建在class中的variable
- 我的答案是 an instance variable
- 解析:
* local variable - within a method
* instance variable - within a class, but the value is specific to the object(instance);
4. The body of a method that returns a value must contain at least one _____ statement
- void
- invocation
- throws
- return
- public
Answer:
- 问题主题是 statement, 定语如下: cotained by a method that returns a value, at least one
- 我的答案: return
5. What is the output of the following program?
public class DemoNoObject(int inpput){
public static void increment(int input){
input = input + 1;
}
public static void main(String[] args){
int a = 45;
increment(a);
System.out.println("a = " + a);
}
}
Answer:
- a = 46
- 错误原因: 上面increment的method没有将改过的值返回到main中, 所以a的值不变