JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法

原创 2016年07月13日 00:17:27

JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法

好久没更了,毕业季的离别总令人伤感,我相信再见是为了我们更好的遇见。好了,来继续学习吧!

一、面向对象思想

  • 概述: 面向对象是基于面向过程的编程思想
  • 特点:
    • 更符合我们思想习惯的思想
    • 可以将复杂的事情简单化
    • 将我们从执行者变成了指挥者(角色发生了转换)
  • 说了上面的概念,有的人肯定没有明白和理解
  • 那么,我们就针对面向对象思想举几个例子吧。

1.买电脑:
面向过程:我要了解电脑–了解我自己的需求–找对应的参数信息–去中关村买电脑–讨价还价–买回电脑
面向对象:我知道我要买电脑 – 计算机老师去给我买 – 老师就买回来了
2.洗衣服:
面向过程:把衣服脱下–找一个盆–放点洗衣粉–加点水–把衣服扔进去–搓一搓–清洗衣服–拧干–晾起来
面向对象:把衣服脱下–打开全自动洗衣机–扔进去–一键即可–晾起来

  • 列举了上面两个例子,我们可以看出,运用面向对象的思想可以很方便的解决我们的问题,同时我们也可以把面向对象思想的使用规则做以总结,让我们更符合面向对象思想
    • A:首先分析有那些类
    • B:接着分析每个类应该有什么
    • C:最后分析类与类的关系

我们知道了面向对象的使用规则,就来做一道练习吧!
练习:把大象装进冰箱。

  • 分析:
    • 面向过程:
      • 动作有哪些呢?
        A:打开冰箱门
        B:装进大象
        C:关闭冰箱门
    • 代码体现:
class Demo {
                public static void main(String[] args) {
                    //调用方法
                    open();
                    in();
                    close();
                }

                public static void open() {
                    System.out.println("打开冰箱门");
                }

                public static void in() {
                    System.out.println("装进大象");
                }

                public static void close() {
                    System.out.println("关闭冰箱门");
                }
            }

运行结果:
这里写图片描述

  • 我们从面向对象的思想来分析,并实现代码:
    • A:有哪些类呢?
      • 大象、冰箱、Demo
    • B:每个类有哪些东西呢?
      • 大象:
        • 进去
      • 冰箱:
        • 开门、关门
      • Demo:
        • main方法
    • C:类与类直接的关系是什么呢?
      • Demo中使用大象和冰箱类的功能。

代码实现:

            class DaXiang {
                public static void in() {
                    System.out.println("装进大象");
                }
            }

            class BingXiang {
                public static void open() {
                    System.out.println("打开冰箱门");
                }

                public static void close() {
                    System.out.println("关闭冰箱门");
                }
            }

            class Demo {
                public static void main(String[] args) {
                    //冰箱调用开门
                    BingXiang.open();
                    //大象调用进去
                    DaXiang.in();
                    //冰箱调用关门
                    BingXiang.close();
                }
            }

运行结果:
这里写图片描述
是不是发现运行结果都是一样的呀,但是对于运用面向对象思想实现的代码,在以后的开发中是很好维护的,所以我们要运用面向对象的思想去编程。

  • 面向对象开发
    • 就是不断的创建对象,使用对象,指挥对象做事情。
  • 面向对象设计
    • 其实就是在管理和维护对象之间的关系。
  • 面向对象特征
    • 封装(encapsulation)
    • 继承(inheritance)
    • 多态(polymorphism)

二、类与对象的关系

  • 类:是一组相关的属性和行为的集合
    • 属性——事物的基本描述,行为——事物的功能
    • Java语言中最基本的单位是类。所以,我们要用类来体现事物
  • 对象:是该类事物的具体体现
  • 举例:
    • 类 ——学生就是类
    • 对象 ——班长就是一个对象

三、成员变量和局部变量的区别

  • 在类中的位置不同
    • 成员变量——类中方法外
    • 局部变量——方法内或者方法声明上
  • 在内存中的位置不同
    • 成员变量——堆内存
    • 局部变量——栈内存
  • 生命周期不同
    • 成员变量——随着对象的存在而存在,随着对象的消失而消失
    • 局部变量——随着方法的调用而存在,随着方法的调用完毕而消失
  • 初始化值不同
    • 成员变量——有默认的初始化值
    • 局部变量——没有默认的初始化值,必须先定义,赋值,才能使用。

