一:方法的定义和方法的调用
方法的定义:修饰符 方法的返回值 方法名(参数列表){
方法体
}
如果没有方法的返回值就写成:void
参数列表:参数类型 参数名
方法的调用:方法名(参数值)

第二天:
目标: 1. 标识符、关键字和类型介绍;
2. 如何构建类?
------------------------------------------------------------
第二章: Identifiers, Keywords and Types
目标:1. 注释作用:使部分内容只为程序员可见,
不为编译器所编译、虚拟机所执行;增加程序的可读性
位置:类声明前后、方法声明前后、属性声明前后、方法体中。
几乎可以在一个源文件任意位置,但不能在一个关键字字
符中插入注释。
类型:1) 单行注释://text——从"//"到本行结束的所有字符均作为注释而被编译器忽略
2) 多行注释:/*text*/——从"/*"到"*/"间的所有字符会被编译器忽略
3) 文档注释:/** text */——从"/**"到"*/"间的所有字符会被编译器忽略。
当这类注释出现在任何声明(如类的声明、类的成员变量的声明或者类的
成员方法的声明)之前时,会作为JavaDoc文档的内容;
示例:1) //package declaration
package ch01; //允许;
2) package /*package declaration*/ch01; //允许;
3) class /*class declaration*/ FirstJavaProgram { //允许;
...}
4) System.out./*out content to console*/println("Hello Java"); //允许;
5) System.out.print/*out content to console*/ln("Hello Java"); //不允许;

javadoc -d doc -author -version *.java

2. 分号、块和空格
1) 每个语句短语以;结束 ;
2) 代码段以{}结束;
3) 空白处(空格、tab键、新行和回车(几个语句短语连接在一起))是无关紧要的。

3. 标识符:类、方法和变量的名字
1) java标识符以字母、_和$开头,不能以数字开头,后跟字母、数字、“_”和“$”的组合;
2) 大小写敏感
3) 没有长度限制。
4) 不能使用java的关键字
举例: 合法标识符 非法标识符
try try#
GROUP_7 7GROUP
openDoor open-door
boolean1 boolean
4. 关键字
Java语言的关键字是程序代码中的特殊字符。包括:
. 类和接口的声明——class, extends, implements, interface
. 包引入和包声明——import, package
. 数据类型——boolean, byte, char, double, float, int, long, short
. 某些数据类型的可选值——false, true, null
. 流程控制——break, case, continue, default, do, else, for, if, return, switch, while
. 异常处理——catch, finally, throw, throws, try
. 修饰符——abstract, final, native, private, protected, public, static, synchronized, transient, volatile
. 操作符——instanceof
. 创建对象——new
. 引用——this, super
. 方法返回类型——void
Java语言的保留字是指预留的关键字,它们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关键字。
. 所有关键字都是小写;
. friendly, sizeof不是Java语言的关键字,这有别于C++;
. 程序中标识符不能以关键字命名;

5. 基本类型:程序的基本功能是处理数据,程序用变量来表示数据;
程序中必须先定义变量才能使用;
定义变量是指设定变量的数据类型和变量的名字,
定义变量的基本语法为:
数据类型 变量名;

Java语言把数据类型分为基本类型和引用类型。
基本数据类型
数值类型
整数类型:byte,short,int,long
浮点数类型:float,double
布尔类型:boolean
字符类型:char
引用数据类型
类类型:比如String
接口类型
数组类型

接下来,我们主要关注基本数据类型,关注各种基本数据类型
有什么样的取值范围?占用多少内存空间?

6. boolean类型

位置 boolean类型变量取值
------------------------------------------------------------
Java源程序 只能是true或false
class文件 用int或byte表示boolean
虚拟机中 用整数0来表示false, 有任意一个非零整数表示true

强调,在Java源程序中不允许把整数或null赋给boolean类型的变量,
这是有别于其它语言(如c语言)的地方. 例:

boolean isMarried = 0; //编译出错,提示类型不匹配
boolean isMarried = null; //编译出错,提示类型不匹配

