JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块


加油吧,节奏得快点了

1.概述

上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例

就拿买电脑来说吧,首先,你不懂电脑,你去电脑城买电脑,和大象装冰箱里一样,是什么步骤?咨询 砍价 ,谈妥了就那电脑走人,对吧,这就是面向过程的思想,而面向对象是:你有一个哥们,他懂电脑,什么都会,你只要带他去,就行,你这个哥们就是对象,在JAVA中,我们就是操作一个对象去完成各种各样的操作的,这就是面向对象的思想

2.成员变量

面向对象有三大特征

  • 封装
  • 继承

那具体是什么意思呢?

我们开发的话,就是就是在找对象,没有对象的话,就new 一个对象,对象和类,对象和对象都是有关系的,我们需要去维护

类就是生活中对事物的描述

对象就是这类事物实实在在存在的个体

需求:描述汽车(颜色,轮胎个数),描述事物就是在描述事物的属性和行为

我们可以直接定义一个class

//公共的   类   类名
public class HelloJJAVA {
    // 公共的 静态 无返回值 main方法 数组
    public static void main(String[] str) {
        Car car = new Car();
        // 输出颜色
        System.out.println(car.color + "的小汽车");
        // 输出轮胎个数
        System.out.println(car.num + "个轮子");
        // 输出行为
        car.run();
    }

}

/**
 * 汽车类
 *
 * @author LGL
 *
 */
class Car {

    // 颜色
    String color = "红色";

    // 轮胎个数
    int num = 4;

    // 行为
    void run() {
        System.out.println("我是" + color + "的小汽车,我有" + num + "个轮子");
    }

}

这样大家看的懂吗,我们猴子姐new一个Car就可以

其实定义类,就是描述事物。就是在定义属性和行为,属性和行为共同成为类中的成员(成员变量

3.局部变量

其实局部变量我们一直在写,他和成员变量的区别在于作用的范围不一样

我们以上述的例子

  • 成员变量:作用在全局中
  • 局部变量:作用在Car类里

在内存中的存储和位置

  • 成员变量在堆内存中,因为对象的存在才在内存中存在
  • 局部变量在栈内存中

4.匿名对象

这是一个小知识点,匿名换句话其实就是没有名字的意思

  • 匿名对象是对象的简化版
  • 匿名对象两种使用情况
    • 当对对象方法仅进行一次调用的时候
    • 匿名对象可以作为实际参数进行传递

我们用简单的例子

//正常的写法
Car c = new Car();
c.num = 5;

//匿名对象
new Car().num = 5;

可以看到我不起名字直接去更改num的值了,这就是匿名对象

第二种使用方式实际参数去传递,其实在上面我用到了

// 输出颜色
System.out.println(new Car().color + "的小汽车");

这样就OK了

5.封装

OK,终于说道我们的核心思想了Encapsulation

封装的含义:是指隐藏的对象的属性和实现细节,仅对外提供访问方式

好处

  • 将变化隔开
  • 便于使用
  • 提高复用性
  • 提高安全性

封装原则

将不需要对外提供的内容都隐藏起来;

把属性都隐藏,提供对外访问方式

我们写例子

//公共的   类   类名
public class HelloJJAVA {
    // 公共的 静态 无返回值 main方法 数组
    public static void main(String[] str) {

        showString("我是封装");
    }

    /**
     * 封装
     *
     * @param str
     */
    public static void showString(String str) {
        System.out.println(str);
    }
}

这个就是最简单的封装了,你给我个字符串我就打印,过程你不必知道,函数本身就是一个最小的封装体

6.private

私有的,怎么使用?

//公共的   类   类名
public class HelloJJAVA {
    // 公共的 静态 无返回值 main方法 数组
    public static void main(String[] str) {
        Person p = new Person();
        p.age = 20;
        p.speak();
    }
}

class Person {
    int age;

    // 说话方法
    void speak() {
        System.out.println("我今年" + age + "岁");
    }
}

我们现在的代码是这样写的,输出的结果

这里我们直接访问了arg,这里就存在了一个安全隐患,这里也就是用到private修饰符去修饰arg了

在这里,就看到一个错误提示了,因为我们用private修饰了之后,你就不能拿到了

private:私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)

