天天看点

专业做笔记24h之Java入门总结(方法重载与方法重写的区别)

1、            类的声明

抽象的目的是产生类,类的目的是创建具有属性和行为的对象,

对象的属性(对象操作自己的变量)

对象的行为功能(对象调用类中的方法)

在主类的main方法中使用类来创建对象

Java1

class 梯形{                     //类体:类声明之后的“{ }”+括号里面的内容

   float 上底,下底,高,laderArea;//变量声明:变量类型 变量名;

   float 计算面积(){  ;    //方法定义:方法返回类型 方法名 (方法的参数){ …  }

laderArea=(上底+下底)*高/2.0f;

return  laderArea;

}

void 修改高(float h){

     高=h;

}

}

(注意:类名第一个字母大写)

2、变量(成员变量(类变量、实例变量)+局部变量)

(注意:变量名第一个单词第一个字母小写,其后单词第一个字母大写)

2.1(1)成员变量(类变量、实例变量):在变量声明部分声明的变量是类的成员变量

     有效范围:在整个类内都有效,与其先后位置无关

  (2)局部变量:①方法的参数 和 ②方法体中声明的变量 是局部变量

     有效范围:①方法参数在整个方法体内有效;

               ②方法内的局部变量从声明它的位置之后开始有效(其声明在复合语句/循环语句,仅在其复合语句/循环语句中有效

2.2成员变量的隐藏

Java2

class Tom{

   int x=98,y;

   void f(){

       int x=3;

       y=x;    //显示的是局部变量,y得到的值是3,而不是98

    }

}

(方法体中局部变量名与成员变量名同,方法就隐藏了成员变量。用this关键字显示成员变量)

Java3

class三角形{

   float sideA, sideB,sideC,lengthSum;

void setSide(float sideA, float sideB,float sideC){

   this,sideA=sideA;

   this,sideB=sideB;

   this,sideC=sideC;

}

}

(this,sideA   this,sideB this,sideC分别表示成员变量的sideA, sideB,sideC)

2.3类变量/静态变量:关键字static放在变量类型前修饰e.g:static int y;

   实例变量:无static修饰  e.g:float x;

3、方法(构造方法+实例方法+类方法)

3.1 类方法/静态方法:static放在方法类型前修饰e.g:static void speak(String s){…};

                   只能对类变量进行操作

    实例方法:无static修饰  e.g:void f(){…};

            对类变量和 实例变量 都能操作

(注意:   一个类中的方法可以相互调用,实例方法可以调用类中的其他方法,类方法只能调用该类的类方法,不能调用实例方法,不可以操作实例变量(p84原因:因为在类创建对象之前,实例成员变量还没有分配内存,而且实例方法也没有入口地址。))

3.2 构造方法:是一种特殊的方法,用类创建对象时用构造方法

E.g: Xyjrw zhubajie=newXyjrw();//new运算符和默认的构造方法

①构造方法的名字必须和它所在的类的名字完全相同

②构造方法没有类型

③构造方法可以重载

④赋初值:构造方法对变量初始化or成员变量在声明时指定初值

(注意:对成员变量的操作只能放在方法中,方法可以对成员变量和该方法体重声明的局部变量操作。在声明类的成员变量时可以同时赋值。)

Java4

class A{

   int a=12;//合法声明成员变量同时赋值

   float b;

   b=12.56f;//非法这是赋值语句,不是变量的声明,语句只能出现在方法体中

}

4、java中的2中多态性:

方法重载(Overload)+方法重写(Override)/覆盖

(1)方法重载(Overload)(一个类中)

目的:用自己的方法

Java5

class Area{

   float getArea(float r){

       return 3.14f*r*r;  //浮点型+f

    }

   double getArea(float x, float y, float z,){  //参数个数不同

       return (x*x+y*y+z*z)*2.0;

    }

double getArea(float x,int y){          //参数类型不同

       return x*y;

}

}

①一个类中可有多个方法具有相同的名字(getArea),但这些②方法的参数个数或 参数类型必须不同。(是参数类型,不是方法类型,方法类型不同也得保证参数类型不同)

(2)方法重写(Override)/覆盖(子类,继承extends,不属于新增的方法)

目的:子类通过重写可隐藏已继承的实例方法。

(隐藏父类的,用自己的方法;重写方法可操作继承的成员变量和子类新声明的成员变量;

子类想用隐藏的方法,必须使用关键字super

方法重写(Override)/覆盖:①在子类中定义一个方法,该方法的类型和父类的方法的类型or父类的方法的类型的子类型一致;②这个子类方法的名字、参数个数、参数类型和父类的方法完全相同;

5、对象

在主类的main方法中使用类(之前写好的类)来创建对象

5.1 创建对象(对象的声明+为声明的对象分配内存)

对象的声明:类的名字 对象名字;e.g:Xyjrw zhubajie;//声明对象

为声明的对象分配内存:new运算符 类的构造方法;e.g:zhubajie=new Xyjrw();

合:Xyjrw zhubajie=new Xyjrw();//声明对象并为其分配内存

(注意:

Java6

class Point{

int x,y;

Point(int a,intb){

    x=a;

    y=b;

}

}

Public class Haha{

Public staticvoid main(String args[]){

    Point point1,point2;     //声明对象point1和point2

    point1=new Point(10,10);//合法:使用new和Point类中的构造方法

    Point2=new Point():;  

5.2使用对象

抽象的目的是产生类,类的目的是创建具有属性和行为的对象,

(1)对象操作自己的变量(对象的属性):对象.变量;

(2)对象调用类中的方法(对象的行为功能):对象.方法;

(3)体现封装:(注意:局部变量在声明时若无初始化,就无默认值,故在使用局部变量之前,要事先为其赋值。)

5.3对象的引用和实体

数据结构:堆栈

Java的对象在堆中分配内存,对象的引用在栈中分配内存。就是说,当用类创建一个对象时,类中的成员变量在堆中分配内存空间,这些内存空间称为该对象的实体或对象的变量,而对象中存放着引用,该引用在栈中分配内存,以确保实体由该对象操作。

p70

p1          12  x          p1

0xAB       16  y           0xDD       6  x

P2           6   x       p2            18  y

0xDD       18  y           0xDD    

图1对象内存模型          图2 p1=p2后的对象内存模型

图1

Point p1=new Point(12,16);

Point p2=new Point(6,18);

图2

p1 = p2;

一个类创建的两个对象,如果具有相同的引用,那么久具有完全相同的实体。没有实体的对象称为空对象,空对象不能使用。注意:由于对象是动态地分配实体,故Java的编译器对空对象不做检查,在编写程序时要注意避免使用空对象。)

6、参数传值

方法在被调用时,若方法有参数参数必须要实例化,即参数变量必须有具体的值。

(1)对于基本数据类型的参数e.g:向float型参数传递一个int值(√)

                                  向级别高型参数传递一个级别比它低的类型的值

   (2)引用:p74

abstract修饰符用来修饰类和成员方法

a:用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化。

b:用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。

abstract的规则:

a:抽象类可以没有抽象方法,但是有抽象方法的类必须定义为抽象类,如果一个子类继承一个抽象类,子类没有实现父类的所有抽象方法,那么子类也要定义为抽象类,否则的话编译会出错的。

b:抽象类没有构造方法,也没有抽象静态方法。但是可以有非抽象的构造方法

c:抽象类不能被实例化,但是可以创建一个引用变量,类型是一个抽象类,并让它引用非抽象类的子类的一个实例

d:不能用final 修饰符修饰(修饰方法还是类?