zoukankan      html  css  js  c++  java
  • Java学习笔记(十三) 面向对象基础

    一、类和对象

    1.1 什么是对象

    万物皆对象,客观存在的事物皆为对象

    1.2 什么是面向对象

    1.3 什么是类

    类就是对现实生活中一类具有共同属性行为的事物的抽象

    类的特点:

    • 类是对象的数据类型
    • 类是具有相同属性和行为的一组对象的集合

    1.4 什么是对象的属性

    属性:对象具有的各种特征,每个对象的每个属性都拥有特定的

     1.5 什么是对象的行为

    行为:对象能够执行的操作

     1.6 类和对象的关系

       :类是对现实生活中一类具有共同属性和行为的事物的抽象

    对象:是能够看得到摸得着的真实存在的实体

     1.7 类的定义

    类的重要性:是Java程序的基本组成单位

    类是什么:是对现实生活中一类具有共同属性行为的事物的抽象,确定对象将会拥有的属性和行为

    类的组成:属性行为

    • 属性:在类中通过成员变量来体现(类中方法外的变量)
    • 行为:在类中通过成员方法来提现(和前面的方法相比去掉static关键字即可)

    类的定义步骤

    1. 定义类
    2. 编写类的成员变量
    3. 编写类的成员方法
    /*
        类的定义
    
        类的定义步骤:
            编写类的成员变量
            编写类的成员方法
    
        手机类:
            类型:
            手机(Phone)
    
            成员变量:
            品牌(brand)
            价格(price)
    
            成员方法:
            打电话(call)
            发短信(sendMessage)
     */
    public class Phone {
        //成员变量
        String brand;
        int price;
    
        //成员方法
        public void call(){
            System.out.println("打电话");
        }
    
        public void sendMessage(){
            System.out.println("发短信");
        }
    }

    1.8 对象的使用

    创建对象:

    • 格式:类名 对象名 = new 类型();
    • 范例:Phone p = new Phone();

    使用对象:

    1. 使用成员变量

    • 格式:对象名.变量名
    • 范例:p.brand

    2.使用成员方法

    • 格式:对象名.方法名()
    • 范例:p.call()
    /*
        创建对象
            格式:类名 对象名 = new 类名();
            范例:Phone p = new Phone();
            
        使用对象:
            1.使用成员变量
                格式:对象名.变量名
                范例:p.brand
            2.使用成员方法
                格式:对象名.方法名()
                范例:p.call()    
     */
    public class PhoneDemo {
        public static void main(String[] args) {
            //创建对象
            Phone p = new Phone();
    
            //使用成员变量
            System.out.println(p.brand);    //null
            System.out.println(p.price);    //0
    
            p.brand = "小米";
            p.price = 2999;
    
            System.out.println(p.brand);    //小米
            System.out.println(p.price);    //2999
    
            //使用成员方法
            p.call();           //打电话
            p.sendMessage();    //发短信
        }
    }

    案例:学生

    package com.demo;
    /*
        学生类
            需求:首先定义一个学生类,然后定义一个学生测试类,在学生测试类中通过对象完成成员变量和成员方法的使用
     */
    public class Student {
        //成员变量
        String name;
        int age;
    
        //成员方法
        public void study(){
            System.out.println("好好学习,天天向上");
        }
        public void doHomework(){
            System.out.println("键盘敲烂,月薪过万");
        }
    }
    /*
        学生测试类
     */
    public class StudentDemo {
        public static void main(String[] args) {
            //创建对象
            Student s = new Student();
    
            System.out.println(s); //输出:内存地址
            //使用对象
            System.out.println(s.name+","+s.age);//输出:null,0
    
            s.name="aaron";
            s.age=30;
    
            System.out.println(s.name+","+s.age);//输出:aaron,30
    
            s.study();
            s.doHomework();
        }
    }

    二、对象内存图

    2.1 对象内存图(单个对象)

     2.2 对象内存图(多个对象)

     2.3 对象内存图(多个对象指向相同)

     三、成员变量和局部变量

    3.1 什么是成员变量和局部变量

    成员变量:类中方法外的变量

    局部变量:方法中的变量

     3.2 成员变量和局部变量的区别

     

     四、封装

    4.1 private关键字

    •  是一个权限修饰符
    • 可以修饰成员(成员变量和成员方法)
    • 作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问

    针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作

    • 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
    • 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰

    4.2 private关键字的使用

    一个标准类的编写:

    • 把成员变量用private修饰
    • 提供对应的getXxx()/setXxx()方法
    /*
        学生类
     */
    public class Student {
        //成员变量
        private String name;
        private int age;
    
        //get/set方法
        public void setName(String n) {
            name = n;
        }
    
        public String getName() {
            return name;
        }
    
        public void setAge(int a) {
            age = a;
        }
    
        public int getAge() {
            return age;
        }
    
        //成员方法
        public void show() {
            System.out.println(name + "," + age);
        }
    }
    /*
        学生测试类
     */
    public class StudentDemo {
        public static void main(String[] args) {
            //创建对象
            Student s = new Student();
    
            //使用set方法给成员变量赋值
            s.setName("aaron");
            s.setAge(30);
    
            s.show(); //aaron,30
    
            //使用get方法获取成员变量的值
            System.out.println(s.getName()+"---"+s.getAge()); //aaron---30
        }
    }

    4.3 this关键字

    1. his修饰的变量用于指代成员变量
      • 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
      • 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
    2. 什么时候使用this呢?解决局部变量隐藏成员变量
    3. this:代表所在类的对象引用
      • 记住:方法被哪个对象调用,this就代表哪个对象

     4.4 封装

    1. 封装概述
      是面向对象三大特征之一(封装/继承/多态
      是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的
    2. 封装原则
      将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
      成员变量private,提供对应的getXxx()/setXxx()方法
    3. 封装好处
      通过方法来控制成员变量的操作,提高了代码的安全性
      把代码用方法进行封装,提高了代码的复用性

    五、构造方法

    5.1 构造方法概述

    构造方法是一种特殊的方法
    作用:创建对象
    格式:
    public class 类名{
      修饰符 类名(参数){
      }
    }

     5.2 构造方法的注意事项

    1. 构造方法的创建
      • 如果没有定义构造方法,系统将输出一个默认无参数构造方法
      • 如果定义了构造方法,系统将不再提供默认的构造方法
    2. 构造方法的重载
      • 如果自定义了带参数构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法
    3. 推荐的使用方式
      • 无论是否使用,都手工书写无参数构造方法

    5.3 标准类制作

    1. 成员变量
      • 使用private修饰
    2. 构造方法
      • 提供一个无参构造方法
      • 提供一个带多个参数的构造方法
    3. 成员方法
      • 提供每一个成员变量对应的setXxx()/getXxx()
      • 提供一个显示对象信息的show()
    4. 创建对象并为成员变量赋值的两种方式
      • 无参构造方法创建对象后使用setXxx()构造
      • 使用带参构造方法直接创建带有属性值得对象
    /*
        成员变量
            使用private修饰
    
        构造方法
            提供一个无参构造方法
            提供一个带多个参数的构造方法
    
        成员方法
            提供每一个成员变量对应的setXxx()/getXxx()
            提供一个现实对象信息的show()
    */
    public class Student{
        //成员变量
        private String name;
        private int age;
    
        //构造方法
        public Student(){
    
        }
    
        public Student(String name,int age){
            this.name = name;
            this.age = age;
        }
    
        //成员方法
        public void setName(String name){
            this.name = name;
        }
        public String getName(){
            return name;
        }
        public void setAge(int age){
            this.age = age;
        }
        public int getAge(){
            return age;
        }
    
        public void show(){
            System.out.println(name+","+age);
        }
    }
    /*
        创建对象并为其成员变量赋值的两种方法
            1.无参构造方法穿件对象后使用setXxx()赋值
            2.使用带参构造方法直接创建带有属性的对象
    */
    public class StudentDemo{
        //无参构造方法穿件对象后使用setXxx()赋值
        Student s1 = new Student();
        s1.setName("aaron");
        s1.setAge(30);
        s1.show();
    
        //使用带参构造方法直接创建带有属性的对象
        Student s2 = new Student("aaron", 30);
        s2.show();
    }
  • 相关阅读:
    Mysql 关于 FOUND_ROWS() 和 ROW_COUNT() 函数
    MySQL数据库远程连接
    MySQL数据库远程连接
    Linux 下不得不说的那些快捷键
    Linux 下不得不说的那些快捷键
    linux实时查看更新日志命令
    linux实时查看更新日志命令
    the current differences between MyISAM and InnoDB storage engines
    Difference Between InnoDb and MyISAM(个人觉着是好文章,简单易懂,推荐看)
    MyISAM to InnoDB: Why and How(MYSQL官方译文)
  • 原文地址:https://www.cnblogs.com/lyan/p/14075021.html
Copyright © 2011-2022 走看看