注意:成员变量和名称可以不可和局部变量一样呢?
答案当然是可以的,但是使用的时候要注意,先找小范围,再找大范围。

四、匿名对象

匿名对象:就是没有名字的对象。
是对象的一种简化表示形式

  • 匿名对象的两种使用情况
    • 对象调用方法仅仅一次的时候
    • 作为实际参数传递
      我们来举例说明:
    //正常写法
    Student s = new Student();
    s.age=23;
    //匿名写法
    new Student().age = 23;

//我们可以看到,用匿名写法时不用起名字就可以直接修改age的值了。
// 输出学生的数量
System.out.println("一共有"+new Student().num + "个学生");

//这种方法就是作为实际参数传递

五、封装(Encapsulation)

封装属于面向对象的三大特征之一。我们来一起学习它。

  • 封装的概述:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
  • 好处:
    • 隐藏实现细节,提供公共的访问方式
    • 提高了代码的复用性
    • 提高安全性
  • 原则:
    • 将不需要对外提供的内容都隐藏起来
    • 把属性隐藏,提供公共方法对其访问
      我们来写一个Demo
    public class StudentDemo {

    public static void main(String[] args) {

        Student s = new Student();
        s.age=5;    //给成员变量赋值
        s.study();  //调用方法  
    }
}

class Student{

    String name;//姓名
    int age;    //年龄

    //定义学习的方法
    public void study(){
        System.out.println("学生爱学习");
    }
}

输出结果:学生爱学习

六、private

  • private 关键字(意思是私有的)
    • 是一个权限修饰符。
    • 可以修饰成员(成员变量和成员方法)
    • 被private修饰的成员只在本类中才能访问。
  • private最常见的应用:
    • 把成员变量用private修饰
    • 提供对应的getXxx()/setXxx()方法
    • 一个标准的案例的使用

我们一起写一个Demo来学习private关键字

这里写图片描述

在上面这个Demo中,我们可以发现,当我们用private修饰Student类中的成员变量时,在StudentDemo类中我们就不能调用它的成员变量age了。
上面我们也讲到了, 被private修饰的成员只在本类中才能访问。
那么我们要怎么去访问呢?这个时候java就给我们提供了一个方法,我们一起来看

    public class StudentDemo {
    public static void main(String[] args) {

        Student s = new Student();
//      s.age=5;        //给成员变量赋值
        s.setAge(5);    //给成员变量赋值
        s.study();      //调用方法          
    }
}

class Student{

    private String name;//姓名
    private int age;    //年龄

    //定义学习的方法
    public void study(){
        System.out.println("学生爱学习");
    }

    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

七、this

this关键字:代表所在类的对象引用。简单的说,它就代表当前类的一个对象。

  • 注意:
    • 方法被哪个对象调用,在该方法内部的this就代表那个对象
  • 用法:
    • 解决局部变量隐藏成员变量
      如果你们细心点就会发现,在上面我们写的Demo中set方法中是有this的
    public void setAge(int age) {
            this.age = age;
        }

八、构造方法

  • 作用概述:
    • 给对象的数据进行初始化
  • 格式:
    • 方法名与类名相同
    • 没有返回值类型,连void都没有
    • 没有具体的返回值

我们来写一个简单的Demo

class Student {
    private String name; //null
    private int age; //0

    public Student() {
        System.out.println("这是构造方法");
    }
}
class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();
    }
}

输出结果:
这里写图片描述
只要我们创建了对象就是new了,就执行了构造方法


  • 注意:
    • 如果你不提供构造方法,系统会给出默认构造方法
    • 如果你提供了构造方法,系统将不再提供
    • 构造方法也是可以重载的

我们来完成一个重载的Demo
public class StudentDemo {

    public static void main(String[] args) {

        Student s1 = new Student();
        Student s2 = new Student("阿杜");
        Student s3 = new Student("阿杜",23);
    }
}

class Student{
    private int age;    //年龄

