java复习资料1
- 格式:doc
- 大小:62.50 KB
- 文档页数:15
1.面向对象和面向过程的语言
面向对象语言: java,c++,c#
核心:
封装
继承
多态
面向过程语言:C
面向过程的核心:
数据
数据结构
算法
2.类
1)什么是类:
类是一个抽象的概念,定义了某一些事物具有的共同的特征(包括静态和动态特征---状态和行为(属性和操作)---数据(变量)和方法)
2)如何定义类:
使用class关键词来定义JAVA类,一般一个类就单独的放在一个文件(后缀名为.java)
3)类里边包含数据和方法:
public class Circle {
//数据(属性)
int radiu;//半径----成员变量
int posX,posY;//圆中心坐标 ----成员变量
//方法(操作)
double getArea(){//获取面积----成员方法
return 3.14 * radiu * radiu ;
}
public static void changeValue1(int i){ //成员方法(基本数据类型作为参数)
i +=5; //c = 8
}
public static void changeValue2(Circle c){//成员方法(引用型作为参数)
c.radiu = 100;
}
}
3.对象(实例)
1)使用new关键词产生对象(实例):
Circle c1 = new Circle(); //产生对象 c1.radiu = 2; //访问成员变量,给成员变量赋值
c1.posX = 1;
c1.posY = 1;
Circle c2 = new Circle();//产生对象
c2.radiu = 3;
c2.posX = 10;
c2.posY = 10;
2) 类是抽象的,不占用内存,而对象是具体的,占用存储空间.
对象类型(引用型)变量和基本数据类型的内存状态:(见图对象型内存空间分配)
3)引用类型和基本数据作为方法形参进行传值的不同:
Circle c = new Circle();
c.radiu = 2;
int i = 200;
changeValue1(i);
System.out.println(i);//输出为200---方法内改变基本数据类型的形参,不改变外边实参的值
changeVaule2(c)
System.out.println(c.radiu);//输出为100---方法内通过对象引用实际改变了对象的值
数组是引用类型,使用数组作为参数传递时,在方法内改变形参数组里边的值,实际上改变的就是实参的数组,如:
public class Test {
public static void changArray(int[] a3){//a3= a1
a3[1] = 4;
}
public static void main(String[] args) {
int[] a1={1,2,3};
changArray(a1);
//此时数组a1里的值为{1,4,3}
System.out.println(a1[0]+a1[1]+a1[2]);//8
}
}
4)对象的比较”相等“:
在比较对象是否“相等”时,要清楚想具体比较的什么是一样?
如果用==去比较对象,比较的是“引用“(是否是同一对象即为同一块内存空间)
Circle c1 = new Circle(); Circle c2 = new Circle();
if(c1 == c2) //结果为false,因为c1,c2是不同的对象
System.out.println("true");
else
System.out.println("false");
Circle c3 = c1;
if(c3 == c1) //结果为true,因为c1,c3是指向同一对象
System.out.println("true");
else
System.out.println("false");
if(c3 == c2) //结果为false
System.out.println("true");
else
System.out.println("false");
如果我们赋予”相等“这样的一个含义:如果圆半径一样,则认为这两个圆”相等“,这样赋予了特殊含义的”相等“,
在比较时不能使用”==“去比较,需要我们自定义方法去实现这个比较。
按照惯例这种比较通常是改写equals方法(留待学继承的时候再改写,如果不改写equals,从Object继承下来的equals效果同==)
5)对象型的数组:
可以定义一个对象型的数组来存放一组同一类型的对象:
Circle arr[];
arr = new Circle[5];
for(int i = 0; i < arr.length; i++){
arr[i] = new Circle();//产生Circle对象放到数组下标为i的位置
}
//访问数组下标为2这个位置的Circle对象
arr[2].radiu = 100;
arr[2].posX = 100;
arr[2].posY = 100;
注意对象型数组内存的状态(见图“对象型数组内存”)
4.类的数据
成员变量:
定义的位置:类的里边,方法的外边。
访问方式:
作用范围:类本身里边都可以访问。类外边受访问控制符的影响。
成员变量与局部变量可以同名,如果使用这个变量时,
如果是在这个局部变量的作用范围内,则这个变量是局部变量。
如果能定义局部。。。。
成员变量会自动有默认初始值:
数值类型————》0或0.0
布尔类型————》false
引用类型————》null
public class StartApp {
int i;
boolean flag;
double d;
Rect rect;
public static void main(String[] args) {
new StartApp().func();
}
public void func(){
System.out.println(i);//0
System.out.println(flag);
System.out.println(d);
System.out.println(rect);
rect.id = 100;
rect.length = 10;
rect.width = 20;
System.out.println(rect.getArea());
}
}
5.类的方法
1)一般方法(成员方法)
a.从作用上讲是完成某个操作(功能),实现代码的重用;
b.方法只能定义在类中,不能定义在类外;
c.定义方法时,注意定义格式:
修饰符 返回值类型 方法名(形参){方法体};
其中:返回值类型(可为void,基本数据类型,引用型),方法名(见名知意,驼峰标识)是必须要有的。
形参可以没有,可以有(没有或一个或多个),注意形参为基本数据类型和引用型传值的不同。 方法体 即为方法要完成操作的具体代码实现
d.方法的调用
在类外,通过具体对象来调用。
在类本身其他方法里边直接调用
在类本身方法里调用方法本身(递归法)
调用时,实参和形参相对于进行传值
理解调用方式的代码执行次序。
f.方法的覆盖:同一个类中,定义多个方法,只是参数不一样,其他均一样,则形成覆盖
参数的不一样可以是参数个数不一样,类型不一样,次序不一样。
在方法的调用时,根据实参的个数和类型来决定具体调用哪个方法
public class Circle {
//数据--属性
int radiu;//半径
String color;//颜色
//方法--操作
double getArea(){
return 3.14 * radiu * radiu ; //类的方法里去访问成员变量
}
double getArea(int i,double d){
return 1.0;
}
double getArea(double d,int i){
return 1.0;
}
void setColor(String color1){ //返回类型
color = color1;
}
}
2)构造方法
定义:没有返回值,方法名必须和类名一样
调用:不像一般方法那样去调用。而是在创建对象的时候,自动调用
作用:一般都是做初始化
构造方法可以定义多个(类似方法的覆盖):
构造方法是否必须:
只要能创建对象,一定有构造方法。