7. 文本数据类型——char和String

1) 字符编码:Java语言对文本字符
采用Unicode字符编码。
由于计算机内存只能存取二进制数据,
因此必须为各个字符进行编码。
所谓字符编码,是指用一串二进制数据来表示特定的字符。
常见的字符编码包括:
a. ASCII字符编码
ASCII--
Amecian Standard Code for Information Interchange(
美国信息交换标准代码).
主用于表达现代英语
和其他西欧语言中的字符。
它是现今最通用的单字节编码系统,
它只用一个字节的7位,
一共表示128个字符。

b. ISO-8859-1字符编码,又称为Latin-1, 是国际标准化组织(ISO)为西欧语言中的字符制定的编码,
用一个字节(8位)来为字符编码,与ASCII字符编码兼容。所谓兼容,是指对于相同的字符,它的ASCII字符编码
和ISO-8859-1字符编码相同。

c. GB2312字符编码
它包括对简体中文字符的编码,
一共收录了7445个字符(6763个汉字+682个其他字符. 它与ASCII字符编码兼容。

d. GBK字符编码
对GB2312字符编码的扩展,
收录了21886个字符(21003个字符+其它字符), 它与GB2312字符编码兼容。

e. Unicode字符编码:
由国际Unicode协会编制,
收录了全世界所有语言文字中的字符,是一种跨平台的字符编码。
UCS(Universal Character Set)是指采用Unicode字符编码的通用字符集。
Unicode具有两种编码方案:
. 用2个字节(16位)编码,被称为UCS-2, Java语言采用;
. 用4个字节(32位)编码,被称为UCS-4;

f. UTF字符编码
有些操作系统不完全支持16位或32位的Unicode字符编码,UTF(UCS Transformation Format)字符编码能够把
Unicode字符编码转换为操作系统支持的编码,常见的UTF字符编码包括UTF-8, UTF-7和UTF-16.

2) char的几种可能取值
Java语言采用UCS-2字符编码,字符占2个字节。
字符a的二进制数据形式为 0000 0000 0110 0001
十六进制数据形式为 0x0061
十进制数据形式为 97

以下4种赋值方式是等价的:

char c = 'a';
char c = '\u0061'; //设定"a"的十六进制数据的Unicode字符编码
char c = 0x0061; //设定"a"的十六进制数据的Unicode字符编码
char c = 97; //设定"a"的十进制数据的Unicode字符编码

3) 转义字符

