博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java编程基础07——面向对象_类&private&this
阅读量:6909 次
发布时间:2019-06-27

本文共 7819 字,大约阅读时间需要 26 分钟。

1.面向对象思想概述(了解)

  • A:面向对象开发就是不断的创建对象,使用对象,指挥对象做事情。
  • B:面向对象设计其实就是在管理和维护对象之间的关系。
  • C:面向对象特征封装(encapsulation)、继承(inheritance)、多态(polymorphism)
类是对某一类事物共性的抽象概念,而对象描述的是一个具体的产物。
每一个属性的集合就构成了一个对象,但是所有的属性都应该是群体的定义,而群体的定义就形成了一个类。
类是一个模板,而对象才是类可以使用的实例。
  • 在类之中一般会有两个组成:

成员属性:(Field)有时候会简化成其为属性比如——年龄,姓名,性别

操作方法:(Method)定义对象具有的处理行为比如——唱歌、跳舞、游泳、运动

2.类的定义

  • A:我们学习编程是为了什么

    • 为了把我们日常生活中实物用学习语言描述出来
  • B:我们如何描述现实世界事物

    • 属性 就是该事物的描述信息(事物身上的名词)
    • 行为 就是该事物能够做什么(事物身上的动词)
  • C:Java中最基本的单位是类,Java中用class描述事物也是如此

    • 成员变量 就是事物的属性
    • 成员方法 就是事物的行为
  • D:定义类其实就是定义类的成员(成员变量和成员方法)

    • a:成员变量 和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。
    • b:成员方法 和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。

学生类的使用(掌握)

  • A:文件名问题

    • 在一个java文件中写两个类:一个基本的类,一个测试类。
    • 建议:文件名称和测试类名称一致。
  • B:如何使用对象?

    • 创建对象并使用
    • 格式:类名 对象名 = new 类名();
    • 对象名,其实就是合法的标识符:如果是一个单词,所有字母小写;如果多个单词,从第二个单词开始首字母大写
  • C:如何使用成员变量呢?

    • 对象名.变量名
  • D:如何使用成员方法呢?

    • 对象名.方法名(...)

3.学生类案例演示