注意的是,私有只在本类中有效

那我们怎么去访问呢?你既然私有了,就需要对外提供一个方法

//公共的   类   类名
public class HelloJJAVA {
    // 公共的 静态 无返回值 main方法 数组
    public static void main(String[] str) {
        Person p = new Person();
        // p.age = 20;
        p.setAges(20);
        p.speak();
    }
}

class Person {

    // 私有
    private int age;

    /**
     * 对外提供方法
     *
     * @param a
     */
    public void setAges(int a) {
        age = a;
    }

    // 说话方法
    void speak() {
        System.out.println("我今年" + age + "岁");
    }
}

我们这样做,也是可以的

但是我们一般也不会这样做,我们有规范

public int getAge() {
        return age;
    }

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

所以我们的完整代码应该是这样写

//公共的   类   类名
public class HelloJJAVA {
    // 公共的 静态 无返回值 main方法 数组
    public static void main(String[] str) {
        Person p = new Person();
        // p.age = 20;
        // p.setAges(20);
        p.setAge(20);
        p.speak();
    }
}

class Person {

    // 私有
    private int age;

    public int getAge() {
        return age;
    }

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

    // 说话方法
    void speak() {
        System.out.println("我今年" + age + "岁");
    }
}

输出的结果

但是你要切记,注意,私有仅仅是封装的一种表现形式;

我们之所以对外提供访问方式就是为了方便我们加入逻辑判断语句,对访问的数据进行操作,提高代码的健壮性

7.构造方法

特点

  • 函数名和类名相同
  • 不用定义返回值类型
  • 不可以写return语句

作用

  • 给对象进行初始化

注意

  • 默认构造函数的特点
  • 多个构造函数是以重载的形式存在的
//公共的   类   类名
public class HelloJJAVA {
    // 公共的 静态 无返回值 main方法 数组
    public static void main(String[] str) {
        Person p = new Person();
    }
}

class Person {

    //构造方法
    public Person() {
        System.out.println("我是构造方法");
    }

}

我们只要new了,就执行了构造方法

对象一建立就会调用与之对应的构造函数

构造函数的作用:可以用于对对象的初始化

构造函数的小细节,当一个类中没有定义构造函数时,系统默认给该类加入一个空参数构造方法

当该类定义了构造方法,那就默认的没有了,构造方法用了重载

//公共的   类   类名
public class HelloJJAVA {
    // 公共的 静态 无返回值 main方法 数组
    public static void main(String[] str) {
        Person p = new Person();
        Person p1 = new Person("我是小米");
        Person p2 = new Person("我是小王", 20);
    }
}

class Person {

    // 构造方法
    public Person() {
        System.out.println("我是构造方法");
    }

    // 构造方法
    public Person(String str) {
        System.out.println(str);
    }

    // 构造方法
    public Person(String str, int age) {
        System.out.println("我是构造方法" + age);
    }

}

就是这样,我们输出

8.构造代码块

这里提个小知识点来完结本篇幅

我们看一段代码

//公共的   类   类名
public class HelloJJAVA {
    // 公共的 静态 无返回值 main方法 数组
    public static void main(String[] str) {
        Person p = new Person();
    }
}

class Person {

    {
        System.out.println("我是构造方法");
    }

}

想知道他的运行结果是什么吗

咦,为什么方法都没有名字,就运行了,这个{}就是构造方法吗?

如果你代用多个构造方法的话你会发现他掉欧勇多次,这个现象,我们可以这样解释

构造代码块:

  • 作用就是给对象初始化
  • 而且优先于构造方法

和构造方法的区别:

  • 构造代码块是给所有对象进行统一初始化
  • 而构造函数是给对应的对象初始化

构造方法中定义的是不同对象共性的初始化内容(抽取)

OK,我们下篇继续,JAVA的思想概念性的东西需要吃透才行,所有博客就慢慢的更新

热爱Android可以加群:555974449

JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块的更多相关文章

  1. Java面向对象(概述,构造函数,类与对象的关系,this关键字,成员、局部),匿名对象的调用,构造代码块(5)

    Java面向对象(概述,构造函数,类与对象的关系,this关键字,成员.局部),匿名对象的帝爱用,构造代码块(5)

  2. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  3. Java—匿名对象/内部类/访问修饰符/代码块

    匿名对象 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. //创建一个普通对象 Person p = new Person(); //创建一个匿名对象 new Pers ...

  4. java基础8 构造函数和构造代码块

    一.构造函数 1 构造函数的作用 给对应的对象进行初始化. 2 构造函数的格式 修饰符 函数名(形式参数){ //函数名就是类名 函数体 } 举例说明: class Perosn{ private i ...

  5. java对象的方法属性和代码块的加载顺序

    1.静态变量 2.静态代码块 3.局部代码块 4.构造函数 5.普通代码块 6.静态方法 7.普通方法 8.普通属性 for example: package com.JavaTest2; publi ...

  6. java学习(一)静态代码块 构造代码块 构造方法的执行顺序及注意问题

    今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载 当时做了这么一个小案例(想必 ...

  7. Java:构造代码块,静态代码块

    本文内容: 局部代码块 构造代码块 静态代码块 补充 首发日期:2018-03-28 局部代码块: 局部代码块用于限制变量的生命周期,如果希望某些变量在某一过程之后直接失效而不希望被后面继续操作时,可 ...

  8. Java之旅_面向对象_封装

    参考并摘自:http://www.runoob.com/java/java-encapsulation.html 在面向对象的程序设计方法中,封装(英语 :Encapsulation)是指一种将函数接 ...

  9. Java 面向对象之static,final,匿名对象,内部类,包,修饰符

    01final关键字概念 A: 概述 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承, 或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这 ...

随机推荐

  1. Node.js OS 模块

    Node.js os 模块提供了一些基本的系统操作函数.我们可以通过以下方式引入该模块: var os = require("os") 方法 序号 方法 & 描述 1 os ...

  2. 2016-wing的年度总结

    大神们都爱写总结,为了早日成为大神,我也来写一波. 2016 有很多事情发生. 从日常生活来讲,生活水平得到了一定提升,从600一个月的村子搬到了800一个月的村子(/捂脸); 从就业环境来讲,许多人 ...

  3. 代理IP爬取,计算,发放自动化系统

    IoC Python端 MySQL端 PHP端 怎么使用 这学期有一门课叫<物联网与云计算>,于是我就做了一个大作业,实现的是对代理IP的爬取,计算推荐,发放给用户等任务的的自动化系统.由 ...

  4. 1.httpClient和ScrollView

    1 在服务器端使用sqllite编写数据库 常见命令是:sqlite3 tank.db 进入之后创建表: create table tscore ( id integer primary key au ...

  5. 自制 Python小工具 将markdown文件转换成Html文件

    今天看到了一个Python库,名为markdown.瞬间就给了我一个灵感,那就是制作一个将markdown文件转换成html文件的小工具. 我的实验环境 操作系统: Windows 7 64位 旗舰版 ...

  6. FFmpeg的H.264解码器源代码简单分析:环路滤波(Loop Filter)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  7. Dynamics CRM2016 New features in Microsoft Dynamics CRM Online 2015 Update 1 are now available

    很多人看过Dynamics CRM Online 2015 Update 1后,被它新的一个界面风格所吸引,还有它的很多新增功能,虽然官网放出了些补丁,但最重要的Server补丁一直没出,包括我在内很 ...

  8. UNIX网络编程——解决TCP网络传输“粘包”问题

    当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...

  9. Centos6.6上源码安装Nodejs V4版本

    本来就是想在vps上装一个Ghost博客,这个博客依赖的是Nodejs,然后推荐的是V4版本.然后我就对着官网的步骤安装,发现根本没有Centos6 i386的资源了(64位的还是有的), 我只能在那 ...

  10. 1.QT中播放视频,录音程序的编写

     1  通过process的方式播放视频 T22VideoPlayer.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gu ...