当前位置:首页学习笔记Java笔记2.8 面向对象

2.8 面向对象

一.面向对象介绍

面向:拿,找
对象:能干活的东西
面向对象编程:拿东西过来做对应的事情
 
例:当我们需要生成随机数的时候,我们就要拿Random来帮我们生成;当我们需要输出打印语句时,我们就要拿System.out.println()来帮我们输出打印
好比在生活中,我们洗衣服的时候要拿洗衣机来帮我们,扫地的时候可以拿扫地机器人帮我们扫地
注:面向对象更符合人类思维习惯,让编程更简单,更好理解

 

面向对象的学习重点是什么?

1. 学习获取已有对象并使用
2. 学习如何自己设计对象并使用
 

二.设计对象并使用

1.类和对象:

类(设计图): 是对象共同特征的描述
对象:是真实存在的具体东西
 
注:在Java中,必须先设计类,才能获得对象
 

2.如何定义类

public class 类名 {
      成员变量 (代表属性,一般是名词)
      成员方法 (代表行为,一般是动词)
      构造器 (后面学习)
      代码块 (后面学习)
      内部类 (后面学习)
}
 
注:
成员变量一般指的是东西的属性,例如手机的品牌,型号,价格
成员方法一般指的是东西的行为,表示这个东西能干嘛.例如手机可以打电话,玩游戏

例:

public class phone {
     //属性 (成员变量)
     //手机品牌
     String brand;
     //手机价格
     double price;


    //行为 (成员方法)
    //打电话
    public void call() {

    }
    //玩游戏
    public void playGame() {

    }
}
 

3.如何得到类的对象

类名 对象名 = new 类名 ();
例: phone p = new phone();
 

4.如何使用对象

访问属性: 对象名.成员变量
访问方法: 对象名.方法名(…)

代码演示:

 
public class phone {  
    //属性 (成员变量)  
    //手机品牌  
    String brand;  
    //手机价格  
    double price;  
  
    //行为 (成员方法)  
    //打电话  
    public void call() {  
        System.out.println("手机在打电话");  
    }  
    //玩游戏  
    public void playGame() {  
        System.out.println("手机在玩游戏");  
    }  
}
public class IT梦 {  
    public static void main(String[] args) {  
        //创建手机的对象  
        phone p = new phone();  
        
        //给手机赋值  
        p.brand = "小米";  
        p.price = 4999;  
        
        //获取手机对象中的值  
        System.out.println(p.brand);  
        System.out.println(p.price);  
        
        //调用手机中的方法  
        p.call();  
        p.playGame();  
    }  
}

2.8 面向对象

 

5.类的补充注意事项

1. 用来描述一类事物的类,专业叫做javabean类
在javabean类中,是不写main方法的
 
2. 编写main方法的类,叫做测试类
我们可以在测试类中创建Javabean类的对象并进行赋值调用
 
 3.类名首字母建议大写,需要见名知意,驼峰模式
 
 4.一个java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名(实际开发中建议还是一个文件定义一个class类)
 
 5.成员变量的完整定义格式: 修饰符 数据类型 变量名 = 初始化值;(一般无需指定初始化值,存在默认值)
 

对象的成员变量的默认值规则

2.8 面向对象

 

小练习:

编写一个女朋友类,创建女朋友类的对象,给女朋友的属性赋值并调用女朋友类中的方法

答案:

public class GirlFriend {  
    String name;  
    int age;  
    String gender;  
    public void sleep(){  
        System.out.println("女朋友在睡觉");  
    }  
    public void eat(){  
        System.out.println("女朋友在吃饭");  
    }  
}
public class IT梦 {  
    public static void main(String[] args) {  
        GirlFriend g = new GirlFriend();  
        g.name = "小美";  
		g.age = 18;  
		g.gender = "女";  
		System.out.println(g.name);  
		System.out.println(g.age);  
		System.out.println(g.gender);  
		g.eat();  
		g.sleep();  
	}  
}

2.8 面向对象

 

6.封装

告诉我们,如何正确设计对象的属性和方法
 
对象代表什么,就得封装对应的数据,并提供数据对应的行为
 
例:人关门,我们需要定义两个类,一个人类,一个门类,那么关门这个动作的方法应该写在门类里面,而不是人类里面,这就是封装思想
 
 

private关键字(代表私有)

是一个权限修饰符
可以修饰成员(成员变量和成员方法)
被private修饰的成员只能在本类中才能访问
 

针对每一个私有化成员变量,如果需要被其他类调用,都要提供对应的set和get方法

set方法:给成员变量赋值
get方法:对外提供成员变量的值

代码演示:

