第六章类与对象总结

6.1面向对象的概述

c语言是一种结构化的,Java是一种面向对象的

随着软件的规模越来越大,结构化语言的弊端也逐渐暴露出来,开发周期长,结果也不尽如人意。这时Java语言变应运而生,也就是面向对象的开发思想。

6.1.1对象

什么是对象?现实世界中,随处可见的一种事物就是对象.对象是事物存在的实体,如人、书桌、计算机、高楼大厦等。人类解决问题的方式总是将复杂的事物简单化,于是就会思考这些对象都是由哪些部分组成的。通常分为静态部分和动态部分。

动态属性,静态属性。顾名思义,静态部分就是不能动的部分,这个部分称为属性这个属性包括人的高矮胖瘦,性别年龄,而动态属性就是对象可执行的动作,包括人的哭泣,微笑,说话,行走。

世界万物皆对象

6.1.2类

类包含静态属性和动态属性,类就是对象的设计图

不能将一个事物描述成一类事物,如一只鸟不能统称为鸟类。但如果要给某一类事物一个统称,需要用到类这个概念。

类是封装对象的属性和行为的载体,反过来说,具有相同属性和行为的一类实体被称为类。例如,鸟类封装了所有鸟的共同属性和应有的行为,如上图所示。

定义完鸟类之后,可以根据这个类抽象出一个实体对象,最后通过实体对象来解决相关的实际问题。

在Java语言中,类对象的行为是以方法的形式的,对象的属性是以成员变量的形式定义的,所以类包括对象的属性和方法。

6.1.3封装

面向对象程序设计具有以下特点:封装性、继承性和多态性。

封装是面向对象编程的核心思想。将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。例如,用户使用计算机时,只需要使用手指敲击键盘就可以实现一些功能,无须知道计算机内部是怎样工作的。即使知道计算机的工作原理,但在使用计算机时也并不完全依赖于计算机工作原理等细节。

采用封装的思想保证了类内部数据结构的完整性,使用类的用户不能轻易地直接操作类的数据结构,只能执行类允许公开的数据。这样避免了外部操作对内部数据的影响,提高了程序的可维护性。

6.1.4继承

类与类之间同样具有关系,这种关系被称为关联。关联主要描述两个类之间的一般二元关系。例如,一个百货公司类与销售员类就是一个关联,学生类与教师类也是一个关联。两个类之间的关系有很多种,继承是关联中的一种。

当处理一个问题时,可以将一些有用的类保留下来,在遇到同样的问题时拿来复用。假如这时需要解决信鸽送信的问题,我们会想到之前说的图里的鸟类。

继承性主要利用特定对象之间的共有属性。

6.1.5多态

将父类对象应用于子类的特征就是多态。依然以图形类来说明多态,每个图形都拥有绘制自己的能力,这个能力可以看作是该类具有的行为,如果将子类的对象统一看作是父类的实例对象,这样当绘制图形,简单的调用父类也就是图形类绘制图形的方法即可绘制任何图型,这就是多态的最基本的思想。

6.2类

类是封装对象的属性和行为的载体。

6.2.1成员变量

对象的属性也称为成员变量,成员变量可以是任意类型,整个类中均是成员变量作用范围。下面通过一个实例来演示

在上面的实例可以看出,在Java语言中需要用class关键字来定义类,课本实例内容 是它的类名称。同时在这个类中定义了一个成员变量,成员变量的类型为String类型。成员变量就是普通的变量,可以为她设置初始值,也可以不设置初始值。如果不设置初始值,则会有默认值。要注意成员变量前面修饰的关键字。

6.2.2成员方法

使用成员方法对应于类对象的行为。以刚刚那个类为例,它包含getName()和setName()两个方法,格式如下

权限修饰符 返回值类型 方法名(参数类型 参数名){

... //方法体

return 返回值;

}

一个成员方法可以有参数,这个参数可以是对象,也可以是基本数据类型的变量,同时成员方法有返回值和不返回任何值的选择,如果方法需要返回值,可以在方法体中使用return关键字,使用这个关键字后,方法的执行将被终止。

6.2.3权限修饰符

Java中的权限修饰符主要包括private(私有的)、public(共有的)、protected(受保护的)、default(默认),这些修饰符控制着对类和类的成员变量以及成员方法的询问,权限如下表

6.2.4局部变量

就是在成员方法内定义一个变量,那么这个变量被称为局部变量

6.2.5局部变量的有效范围

可以将局部变量的有效范围称为变量的作用域,局部变量的有效范围从该变量的声明开始到该变量的结束为止,但是在互相不嵌套时作用域可以同时声明两个名称和类型相同的局部变量,在互相嵌套时不能这样。看课本上的图片

6.2.6 this关键字

this关键字用于表示本类当前的对象,当前对象不是某个new出来的实体对象,而是当前正在编辑的类。this关键字只能在本类中使用。

6.3类的构造方法

