变量和常量
变量:变量代表程序的状态。程序通过改变变量的值来改变整个程序的状态,或者说得更大一些,也就是实现程序的功能逻辑。
为了方便的引用变量的值,在程序中需要为变量设定一个名称,这就是变量名。例如在2D游戏程序中,需要代表人物的位置,则需要2个变量,一个是x坐标,一个是y坐标,在程序运行过程中,这两个变量的值会发生改变。
由于Java语言是一种强类型的语言,所以变量在使用以前必须首先声明,在程序中声明变量的语法格式如下:
数据类型 变量名称;
例如:int x;
在该语法格式中,数据类型可以是Java语言中任意的类型,包括前面介绍到的基本数据类型以及后续将要介绍的复合数据类型。变量名称是该变量的标识符,需要符合标识符的命名规则,在实际使用中,该名称一般和变量的用途对应,这样便于程序的阅读。数据类型和变量名称之间使用空格进行间隔,空格的个数不限,但是至少需要1个。语句使用“;”作为结束。
也可以在声明变量的同时,设定该变量的值,语法格式如下:
数据类型 变量名称 = 值;
例如:int x = 10;
在该语法格式中,前面的语法和上面介绍的内容一致,后续的“=”代表赋值,其中的“值”代表具体的数据,注意区别“==”代表为判断是否相等。在该语法格式中,要求值的类型需要和声明变量的数据类型一致。
在程序中,变量的值代表程序的状态,在程序中可以通过变量名称来引用变量中存储的值,也可以为变量重新赋值。例如:
int n = 5;
n = 10;
在实际开发过程中,需要声明什么类型的变量,需要声明多少个变量,需要为变量赋什么数值,都根据程序逻辑决定,这里列举的只是表达的格式而已。
常量
常量代表程序运行过程中不能改变的值。
常量在程序运行过程中主要有2个作用:
1. 代表常数,便于程序的修改(例如:圆周率的值)
2. 增强程序的可读性(例如:常量UP、DOWN、LEFT和RIGHT分辨代表上下左右,其数值分别是1、2、3和4)
常量的语法格式和变量类型,只需要在变量的语法格式前面添加关键字final即可。在Java编码规范中,要求常量名必须大写。
则常量的语法格式如下:
final 数据类型 常量名称 = 值;
final 数据类型 常量名称1 = 值1, 常量名称2 = 值2,……常量名称n = 值n;
例如:
final double PI = 3.14;
final char MALE=‘M’,FEMALE=‘F’;
在Java语法中,常量也可以首先声明,然后再进行赋值,但是只能赋值一次,示例代码如下:
final int UP;
UP = 1;
运算符和表达式
算术运算符:1.加减运算符: +,-
加减运算符是二目运算符;加减运算符的结合方向是从左到右;加减运算符的操作元是整型或浮点型数据,加减运算符的优先级是4级。
2.乘、除和求余运算符: *,/,%
以上运算符是二目运算符,结合方向是从左到右,乘、除和求余运算符的操作元是整型或浮点型数据。运算符的优先级是3级。
3.算术表达式
用算术符号和括号连接起来的符合java语法规则的式子,称为算术表达式。
4.自增自减运算符:++,--
是单目运算符,可以放在操作元之前,也可以放在操作元之后。操作元必须是一个整型或浮点型变量。作用是使变量的值增1或减1,如:
++x(--x)表示在使用x之前,先使x的值增(减)1。
x++(x--)表示在使用x之后,使x的值增(减)1。
运算精度:精度从“低”到“高”排列的顺序是:
byte short char int long float double
Java在计算算术表达式的值时,使用下列计算精度规则:
1.如果表达式中有双精度浮点数(double型数据),则按双精度进行运算。
2.如果表达式中最高精度是单精度浮点数(float型数据),则按单精度进行运算。
3.如果表达式中最高精度是long型整数,则按long精度进行运算。
4.如果表达式中最高精度低于int型整数,则按int精度进行运算
关系运算符:关系运算符是二目运算符,用来比较两个值的关系。关系运算符的运算结果是boolean型,当运算符对应的关系成立时,运算结果是true,否则是false。
逻辑运算符:逻辑运算符包括:&&,||,!
其中&&、||为二目运算符,实现逻辑与、逻辑或。
!为单目运算符实现逻辑非。
逻辑运算符的操作元必须是boolean型数据,逻辑运算符可以用来连接关系表达式。
位运算符:两个整型数据实施位运算,即对两个整型数据对应的位进行运算得到一个新的整型数据。
1.按位与”运算
“按位与”运算符“&”是二目运算符。
2.按位或”运算
“按位或”运算符:“|”是二目运算符。
3.按位非”运算
“按位非”运算符:“~”是单目运算符。
4.按位异或”运算
“按位异或”运算符:“^”是二目运算符。
其他:1、赋值运算符和赋值表达式:=
赋值运算符是二目运算符,左面的操作元必须是变量,不能是常量或表达式。
赋值运算符的优先级较低,是14级,结合方向右到左。
赋值表达式的值就是“=”左面变量的值。
注意:不要将赋值运算符“=”与关系运算符“==”混淆。
2、instanceof运算符
instanceof 运算符是二目运算符,左面的操作元是一个对象;右面是一个类。当左面的对象是右面的类或子类创建的对象时,该运算符运算的结果是true ,否则是false。
流程控制
条件语句:条件分支语句按着语法格式可细分为三种形式,
if语句
if-else语句
if-else if- ……-else 语句
开关语句:switch 语句是单条件多分支的开关语句,它的一般格式定义如下(其中break语句是可选的):
switch(表达式)
{
case 常量值:
若干个语句
break;
case 常量值:
若干个语句
break;
...
case 常量值n:
若干个语句
break;
default:
若干语句
}
switch语句中的“表达式”和“常量值”的值必须为byte、short、int、char型或者枚举类型,而且互不相同。
循环语句for循环:or语句的语法格式:
for (表达式1;表达式2;表达式3){
若干语句
}
for语句的执行规则是:
(1)计算“表达式1”,完成必要的初始化工作。
(2)判断“表达式2”的值,若“表达式2”的值为true,则进行(3),否则进行(4)。
(3)执行循环体,然后计算“表达式3”,以便改变循环条件,进行(2)。
(4)结束for语句的执行。
While循环:while语句的语法格式:
while (表达式) {
若干语句
}
while语句的执行规则是:
(1)计算表达式的值,如果该值是true时,就进行(2),否则执行(3)。
(2)执行循环体,再进行(1)。
(3)结束while语句的执行。
Do while循环:do-while语句的语法格式:
do {
若干语句
} while(表达式);
do- while语句的执行规则是:
(1)执行循环体,再进行(2)。
(2)计算表达式的值,如果该值是true时,就进行(1),否则执行(3)。
(3)结束while语句的执行。
break和continue
break和continue语句是用关键字break或continue加上分号构成的语句。
在循环体中可以使用break语句和continue语句。
如果在某次循环中执行了break语句,那么整个循环语句就结束。
如果在某次循环中执行了continue语句,那么本次循环就结束,即不再执行本次循环中循环体中continue语句后面的语句,而转入进行下一次循环。
从抽象到类
类:类是组成Java程序的基本要素。类封装了一类对象的状态和方法。类是用来定义对象的模板。
类的实现包括两部分:类声明和类体。基本格式为:
class 类名 {
类体的内容
}
class是关键字,用来定义类。“class 类名”是类的声明部分,类名必须是合法的Java标识符。两个大括号以及之间的内容是类体
构造方法与对象的创建:
类是面向对象语言中最重用的一种数据类型,那么就可以用它来声明变量。在面向对象语言中,用类声明的变量被称作对象。和基本数据类型不同,在用类声明对象后,还必须要创建对象,即为声明的对象分配变量(确定对象所具有的属性),当使用一个类创建一个对象时,也称给出了这个类的一个实例。通俗的讲,类是创建对象的“模板”,没有类就没有对象。构造方法和对象的创建密切相关。
构造方法:
构造方法是一种特殊方法,它的名字必须与它所在的类的名字完全相同,而且没有类型。
允许一个类中编写若干个构造方法,但必须保证他们的参数不同,即参数的个数不同,或者是参数的类型不同。
需要注意的是
(1) 如果类中没有编写构造方法,系统会默认该类只有一个构造方法,该默认的构造方法是无参数的,且方法体中没有语句。
(2)如果类里定义了一个或多个构造方法,那么Java不提供默认的构造方法
创建对象:1.对象的声明
一般格式为:
类的名字对象名字;如:
Vehicle car;
这里Vehicle是一个类的名字,car是我们声明的对象的名字。
2.为声明的对象分配内存
使用new运算符和类的构造方法为声明的对象分配变量,即创建对象。如果类中没有构造方法,系统会调用默认的构造方法,默认的构造方法是无参数的,且方法体中没有语句。如:
car=new Vehiclee();
PS:见示例。
使用对象:对象不仅可以操作自己的变量改变状态,而且能调用类中的方法产生一定的行为。
通过使用运算符“.”,对象可以实现对自己变量的访问和方法的调用。
1.对象操作自己的变量(对象的属性)
对象.变量;
2.对象调用类中的方法(对象的功能)
对象.方法;
3.体现封装
当对象调用方法时,方法中出现的成员变量就是指分配给该对象的变量。
对象的引用和实体:类是体现封装的一种数据类型,类声明的变量称做对象,对象中负责存放引用,以确保对象可以操作分配给该对象的变量以及调用类中的方法。分配给对象的变量习惯地称做对象的实体。
1.避免使用空对象
没有实体的对象称作空对象,空对象不能使用,即不能让一个空对象去调用方法产生行为。
2.垃圾收集
一个类声明的两个对象如果具有相同的引用,那么二者就具有完全相同的实体,而且Java有所谓“垃圾收集”机制,这种机制周期地检测某个实体是否已不再被任何对象所拥有(引用),如果发现这样的实体,就释放实体占有的内存
参数传值:方法中最重要的部分之一就是方法的参数,参数属于局部变量,当对象调用方法时,参数被分配内存空间,并要求调用者向参数专递值,即方法被调用时,参数变量必须有具体的值。
方法重载:方法重载的意思是:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。
class A {
float add(int a,int b) {
return a+b;
}
float add(long a,int b) {
return a+b;
}
double add(double a,int b) {
return a+b;
}
}
This关键字:this是Java的一个关键字,表示某个对象。this可以出现在实例方法和构造方法中,但不可以出现在类方法中。
实例方法可以操作类的成员变量,当实例成员变量在实例方法中出现时,默认的格式是:
this.成员变量;
当static成员变量在实例方法中出现时,默认的格式是:
类名.成员变量;
当一个对象调用方法时,方法中的实例成员变量就是指分配给该对象的实例成员变量,而static变量则和其他对象共享。因此,通常情况下,可以省略实例成员变量名字前面的“this.”,以及static变量前面的“类名.”。
但是,当实例成员变量的名字和局部变量的名字相同时,成员变量前面的“this.”或“类名.”就不可以省略。
注:this不能出现在类方法中,这是因为,类方法可以通过类名直接调用,这时,可能还没有任何对象诞生。
包:包是Java语言中有效地管理类的一个机制。
包名的目的是有效的区分名字相同的类。不同Java源文件中两个类名字相同时,它们可以通过隶属不同的包来相互区分。
import语句:一个类可能需要另一个类声明的对象作为自己的成员或方法中的局部变量,如果这两个类在同一个包中,当然没有问题。
如果一个类想要使用的那个类和它不在一个包中,要使用import语句完成使命。
访问权限:当用一个类创建了一个对象之后,该对象可以通过“.”运算符操作自己的变量、使用类中的方法,但对象操作自己的变量和使用类中的方法是有一定限制的。
所谓访问权限是指对象是否可以通过“.”运算符操作自己的变量或通过“.”运算符使用类中的方法。
访问限制修饰符有private、protected和public,都是Java的关键字,用来修饰成员变量或方法。