Java编程人员在给字符变量赋值时,通常直接从键盘输入特定的字符,
而不会使用Unicode字符编码,因为很难记住各种字符的Unicode
字符编码值。对于有些特殊字符,比如单引号,如不知道它的
Unicode字符编码,直接从键盘输入编译错误:
char c = '''; //编码出错

为了解决这个问题,可采用转义字符来表示单引号和其他特殊字符:

char c = '\'';
char c = '\\';

转义字符以反斜杠开头,常用转义字符:

\n 换行符,将光标定位到下一行的开头;
\t 垂直制表符,将光标移到下一个制表符的位置;
\r 回车,将光标定位到当前行的开头,不会移到下一行;
\\ 反斜杠字符
\' 单引号字符

8. 整数类型
byte, short, int和long都是整数类型,并且都是有符号整数。
与有符号整数对应的是无符号整数,两者的区别在于
把二进制数转换为十进制整数的方式不一样。
. 有符号整数把二进制数的首位作为符号数,
当首位是0时,对应十进制的正整数,
当首位是1时,对应十进制的负整数。
对于一个字节的二进制数, 它对应的十进制数的取值范围是-128 - 127。
. 无符号整数把二进制数的所有位转换为正整数。
对于一个字节的二进制数, 它对应的十进制数的取值范围是0 - 255。

在Java语言中,为了区分不同进制的数据,八进制数以“0”开头,十六制以“0x”开头。举例:

一个字节的二进制数 八进制数 十六进制数 有符号十进制数 无符号十进制数
-------------------------------------------------------------------------------------------------
0000 0000 0000 0x00 0 0
1111 1111 0377 0xFF -1 255
0111 1111 0177 0x7F 127 127
1000 0000 0200 0x80 -128 128

如果一个整数值在某种整数类型的取值范围内,就可以把它直接赋给这种类型的变量,否则必须进行强制类型的转换。

byte = 13;

如129不在byte类型的取值范围(-128-127)范围内,则必须进行强制类型的转换。

byte b = (byte)129; //变量b的取值为-127.

如果一个整数后面加上后缀——大写"L"或小写"l", 就表示它是一个long类型整数。以下两种赋值是等价的:

long var = 100L; //整数100后面加上大写的后缀"L",表示long型整数;
long var = 100l; //整数100后面加上大写的后缀"l",表示long型整数;

Java语言允许把八进制数(以"0"开头), 十六进制数(以"0x"开头)和十进制数赋给整数类型变量,例如:

int a1 = 012; //012为八进制数,变量a1的十进制取值为10
int a2 = 0x12; //0x12为十六进制数,变量a2的十进制取值为18
int a3 = 12; //12为十进制数,变量a3的十进制取值为12

int a4 = 0xF1; //0xF1为十六制数,变量a4的十进制取值为241
byte b = (byte)0xF1 //0xF1为十六制数,变量b的十进制取值为-15
注意:
数据类型的转换:
1)强制类型转换:精度高向精度低的转换
byte b = (byte)129;
2)隐式类型转换:精度低向精度高的转换
byte<short<int<long<float<double

9. 浮点类型

浮点类型表示有小数部分的数字。Java中有两种浮点类型:

. float: 占4个字节,共32位,称为单精度浮点数;
. double: 占8个字节,共64位,称为双精度浮点数;

float和double类型都遵循IEEE754标准,该标准分别为32位和64位浮点数规定了二进制数据表示形式。

float=1(数字符号)+8(指数,底数为2)+23(尾数)
double=1(数字符号)+11(指数,底数为2)+52(尾数)

在默认情况下,小数及采用十进制科学计数法表示的数字都是double类型,
可以把它直接赋值给double类型变量。

double d1 = 1000.1;
double d2 = 1.0001E+3; //采用十进制科学计数法表示的数字,d2实际取值为1000.1
double d3 = 0.0011;
double d4 = 0.11E-2; //采用十进制科学计数法表示的数字,d4实际取值为0.0011

如果把double类型的数据直接赋给float类型变量,有可能会造成精度的丢失,因此必须进行强制类型的转换,否
则会导致编译错误,例如:

float f1 = 1.0 //编译错误,必须进行强制类型转换;
float f2 = 1; //合法,把整数1赋值给f2,f2的取值1.0;
float f3 = (float)1.0; //合法,f3的取值为1.0;
float f4 = (float)1.5E+55; //合法, 1.5E+55超出了float类型的取值范围,
f4的取值为正无穷大
System.out.println(f3); //打印1.0;
System.out.println(f4); //打印Infinity

----------------------------------------------------------------------------------------------------
Float.NaN 非数字
Float.POSITIVE_INFINITY 无穷大
Float.NEGATIVE_INFINITY 负无穷大

float f1 = (float)(0.0/0.0); //f1的取值为Float.NaN
float f2 = (float)(1.0/0.0); //f2的取值为Float.POSITIVE_INFINITY
float f3 = (float)(-1.0/0.0); //f3的取值为Float.NEGATIVE_INFINITY
System.out.println(f1); //打印NaN;
System.out.println(f2); //打印Infinity
System.out.println(f3); //打印-Infinity

Java语言之所以提供以上特殊数字, 是为了提高Java程序的健壮性,并且简化编程。当数字运算出错时,可以用浮
点数取值范围内的特殊数字来表示所产生的结果。否则,如果Java程序在进行数学运算遇到错误时就抛出异常,会影
响程序的健壮性,而且程序中必须提供捕获数学运算异常的代码块,增加了编程工作量。

10. 变量的申明和赋值

程序的基本功能是处理数据
程序用变量来表示数据;
程序中必须先定义变量才能使用;
定义变量是指设定变量的数据类型和变量的名字,定义变量的基本语法为:

数据类型 变量名;

Java语言要求变量遵循先定义,再初始化,然后使用的规则。变量的初始化是指自从变量定义以后,首次给它赋初始
值的过程。例:

int a; //定义变量a
a = 1; //初始化变量a
a++; //使用变量a
int b=a; //定义变量b, 初始化变量b, 使用变量a;
b++; //使用变量b

11. 推荐命名规则

1) 类名以大写字母开头;
2) 接口名以大写字母开头;
3) 方法名以小写字母开头;
4) 变量名以小写字母开头;
5) 常量名全部大写,多个单词以"_"连接;

12. 理解对象
明白什么是面向对象编程
面向对象的开发方法把软件系统看成各种对象的集合,
对象就是最小的子系统,一组相关的对象能够组合成更复杂的
子系统。面向对象的开发方法将软件系统看成各种对象的集合,
接近人的自然思维方式。

对象是对问题领域中事件的抽象。对象具有以下特性:

1) 万物皆为对象。问题领域中的实体和概念都可以抽象为对象。
例如学生,成绩单、教师、课和教室。
2) 每个对象都是惟一的。正如世界上不存在一模一样的叶子。
3) 对象具有属性和行为。
例如小张,性别女,年龄22,身高1.6m, 体重40kg, 能够学习,唱歌。
小张的属性包括姓名、性别、年龄、身高和体重,行为包括学习、唱歌。
例如一部手机,牌子是诺基亚、价格是2000元,银白色,能够拍照、打电话和收发短信等。这部手机的属性包括
品牌类型type、价格price和颜色color,行为包括拍照takePhoto(),打电话call(),收发
短信receiveMessage()和发短信sendMessage().
4) 对象具有状态。状态是指某个瞬间对象的各个属性的取值。
对象的某些行为会改变对象自身的状态,即属性的取值。
例如小张本来体重为40kg,经为减肥后,体重减到45kg.

肥胖状态: 40kg
|
| 减肥行为
|
肥胖状态: 35kg

5) 每个对象都是某个类的实例。小张和小王都属于学生类、
中国和美国都属于国家类、中文和英文都属于语言类。
类是具有相同属性和行为的对象的集合。

同一个类的所有实例都有相同属性,但属性取值不一事实上相同,
但是它们的状态不一定相同。例如小张和小王都属
于学生类,都有姓名、性别、年龄、身高和体重这些属性,
但是他们的属性取值不同。

同一个类的所有实例都有相同行为,意味着它们具有一些相同的功能。

13. 创建类

类是一组具有相同属性和行为对象的模板。
面向对象编程的主要任务就是定义对象模型中的各个类。

package sample;

public class Teacher {

/**attributes of a teacher*/
private String name;
private int age;
private double salary;

/** Creates a new instance of Teacher */
public Teacher(String name, int age, double salary) {
this.salary = salary;
this.age = age;
this.name = name;
}
/**operations on properties */
/** get the name of this teacher */
public String getName() { return name; }
/**get the salary of this teacher */
public double getSalary() { return salary; }
/**get the age of teacher teacher */
public int getAge() { return age; }
……
}

代码解析:

1) package sample;
包声明语句,将Java类放到特定的包中,便于类的组织、权限访问和区分名字相同的类。
2) public class Teacher {...}
类的声明语句,类名为Teacher,
public修饰符意味着这个类可以被公开访问;

声明类的格式:

class 类名 {
类内容
}

3) private String name;
类的属性(也称为成员变量)的声明语句;
Teacher类有一个name属性,字符串类型,
private修饰符意味着这个属性不能被公开访问。
4) public String getName() { return name; }
方法的声明语句和方法体
方法名为getName,不带参数,
String表明返回类型为String。
public表明这个方法可以被公开访问。
getName后紧跟的大括号为方法体,代表getName的具体实现。

声明方法的格式:

返回值类型 方法名 (参数列表) {
方法体
}

返回值类型是方法的返回数据的类型, 如果返回值类型为void, 表示没有返回值。
方法名是任意合法的标识符;
参数列表可包含零个或多个参数,参数之间以逗号","分开。
方法体每个语句用";"结束;
方法体中使用return语句返回数据或结束本方法的执行;

注:不介绍构造方法。在面向对象章节会提到。

14. 创建实例

public static void main(String[] args) {
Teacher gzhu = new Teacher("George Zhu", 30, 10000);
System.out.println("Teacher: " + gzhu.getName());
System.out.println("\tAge: " + gzhu.getAge());
System.out.println("\tSalary: " + gzhu.getSalary());
}

main()方法是Java应用程序的入口点,
每个Java应用程序都是从main()方法开始运行的。
作为程序入口的main()方法必须同时符合以下几个条件:
. 用public static修饰;
. 返回类型为void;
. 方法名为main;
. 参数类型为String[];
包含main方法的类又叫主程序类。

类创建好之后,通过new关键字创建具体对象。它有以下作用:
. 为对象分配内存空间,将对象的实例变量自动初始化为其变量类型的默认值;
. 如实例变量显示初始化,将初始化值赋给实例变量;
. 调用构造方法;
. 返回对象的引用;

注:结合实例,并画内存分配图讲解。

15. 基本类型和引用类型的区别

1) 基本类型代表简单的数据类型,比如整数和字符。
引用类型代表复杂数据类型,引用类型所引用的
实例包括操纵这种数据类型的行为。

通过"."运算符,就能访问引用变量所引用的实例的方法.
2) 基本类型Java虚拟机会为其分配数据类型实际占用的内存空间;
引用类型仅是一个指向堆区中某个实例的指针。

例:public class Counter {
int count = 13;
}

Counter counter = new Counter();

counter引用变量-------------> Counter实例
count变量(占4个字节,值为13)

counter引用变量的取值为Counter实例的内存地址。
counter引用变量本身也占一定的内存空间,
到底占用多少内存空间取决于Java虚拟机的实现,这对Java程序是透明的。

注:counter引用变量到底位于Java虚拟机的运行时数据区的哪个区?
取决于counter变量的作用域,
如果是局部变量,则位于Java栈区;
如果是静态成员变量,则位于方法区;
如果是实例成员变量,则位于堆区;

面向对象编程的步骤:
1)从需求中寻找名词性短语,构建class,有相应的属性和行为
2)产生对象
3)访问属性,方法(.)

一.基本数据类型变量和引用数据类型变量:
1)使用基本数据类型定义的变量叫做基本数据类型变量
int a=10;
保存是数据本身的数值(二进制)
2)使用引用数据类型定义的变量叫做引用数据类型变量
Teacher t=new Teacher();
保存是堆区开辟的地址
new关键字:
a)在栈区开辟空间保存对象的引用
b)在堆区开辟空间保存对象本身
c)堆区的地址赋值给栈区的对象的引用
二:运行时数据区
一个完整的Java程序运行过程会涉及以下内存区域
方法区/代码区:存放类的信息
堆区:用来存放动态产生的数据,比如new出来的对象。
注意创建出来的对象只包含属于各自的成员变量,
并不包括成员方法。因为同一个类的对象拥有各自
的成员变量,存储在各自的堆中,但是他们共享该
类的方法,并不是每创建一个对象就把成员方法复制一次。
栈区:保存局部变量的值,包括:
1.用来保存基本数据类型的值;
2.保存类的实例,即堆区对象的引用(指针)。
也可以用来保存加载方法时的帧
常量池:JVM为每个已加载的类型维护一个常量池,
常量池就是这个类型用到的常量的一个有序集合。
常量池存在于堆中。
PC寄存器:指向下一条需要执行的指令,将该数据传递给CPU

第二章: Identifiers, Keywords and Types的更多相关文章

  1. C# Language Specification 5.0 (翻译)第二章 词法结构

    程序 C# 程序(program)由至少一个源文件(source files)组成,其正式称谓为编译单元(compilation units)[1].每个源文件都是有序的 Unicode 字符序列.源 ...

  2. 编写高质量代码:改善Java程序的151个建议(第二章:基本类型)

    编写高质量代码:改善Java程序的151个建议(第二章:基本类型) 目录 建议21:用偶判断,不用奇判断 建议22:用整数类型处理货币 建议23:不要让类型默默转换 建议24:边界还是边界 建议25: ...

  3. S2_SQL_第二章

    第二章:初始mySql 2.1:mySql简介 2.1.2:mysql的优势 运行速度块,体积小,命令执行的块 使用成本低,开源的 容易使用 可移植性强 2.2:mysql的配置 2.2.1:端口配置 ...

  4. Android开发艺术探索——第二章:IPC机制(中)

    Android开发艺术探索--第二章:IPC机制(中) 好的,我们继续来了解IPC机制,在上篇我们可能就是把理论的知识写完了,然后现在基本上是可以实战了. 一.Android中的IPC方式 本节我们开 ...

  5. Android开发艺术探索——第二章:IPC机制(上)

    Android开发艺术探索--第二章:IPC机制(上) 本章主要讲解Android的IPC机制,首先介绍Android中的多进程概念以及多进程开发模式中常见的注意事项,接着介绍Android中的序列化 ...

  6. 《DOM Scripting》学习笔记-——第二章 js语法

    <Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...

  7. 【黑金原创教程】【TimeQuest】【第二章】TimeQuest模型角色,网表概念,时序报告

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  8. 第二章 设计高质量的React组件

    第二章 设计高质量的React组件 高质量React组件的原则和方法: 划分组件边界的原则: React组件的数据种类: React组件的生命周期. 2.1 易于维护组件的设计要素 1.高内聚:指的是 ...

  9. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

随机推荐

  1. WPF 3D编程介绍

    原文:WPF 3D编程介绍 上一篇文章简单的介绍了WPF编程的相关的内容,也推荐了本书.今天要来讲一下在WPF如何开展3D编程. 使用的xmal 和C#开发的时候:需要使用如下的关键要素: 1:摄像机 ...

  2. MAT 专题

    http://smallnetvisitor.iteye.com/blog/1826434 运行user任务管理器查看到的pid号:

  3. HDU 4279 Number(2012天津网络游戏---数论分析题)

    转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:pid=4279">http://acm.hdu.edu ...

  4. Qt Installer Framework 3.0.1 Released(功能比较强)

    We are happy to announce the release of Qt IFW 3.0.1. 3.0.1 is fully compatible with 2.0.5, which me ...

  5. WebService它Soap头验证进入

    1.创建一个新的类.如"AuthHeaderUser",在传承"System.Web.Services.Protocols.SoapHeader"类别 2.新W ...

  6. Asp UserInfoList 方法二

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserInfoList.a ...

  7. MinDoc v0.6 发布,轻量级文档在线管理系统

    更新日志 新增 标签功能,可以根据标签组织项目 新增 用户删除功能,删除后的用户项目以及其他数据会自动转移到超级管理员账户上 新增 项目描述支持Markdown语法 优化 项目标签添加效果 优化 登录 ...

  8. 谷歌将为 Mac 和 Windows 用户推出新的备份和同步应用

    据报道,谷歌将于 6 月 28 日面向 Mac 和 Windows 用户发布一款新的备份和同步应用(Backup and Sync app). Google 刚刚宣布将推出其备份和同步应用程序,该工具 ...

  9. Kinect 开发驱动配置

    有几种配置方案 1.openNI+SensorKinect+PCL 的开发环境(pcl 标配) http://blog.csdn.net/chenxin_130/article/details/669 ...

  10. 利用Delphi实现网络监控系统

    实现的原理WINSOCK是一组API,用于在INTE.Net上传输数据和交换信息.用它编程本来是很麻烦的,但在DELPHHI中并不需要直接与WINSOCK的API打交道,因为TclientSocket ...