public class GirlFriend {  
    private String name;  
    private int age;  
    private String gender;  
  
    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 setGender(String g){  
        gender = g;  
    }  
    public String getGender() {  
         return gender;  
    }  
}
public class IT梦 {  
    public static void main(String[] args) {  
         GirlFriend g = new GirlFriend();  
         g.setName("宝贝");  
         g.setAge(18);  
         g.setGender("女");  
         System.out.println(g.getName());  
         System.out.println(g.getAge());  
         System.out.println(g.getGender());  
    }  
}

2.8 面向对象

 

成员变量和局部变量

局部变量:定义在方法里面的变量叫局部变量
成员变量:定义在方法外,类的里面的变量叫成员变量
 

就近原则:

谁离我近,我就用谁(当局部变量和成员变量重名时,就遵守就近原则)

例:

 
public class GirlFriend {  

    //成员变量  

    private int age;  

    public void test(){  

          //局部变量  

          int age = 10;  

          System.out.println(age);  

    }  

}
public class IT梦 {  
      public static void main(String[] args) {  
            GirlFriend g = new GirlFriend();  
            g.test();  
      }  
}

2.8 面向对象

 

this关键字作用:

可以用来区别成员变量和局部变量
 
解释:加了this关键字前缀的变量不会遵守就近原则,而是直接使用成员变量
 
格式:this.变量名
 
当成员变量和局部变量重名时,我们可以使用this关键字来区分成员变量和局部变量

例:

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(){  
             this.name = name;  
     }  
     public String getName(){  
             return name;  
     }  
     public void setAge(){  
             this.age = age;  
     }  
     public int getAge(){  
            return age;  
     }  
}
public class IT梦 {  
     public static void main(String[] args) {  
           Student s = new Student("IT梦",18);  
           System.out.println(s.getName());  
           System.out.println(s.getAge());  
      }  
}

2.8 面向对象

 

构造方法:

构造方法也叫做构造器,构造函数
无参数构造方法:在初始化对象时,成员变量的数据均采用默认值
有参数构造方法:在初始化对象时,同时可以为对象进行赋值
作用:在创建对象的时候给成员变量进行初始化(赋值)的
 

格式:

public class Student {
       修饰符 类名(参数){
               方法体;
        }
}

特点:

1. 方法名和类名相同,大小写也要一致
2. 没有返回值类型,连void都没有
3. 没有具体的返回值(不能写return带回结果数据)

执行时机:

1. 创建对象的时候由虚拟机调用,不能手动调用构造方法
2. 没创建一次对象,就会调用一次构造方法

例:

 
public class Student {  
      private String name;  
      private int age;  
      public Student(){  
            //空参构造  
      }  
      public Student(String name , int age){  
             //带全部参数的构造方法  
      }  
}
 

构造方法注意事项:

1. 任何类定义出来,默认就自带了无参数构造方法,写不写都有
2. 一旦定义了有参数构造方法,无参数构造方法就没有了,此时就需要自己写无参数构造方法
3. 建议在任何时候都手动书写上空参和带全部参数的构造方法
 

标准的JavaBean类

1. 类名需要见名知意
2. 成员变量使用private修饰
3. 提供至少两个构造方法(无参构造方法和带全部参数的构造方法)
4. 成员方法(提供每一个成员变量对应的set和get方法)
 

代码演示:

 
//标准javabean  
public class Student {  
        //成员变量  
        private String name;  
        private int age;  


         //空参构造方法  
        public Student(){}  


        //带全部参数的构造方法  
        public Student(String name , int age){  
               this.name = name;  
               this.age = age;  
        }  


         //每一个成员变量对应的set和get方法  
          public void setName(){  
                this.name = name;  
          }  
          public String getName(){  
                return name;  
          }  
          public void setAge(){  
               this.age = age;  
          }  
          public int getAge(){  
               return age;  
          }  
}
 

拓展:

一个对象的内存图:

2.8 面向对象

 

两个对象的内存图:

2.8 面向对象

 

两个引用指向同一个对象的内存图:

2.8 面向对象

 

从内存的角度解释基本数据类型和引用数据类型:

基本数据类型:数据值是存储在自己的空间中
特点:赋值给其他变量时,赋的是真实的值
 
引用数据类型:数据值是存储在其他空间中,自己空间中存储的是地址值
特点:赋值给其他变量时,赋的是地址值
 

this关键字的内存原理:

2.8 面向对象

重点:

this的本质:代表所在方法调用的地址值
 

成员变量和局部变量的区别(不需要记,了解一下即可):

2.8 面向对象

温馨提示:

文章标题:2.8 面向对象

文章链接:https://www.cutrui.cn/2737.html

更新时间:2023年08月02日

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
Java笔记学习笔记

2.7 二维数组

2023-6-26 21:11:49

Java笔记学习笔记

2.9 综合练习

2023-7-8 12:55:31

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索

你有新的私信

请务必要查看您的私信哟~~