在类中,除了成员方法外,还存在一种特殊类型的方法,那就是构造方法。构造方法是一个与类同名的方法,对象的创建就是构造方法完成的。每当类实例化一个对象时,类都会自动调用构造方法。

构造方法有两个特点1.没有返回值 2.构造方法的名称要与本类的名称相同。

构造方法的定义语法格式如下:

public Book(){

... //构造方法体

}

public:构造方法修饰符。

Book:构造方法的名称。

看下图及代码

package li;
 
public class people {
 
    int egg;//鸡蛋灌饼里蛋的个数
    public people(int egg) {//参数为鸡蛋灌饼里蛋的个数的构造方法
        this.egg=egg;//将参数依据egg的值赋给属性egg
    }
    public     people() {//无参数构造方法默认给饼加一个蛋
        this(1);//调用参数为鸡蛋灌饼里蛋的个数的构造方法,并设置鸡蛋灌饼里蛋的个数为1
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        people cake1=new people();
        System.out.println("顾客不要求加蛋的数量,饼里会有"+cake1.egg+"蛋");
        people cake2=new people(2);
        System.out.println("顾客要求加2个蛋的数量,饼里会有"+cake2.egg+"蛋");
        }
 
}

6.4静态变量和静态方法

在介绍静态变量和静态方法之前,首先需要介绍static关键字,因为由static修饰的变量和方法被称为静态变量和静态方法。

static(静态),这个词可以修饰函数,方法,变量,属性等,被声明为static的变量和方法被称为静态成员。静态成员属于类所有,区别于个别对象,可以在本类或其他类使用类名和“.”运算符调用静态成员。语法如下:(我使用的类名和书上的不同与例题会有所偏差)

静态变量与静态方法的作用通常是为了提供共享数据或方法,如数学计算公式等。尽管使用这种方式调用静态成员比较方便,但静态成员同样遵循着修饰符的约束。请看例题6.5

package 书6_2;

public class lidf {

    static  int i=0;//共享的属性,人数
    String name;//名称属性
    public lidf(String name ) {
        this.name=name;//记录名称
        i++;//人数递增
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        lidf c1=new lidf("tom");
        System.out.println("我是第"+lidf.i+++"名顾客,我叫"+c1.name);
        lidf c2=new lidf("张三");
        System.out.println("我是第"+lidf.i+++"名顾客,我叫"+c2.name);
        lidf c3=new lidf("狗蛋儿");
        System.out.print("我是第"+lidf.i+++"名顾客,我叫"+c3.name);
                
    }
 
}

6.5类的主方法

主方法是类的入口点,它定义了程序从何处开始。主方法提供对程序流向的控制,Java编译器通过主方法来执行程序。请看例题6.6的代码(我没有设置配置参数结果为空)

package 书6_2;

public class hh {


        // TODO Auto-generated method stub
        public static void main(String [] args) {//主方法
            for(int i=0;i<args.length;i++) {//根据参数个数做循环操作
                System.out.println(args[i]);//打印结果
            }
        }
    }
    

6.6对象

6.6.1创建

设置值

描述

设置值

描述

Test

类名

new

创建对象操作符

test

创建Test类对象

”a“

构造方法的参数

test对象被创建出来时,就是一个对象的引用,这个引用在内存中为对象分配了存储空间

package 书6_2;

public class hh {        
    String name;
    int age;
    String sex;
    public hh() {
        
    }
    public hh(String name,int age,String sex) {
        this.name=name;
        this.age=age;
        this.sex=sex;
        
    }
    public static void main(String []args) {
        hh p1=new  hh("tom",23,"男");
        hh p2=new hh("lily",19,"女");
        
    }
 
}

6.6.2属性和行为

对象的属性和行为主要通过成员方法和成员变量的形式来表示的,所以当对象获取成员时也相应获取了对象的书和行为

package 书6_2;

public class hh {        
    String name;//名字
    String color;//颜色
    String vioce;//叫声
    
    public hh(String name,String color,String vioce) {
        this.name=name;
        this.color=color;
        this.vioce=vioce;
        
    }
    public void call() {//叫
        System.out.println(vioce);
    }
    public static void main(String []args) {
        hh d1=new  hh("毛毛","白色","汪汪汪");
        System.out.print(d1.name+"的颜色是"+d1.color);//访问对象的属性
        System.out.print("叫起来的声音:");
        d1.call();//访问对象的行为
        hh d2=new hh("灰灰","灰色","嗷呜~");
        System.out.print(d2.name+"的颜色是"+d2.color);
        System.out.print("叫起来的声音:");
        d2.call();
        
    }
 
}

6.6.3引用

真正的操作标识符实质上是一个引用,引用的语法

类名 对象的引用变量

b d1 =new b();

b是类名,d1是引用名,new b对象的实体;

6.6.4销毁

为什么要销毁对象

每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址需要被回收

垃圾回收器

在其他语言中,需要用户手动回收废弃的对象,JAVA拥有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器会自动回收无用却占用内存的资源

怎么判断对象会被JAVA虚拟机视为垃圾?主要包括两种情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值