流程控制
选择结构if条件语句
三种形式:
一.if(条件表达式){
语句序列一
}
else{
语句序列二
}
二. if(条件表达式){
语句序列
}
三. if(){
}
else if(){
}
.
.
else{
}
在java语言中,if( )和else if()括号中条件表达式的结果必须是逻辑型量即ture或flase(c语言中非0即真不适用)
循环语句
do-while循环与while循环语句一个主要区别是do-while循环语句在结尾处加了一个分号
跳转语句
break语句:可以让程序强行跳离switch语句或循环语句,然后转去执行switch语句或循环语句的下一句,若是在嵌套循环中,只跳离内循环
continue语句:可以让程序强行跳到循环的开始处去执行下一轮循环
return语句:用来使程序从方法中返回
数组与字符串
在方法中定义的一些基本类型的变量和对象的引用变量都在方法的栈内存中分配
由new运算符创建的数组或对象,在堆中分配内存,在堆中创建了一个数组或对象后,同时还在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,引用变量就相当于是为数组或对象起的一个名称
java有一个特殊的引用型常量null,如果将一个引用变量赋值为null,表示该引用对象的变量不指向(引用)任何对象
数组
一维数组定义:
数据类型[ ]数组名; //声明一维数组 数据类型的方括号里并不填写任何内容
数组名=new数据类型[个数];//分配内存给数组
eg:int[ ]a=new int [5]
a.length指出数组a所包含元素个数
一维数组初始化
for循环遍历赋值
int[ ]a={1,2,3,4,5};
foreach语句:每次从数组array中取出一个元素,自动赋值给变量element,只需提供三个数据:元素类型·,循环变量的名字,和被检索数组
eg: int[ ]a={1,2,3,4};
for(int element:arr)
System.out.println(element);
二维数组
矩形式: 数据类型[ ] [ ]数组名;
数组名=new数据类型[行数][列数];
int[ ] [ ]a=new int [3] [4];
非矩形:int [ ] [ ]x; x=new int [3] [ ]; 1
由于x[0]、x[1]等为数组引用变量,因此需对其赋值,指向真正的数组对象
x[0]=new int[3]; x[1]=new int [4]; 2
二维数组赋值: int[ ][ ]a={ {11,12,13}, or 1
{66,45,76} };
字符串
创建的形式:1.String s=new String(“Hello”);
2. String s="Hello";
String类方法的调用:字符串变量名.方法名();
类与对象
类是由数据成员与函数成员封装而成的,其中数据成员表示类的属性,函数成员表示类的行为
定义类方法 [类修饰符]class 类名称
{
[修饰符] 数据类型 成员变量名称;
[修饰符] 返回值的数据类型 方法名(参数1,参数2···)
{
语句序列;
return [表达式];
}
}
修饰符
类修饰符:public
abstract:没有实现方法,需要子类提供方法的实现,所以不能创建该类的实例
final:表示它不能被其他类所继承
缺省
abstract和final相互对立不能同时修饰一个类
成员变量修饰符:public
private:只允许自己类的方法访问
protected :指定该变量只可以被它自己的类及其子类或同一包中其他类所访问,在子 类中可覆盖此变量
缺省:同包可访问
final:此变量值不能改变
static:指定该变量被所有对象共享
transient:指定该变量是一个系统保留、暂无特别作用的临时性变量
volatile:指定该变量可同时被几个线程控制修改
定义成员变量的时候,可以同时赋值,表明成员变量的初始状态
成员方法修饰符:public
private:指定该方法只允许自己类的方法访问
protected:指定该方法只可以被它的类及其子类或同一包中其他类访问
缺省:同包中其他类可
final:指定该方法不能被覆盖
static:指定不需要实例化一个对象就可以调用的方法
abstract:指定该方法只声明方法头,而没有方法体,抽象方法需要在子类中被实现
synchronized:多线程程序中,用于对同步资源加锁,以防止其他线程访问,运行结束后解除
native:指定方法体是用其他编程语言在程序外编写的
static修饰符修饰后成员具备的特点:
随着类的加载而加载
优先于对象存在
可以直接用类名调用,不用创建对象
使用注意:静态方法只能访问静态成员 ,静态方法中不能用this、super关键字
成员变量与局部变量的区别:
类中定义的变量是成员变量,方法中定义的变量是局部变量
成员变量可被public、private、static等修饰符所修饰,而局部变量不能被访问修饰符及static所修饰。成员变量和局部变量都可以被final所修饰。
成员变量存在于堆内存,而局部变量存在于栈内存中
成员变量如果没有被赋初值,则会自动以类型的默认值赋值(有一种情况除外,被final修饰但没有被static修饰的成员变量必须显式的赋值);而局部变量则不会自动赋初值
创建对象
由于对象是类的实例,所以对象是属于某个已知的类
声明指向“由类所创建的对象”的变量
利用new运算符创建新的对象,并指派给前面所创建的变量
eg:要创建圆柱体类Cylinder的对象
Cylinder volu; //声明指向对象的变量volu
volu=new Cylinder( );//利用new创建新对象,并让变量volu指向它
通过这两步骤就可利用指向对象的变量volu,访问到“由类Cylinder创建的对象”的内容即成员方法或变量
一个对象被创建时,包括了类中所有的成员,volu是对象名称指向对象实体的变量,而非对象本身 new运算符:用于创建对象,给对象申请地址空间和调用构造函数给对象初始化,向系统申请一块空间,来存放相关的执行代码和数据
对象的使用
对象.对象成员
访问成员变量:volu.height=5;
访问成员方法:volu.area(4)//如果方法不需要参数则用空括号
在同一个类的定义里面,某一方法可直接调用本类其他方法,如果强调是对象本身的成员的话,则可以在成员名前加this关键字,即“this。成员名”。此时this即代表调用此成员的变量。
若主方法main()中有语句volu.volume()则在类定义里的this关键字即代表对象volu
double volume(){
return this.area()
}
参数的传递
方法括号内有参数时可以是数值型、字符串型甚至对象
若方法的形式参数与类的成员变量同名时,则需用this关键字来标识成员变量//this.radius
如果要将数组传递到方法里,只需在方法名后的括号内写上数组的名称即可,也就是说实参只给出数组名即可
如果返回一个一维整型数组,则必须在该方法前加上int[ ] 二维int[][]
当参数是基本数据类型时,是传值方式调用;而当参数是引用型变量时,是传址方式的调用
方法中接受不固定个数的参数成为可变参数 可变参数在最后:数据类型...可变参数名
类是对某一类事物的描述,是抽象的、概念上的定义;而对象则是实际存在的属该类事物的具体个体,因而也称为实例,是实实在在的个体,一个类可以对应多个对象
在成员变量或成员方法前加上关键字this表示什么含义?
如果是要强调对象本身的成员的话(在类的定义里调用本类其他成员),可以在成员名前加this关键字,此时this代表调用此成员的对象
子类调用构造函数,会先调用父类的无参数构造函数,若有super()则直接调用有参数构造函数,也就是子类要进一个父类的构造函数。
创建父类对象指向子类:使之完成父类子类都用得到的属性