* 属性:姓名,年龄,性别* 行为:学习,睡觉class JavaObject {    public static void main(String [] args) {        //类名 对象名 = new 类名();        Student s = new Student();        //调用属性并赋值        s.name = "张三";        s.age = 23;        s.gender = "男";        System.out.println(s.name + "..." + s.age + "..." + s.gender);   //使用变量        //调用方法        s.study();        s.sleep();    }}class Student {    String name;        //姓名    int age;            //年龄属性    String gender;        //性别属性    public void study() {   //定义学习的方法;        System.out.println("学生学习");    }    public void sleep() {        System.out.println("学生睡觉");    }}

4.一个对象的内存图

* 车* 成员变量:颜色,轮胎数* 成员方法:跑    class JavaObject {        public static void main(String [] args) {            Car c = new Car();  //创建对象            c.color = "red";//调用属性并赋值            c.num = 4;            c.run();//调用方法            Car c2 = new Car();            c2.color = "black";            c2.num = 3 ;            c2.run();            c2 = null;  //当引用设置为null,空指针异常。            c2.run();            Car c3 = c2;            c2.run();        }    }    class Car {        String color;        //颜色        int num;            //轮胎数        public void run() {             System.out.println("color" + num);        }    }

对象内存图

5.成员变量和局部变量的区别Person(掌握)

  • A:在类中的位置不同

    • 成员变量:在类中方法外
    • 局部变量:在方法定义中或者方法声明上
  • B:在内存中的位置不同

    • 成员变量:在堆内存(成员变量属于对象,对象进堆内存)
    • 局部变量:在栈内存(局部变量属于方法,方法进栈内存)
  • C:生命周期不同

    • 成员变量:随着对象的创建而存在,随着对象的消失而消失
    • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
  • D:初始化值不同

    • 成员变量:有默认初始化值(null或0)
    • 局部变量:没有默认初始化值;使用前必须定义,赋值,然后才能使用。
  • 注意事项:

    • 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则(why可以同名?)。
    • 基本数据类型变量包括哪些:byte,short,int,long,float,double,boolean,char
    • 引用数据类型变量包括哪些:数组,类,接口,枚举
class JavaObject {    public static void main(String [] args) {        Person p = new Person();        p.speak();    }}class Person {    String name;                //成员变量    int num;    public void speak() {  //x和num都是局部变量        int num = 10;        System.out.println(num);            System.out.println(name);  //就近原则    }}

6.方法的形式参数是类名的时候如何调用(掌握)

  • A:方法的参数是类名public void print(Student s){}//print(new Student());

    • 如果你看到了一个方法的形式参数是一个类(引用数据类型),这里其实需要的是该类的对象(new地址值)。
    • (~ 记住: 引用数据类型当做形式参数的时候给的是地址值;二基本数据类型当做形参的时候给的是值)
class JavaObject {    public static void main(String [] args) {        print(10);   //赋值        Student s = new Student();  //创建对象        print(s);    }    public static void print(int x) {  //形式参数是基本数据类型,传递的值        System.out.println(x);    }    //形式参数是引用数据类型,传递的地址值    public static void print(Student stu) {  //Student stu = new Student();        stu.name = "张三";        stu.age = 23;        stu.speak();    }}class Student {    String name;                //成员变量    int age;    public void speak() {  //局部变量        System.out.println(name + "..." + age);                }}

7.匿名对象的概述和应用Car(掌握)

  • 没有名字的对象叫做匿名对象;
  • 只适合调用一次的时候。优点是节省代码,调用完毕就是垃圾,可以被垃圾回收器回收。
  • a:调用方法

    class JavaObject {    public static void main(String [] args) {        //Car c1 = new Car();  //创建有名字的对象        //c1.run();        //new Car().run();   //匿名对象调用完就变成垃圾了        //new Car().run();   //匿名对象只适合对方法的一次调用,因为调用多次就会产生多个对象,不如用有名字对象,否则浪费内存        //匿名对象可以调用属性,但是没有意义,因为调用后就变成垃圾,如果需要赋值还是用有名字对象        new Car().color = "red";        new Car().num = 23;        new Car().run();        }}class Car {    String color;    int num;    public void run() {        System.out.println(color + "..." + num);    }}
  • b:匿名对象可以作为实际参数传递

    class JavaObject {    public static void main(String [] args) {        /*Car c1 = new Car();  //创建有名字的对象        c1.color = "red";        c1.num = 8;        c1.run();*/        //Car c1 = new Car();        //method(c1);        //method(new Car());        //Car c2 = new Car();        //method(c2);        //method(new Car());        for (int i = 0;i < 10 ;i ++ ) {            method(new Car());        }    }    //抽取方法,提高代码的复用性 protected  default    public static void method(Car cc) { //Car cc = new Car();        cc.color = "red";        cc.num = 8;        cc.run();    }}

8.封装的概述(掌握)

  • A:封装概述

    • 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
  • B:封装好处

    • 隐藏实现细节,提供公共的访问方式
    • 提高了代码的复用性
    • 提高安全性。
  • C:封装原则

    • 将不需要对外提供的内容都隐藏起来。
    • 把属性隐藏,提供公共方法对其访问。

9.private关键字的概述和特点(掌握) public protected default

  • A:人类赋值年龄的问题
  • B:private关键字特点

    • a:是一个权限修饰符
    • b:可以修饰成员变量和成员方法
    • c:被其修饰的成员只能在本类中被访问
  • C:案例演示

    • 封装和private的应用:
    • A:把成员变量用private修饰
    • B:提供对应的getXxx()和setXxx()方法
    • private仅仅是封装的一种体现形式,不能说封装就是私有(讲包时会有更好的理解)
public class JavaObject {    public static void main(String [] args) {        System.out.println("");            Person p1 = new Person();            p1.name = "张三";            //p1.age = 23;            //p1.speak();            p1.setAge(-17);            //int age1 = p1.getAge();            System.out.println(p1.getAge());    }}class Person {    String name;    private int age;         //私有成员变量    public void setAge(int a) {  //a = 17 //对外提供公共的访问方法        if (a > 18 && a<120) {            age = a;        } else {            System.out.println("输入有误");        }    }    public int getAge() {  //对外提供公共的访问方法        return age;    }    public void speak() {        System.out.println(name + "..." + age);    }}

10.this关键字的概述和应用(掌握)

  • A:this关键字特点

    • 代表当前对象的引用 (谁来调用我,我就代表谁)
  • B:案例演示

    • this的应用场景
    • 用来区分成员变量和局部变量重名,调用成员变量
public class JavaObject {    public static void main(String [] args) {        System.out.println("");            Person p1 = new Person();            p1.setName("张三");            p1.setAge(23);            System.out.println(p1.getName() + "..." + p1.getAge());            Person p2 = new Person();            p2.setName("李四");            p2.setAge(32);            p2.speak();    }}class Person {    private String name;    private int age;    public void setName(String name) {        this.name = name;//在这里this代表p1的地址值    }    public String getName() {        return name;    }    public void setAge(int age) {  //a = 17        if (age > 18 && age<120) {            this.age = age;        } else {            System.out.println("输入有误");        }    }    public int getAge() {        return age;    }    public void speak() {        System.out.println(name + "..." + age);    }}

11.手机类代码及其测试(掌握)

  • 把手机类写成一个标准类,然后创建对象测试功能。
  • 手机类

    • 属性:品牌brand,价格price
    • 行为:打电话call,发短信sendMessage,玩游戏playGame
    • 成员方法对应的getXxx()和setXxx()方法
public class JavaObject {    //创建对象phone      public static void main(String [] args) {        Phone p1 = new Phone();  //01,主方法声明p1,堆内存创建实体        p1.setBrand("Apple");    //03进栈内存 赋值brand        p1.setPrice(5288);  //05price        System.out.println(p1.getBrand() + "..." + p1.getPrice());//09    }}class Phone {    private String brand;     //品牌   02null    private int price;        //价格    0    public void setBrand(String brand) {   //设置品牌04赋值        this.brand = brand;    }    public String getBrand() {     //获取品牌07        return brand;    }    public void setPrice(int price) {        //设置价格 06        this.price = price;    }    public int getPrice() {            //获取价格08        return price;    }    public void call() {        System.out.println("打电话");    }    public void sendMessage() {    System.out.println("发信息");    }    public void palyGame() {    System.out.println("打游戏");    }}

转载地址:http://lqfcl.baihongyu.com/

你可能感兴趣的文章
执行:gpg --gen-key 显示:Not enough random bytes available.
查看>>
windows server 2008 安装 Exchange 2010
查看>>
Microsoft Dynamics CRM 2015 数据管理 之 重复检测 功能
查看>>
Redis 的 5 个常见使用场景
查看>>
Memcache压力测试工具 -- memslap使用说明
查看>>
zabbix Queue队列
查看>>
my-innodb-heavy-4G.cnf配置文件注解
查看>>
对IT人员如何提升自身英语能力的几点建议
查看>>
Sencha应用程序的UI测试
查看>>
数据共享 难也不难
查看>>
Exchange 2013部署系列之(三)分角色部署
查看>>
360败诉:从先例到下一例
查看>>
财务自由之路——为什么选择淘宝(上)
查看>>
如何雇人的十五条建议
查看>>
2011年以来发表文章一览表
查看>>
靠外援打call的搜狗,AI会是未来吗?
查看>>
.NET性能分析最佳实践之:如何找出使用过多内存的.NET代码(基础篇)
查看>>
活字格 Web 应用生成平台 V4.0 发布,首次公开插件机制
查看>>
Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(7)...
查看>>
华为RH5885H v3服务器RAID设置及问题解析
查看>>