    public Student(){
        System.out.println("这是构造");
    }
    public Student(String name){
        System.out.println(name);
    }
    public Student(String name,int age){
        System.out.println("这是构造"+age);
    }   
}

输出结果:
这里写图片描述


好了,面向对象这一张的内容很多,但是很重要,所以我们一定要学会他,博客会陆续更新的,谢谢

版权声明:本文为博主原创文章,未经博主允许不得转载。

7 面向对象(成员变量和局部变量的区别,类作为形式参数的问题,匿名对象,封装,private关键字,this关键字,构造方法,类的初始化过程,static关键字)

面向对象(成员变量和局部变量的区别,类作为形式参数的问题,匿名对象,封装,private关键字,this关键字,构造方法,类的初始化过程,static关键字)...
  • opopopwqwqwq
  • opopopwqwqwq
  • 2016年04月02日 20:48
  • 1722

C++类中对同类对象private成员访问

转自:http://www.cnblogs.com/yanqi0124/p/3828507.html 私有成员变量的概念,在脑海中的现象是,以private关键字声明,是类的实现部分,不对外...
  • eeeeelin
  • eeeeelin
  • 2016年10月21日 14:11
  • 1600

JAVA 面向对象 成员变量和局部变量

本页面更新日期: 2016年07月20日前言 在 Java语言中, 根据定义变量位置的不同,可以将变量分成两大类:成员变量 局部变量 成员变量和局部变量的运行机制存在很大差异,下面我们看看差异在...
  • tmdlife
  • tmdlife
  • 2016年07月20日 18:08
  • 3590

Java中内存,成员变量,局部变量

一 java内存分配这里只是在网上找的一些资料; Java 中的数据类型分为 1. 基本类型(原始数据类型) byte short int long float double ...
  • u010293702
  • u010293702
  • 2015年04月05日 21:21
  • 2461

Java对象封装

在看了设计模式-迪米特法则之后,应该就可以理解Java中对象的封装。什么是封装?在Java中定义了类,其实有点类似于面向过程设计中定义一个结构体一样,但是有个概念必须清楚,那就是定义类不等于做好了封装...
  • Mrljdx
  • Mrljdx
  • 2015年04月07日 10:00
  • 1296

匿名对象和内部类

匿名对象: 匿名对象是对象的简化形式; 匿名对象的使用情况: 1)当对对象方法仅进行一次调用的时候使用;如果需要调用多次,还需要创建对象。如果对一个对象进行多个成员的调用,就必须给这个对象起个名...
  • chenrushui
  • chenrushui
  • 2016年07月15日 11:21
  • 1040

【java】《java编程思想》 读书笔记

之前主要用的C++的比较多,之前花了快2个月的实际认真系统全面的学习了以下java的基础语法,《java编程思想》这本书翻译水平确实不是很好,很多话读着会比较拗口。推荐读之前,先去网上搜索 “java...
  • a2888409
  • a2888409
  • 2015年10月15日 10:07
  • 1955

匿名对象与非匿名对象的区别

类封装完以后就可以通过使用new关键字和类的构造方法来创建对象,这种对象分为两种:匿名对象与非匿名对象。何为匿名对象,何为非匿名对象呢?举个例子:假如有如下类:     package com.hei...
  • wangshuxuncom
  • wangshuxuncom
  • 2013年11月06日 07:42
  • 7189

假如java类里的成员变量是自身的对象

如题,假如java类里的成员变量是自身的对象,则新建该类对象时内存中怎么分配空间,我感觉似乎死循环了。  不过我想的肯定是错的,因为很多类的成员变量是自身对象,并且绝对无错,举个例子:  Clas...
  • u012506661
  • u012506661
  • 2016年12月16日 23:02
  • 1298

为什么匿名内部类中引用的局部变量和参数需要final而成员字段不用?

http://www.blogjava.net/DLevin/archive/2011/11/23/364599.html 昨天有一个比较爱思考的同事和我提起一个问题:为什么匿名...
  • wwww4
  • wwww4
  • 2015年07月02日 20:51
  • 1080
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法
举报原因:
原因补充:

(最多只允许输入30个字)