资讯专栏INFORMATION COLUMN

Java编程基础07——面向对象_类&private&this

Leck1e / 2558人阅读

摘要:面向对象思想概述了解面向对象开发就是不断的创建对象,使用对象,指挥对象做事情。面向对象设计其实就是在管理和维护对象之间的关系。建议文件名称和测试类名称一致。

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("打游戏");
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76921.html

相关文章

  • Java编程基础11——面向对象_包&amp;权限修饰符&amp;匿名内部

    摘要:外部类要访问内部类的成员,必须创建对象。前提存在一个类或者接口这里的类可以是具体类也可以是抽象类。 1.package关键字的概述及作用(了解) A:为什么要有包 将字节码(.class)进行分类存放 包其实就是文件夹 B:包的概述 举例: 学生:增加,删除,修改,查询 老师:增加,删除,修改,查询 ... 方案1:按照功能分 com.heima.add ...

    Bryan 评论0 收藏0
  • Java编程基础09——面向对象_代码块&amp;继承&amp;方法&amp;final

    摘要:每次调用构造都执行,并且在构造方法前执行静态代码块在类中方法外出现,并加上修饰用于给类进行初始化,随着类加载而加载,一般用来给类进行初始化,在加载的时候就执行,并且只执行一次。的构造方法这是一条隐藏语句,用来访问父类中的空参构造。 1.代码块的概述和分类(了解)(实际不用) A:代码块概述 在Java中,使用{}括起来的代码被称为代码块。 B:代码块分类 根据其位置和声明的不同...

    LeviDing 评论0 收藏0
  • Java编程基础10——面向对象_多态&amp;抽象&amp;接口

    摘要:案例演示抽象类的成员特点抽象类的成员方法特性抽象方法强制要求子类做的事情。抽象类中定义的是该继承体系的共性功能。 1.多态的概述及其成员访问特点代码体现 A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提- 1.要有继承关系 2.要有方法重写 3.要有父类引用指向子类对象。 C:多态中的成员访问特点之 成员变量:编译和运行都看父类。 成员方法:编...

    dunizb 评论0 收藏0
  • Java编程基础08——面向对象_构造方法&amp;静态static

    摘要:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。概念方便在没有创建对象的情况下来进行调用方法变量。因为它的成员全部是静态的所以私有了构造方法获取随机数的方法返回带正号的值,该值大于等于 1.构造方法Constructor概述和格式(掌握) A:构造方法概述和作用 给对象的数据(属性)进行初始化 B:构造方法格式特点 a:方法名与类名相同(大小写也要与类名一致) b:...

    张巨伟 评论0 收藏0
  • JavaScript进阶之函数和对象知识点详解

      在过往学习的JavaScript都是在基础,现在为大家介绍更为深入的JavaScript知识。  JavaScript函数  JavaScript函数和Java函数是有一部分相似的,所以学习起来也会相对简单  基本构造  1.直接构造  //function代表函数标志,name为函数名称,参数可有可无   functionname(参数){   //...   return;   }  2....

    3403771864 评论0 收藏0

发表评论

0条评论

Leck1e

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<