【彻底教会你如何运用类与对象】(promax版)

【彻底教会你如何运用类与对象】(promax版)

一、类与对象的意义(为什么要用类与对象)

众所周知,java是面向对象程序设计(简称oop)语言,是当今主流的程序设计范型。所以要想学习好java语言的话,我们必须得拿下这一章。

那么什么是面向对象程序设计呢?很简单,其实就是拿对应的东西做对应的事

例如:

csharp 复制代码
public class Test {
//创造Scanner对象,用于接受键盘输入的数据
//创造一个Rondom对象,用于生成一个随机1~9的值
public static void main(String[] args) {
    //通过new关键字生成一个Scanner对象,然后将他的地址值赋给sc
        Scanner sc = new Scanner(System.in);
    //通过new关键字生成一个Random对象,然后将他的地址值赋给r
        Random r = new Random();
        int a = sc.nextInt();
        int b = r.nextInt(9)+1;
        System.out.println(a);
        System.out.println(b);
    }
  }

当你看到这里或许就已经解决了你心中的疑问。接下来我们就看看什么是类与对象。

二、类与对象的概念(什么是类与对象)

类是构造对象的模版或蓝图。我们可以将类想象成制作火箭的设计图纸,将对象想象为火箭。在java中,必须要设计类才能获得对象。

如你所见,java编写的所有代码全在类当中,同时标准的java库中也提供了几千个类。但是我们自己也可以设计一个类供用户使用。

arduino 复制代码
public class 类名{
    修饰符 成员变量;
    成员方法;
    构造器;
    代码块;
    内部类;
}
arduino 复制代码
//设计了一个computer类
public class computer{
    //成员变量
     private String brand;     
     private int price;
    //成员方法
     public static void playGame(){
         
     }
}

为了能更快的入门java类与方法,在这里我们只介绍成员变量和方法。关注我 后面我会持续更新(dog)。

看到这你可能会想,这个private是什么意思

他是私有化的意思。(在main函数中不能直接调用)

作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能被访问。

arduino 复制代码
//定义一个类
public class computer{
    //成员变量
     private String brand;     
     private int price;
    //成员方法
     public static void playGame(){
         
     }
}
typescript 复制代码
public class test_4_1 {
    public static void main(String[] args) {
        Computer c = new Computer();
        //代码在这里就会报错 因为这个是在测试类中运行的 不在同一个类
        c.brand = "华为";
        c.price = 5999;
    }
}
​

注意事项

  • 对于private修饰的成员变量,如果需要被其他类使用,我们应该提供相应的操作,比如:

提供"get变量名()"方法,用于获取成员变量的值,方法用public修饰。

提供"set变量名(参数)"方法,用于设置成员变量的值,方法用public修饰。

那么为什么要用private呢?

就要提面向对象的重要特征之一 ----- 封装

2,1---封装

从形式上看,封装只不过是将数据(成员变量)和行为(方法)组合在一个包里,并对对象的使用者隐藏了数据的实现方式。

封装给对象赋予了"黑盒"的性质,这样就提高了代码的复用性和可靠性。

具体怎么封装呢?我们一起来看看。

arduino 复制代码
public class Phone {
    //成员变量
    private String brand;
    private int price;
    private String color;
    //空参的构造方法
    public Phone() {
    }
    //带全部参数的构造方法
    public Phone(String brand, int price, String color) {
        this.brand = brand;
        this.price = price;
        this.color = color;
    }
    //get方法
    public String getBrand() {
        return brand;
    }
    //set方法
    public void setBrand(String brand) {
        this.brand = brand;
    }
    //get方法
    public int getPrice() {
        return price;
    }
    //set方法
    public void setPrice(int price) {
        this.price = price;
    }
    //get方法
    public String getColor() {
        return color;
    }
    //set方法
    public void setColor(String color) {
        this.color = color;
    }
}
​

内容有点多我们慢慢看。

2.2---this关键字

概念:

方法调用者的地址值

typescript 复制代码
public class Phone {
    //成员变量
    private String brand;
    //set方法
    public void setBrand(String brand) {
        this.brand = brand;
    //get方法
    public String getBrand() {
        return brand;
    }
}
typescript 复制代码
//看这段代码时建议连同上段代码一起看 特别是看有没有返回值和有没带入参数
public class PhoneTest {
    public static void main(String[] args) {
        //使用无参构造创建了一个对象。
        Phone p = new Phone();
        //给方法传递了一个数据
        p.setBrand("xiaomi");
        //用b来接受他的返回值
        String b = p.getBrand();
        //打印b
        System.out.println(b);    
    }
}

在这个setBrand方法中我们将"xiaomi"传入,然后在类中把我们传入的brand赋给this.brand

这个this.brand其实就是p(方法调用者的地址值)对象中的brand也就是类中的成员变量。

实际上就是将局部变量的值赋值给了成员变量

注意事项

  • this作用就是区别局部变量和成员变量

2.3---构造方法

概念:

在创建类时给类里的属性进行初始化。如果没有java程序就会默认给我们带一个空参的构造方法(带默认值)。

arduino 复制代码
    //空参的构造方法
    public Phone() {
    }
    //带全部参数的构造方法
    public Phone(String brand, int price, String color) {
        //将局部变量赋值给成员变量
        this.brand = brand;
        this.price = price;
        this.color = color;
    }

注意事项

  • 方法名与类名相同,大小写也要一致。

  • 没有返回值。

  • 创造对象由虚拟机调用,不能手动调用构造方法。

  • 每创造一次对象,就会调用一次构造方法。

  • 构造方法也有重载。

    那么看到这里你应该就能看懂我上面封装的一长段代码了

    其实在Java里我们给封装某一类事物的类叫做javabean类

    例如:

    arduino 复制代码
    //这就是一个描述手机的类
    public class Phone {
        //成员变量
        private String brand;
        private int price;
        private String color;
        //空参的构造方法
        public Phone() {
        }
        //带全部参数的构造方法
        public Phone(String brand, int price, String color) {
            this.brand = brand;
            this.price = price;
            this.color = color;
        }
        //get方法
        public String getBrand() {
            return brand;
        }
        //set方法
        public void setBrand(String brand) {
            this.brand = brand;
        }
        //get方法
        public int getPrice() {
            return price;
        }
        //set方法
        public void setPrice(int price) {
            this.price = price;
        }
        //get方法
        public String getColor() {
            return color;
        }
        //set方法
        public void setColor(String color) {
            this.color = color;
        }
    }
    ​

    注意事项

    • 里面所有的成员变量需私有化。
    • 有空参和带全部参数的构造方法。
    • 每一个变量提供set和get方法

三、类与对象的使用方法(怎么利用类与对象)

例如:

csharp 复制代码
public class PhoneTest {
    public static void main(String[] args) {
        //创造手机的对象
        Phone p = new Phone();
        //设置手机品牌
        p.setBrand("iphone");
        //设置手机颜色
        p.setColor("远峰蓝");
        //设置手机价格
        p.setPrice(19999);
        System.out.println("手机信息:");
        System.out.println("品牌为  "+p.getBrand());
        System.out.println("颜色为  "+p.getColor());
        System.out.println("价格为  "+p.getPrice());
    }
}
​

该代码为手机的一个测试类。即给手机对象的成员变量赋值并把他们打印出来。

一般在项目开发中,我们一般把测试类和javabean类分开,一个类只干一件事。

将这段代码和上段代码能够全部写出,那就说明你已经掌握了类与对象的全部知识了。

这一篇博客到此为止,我们下篇再见。

相关推荐
爱笑的眼睛1110 分钟前
超越剪枝与量化:下一代AI模型压缩工具的技术演进与实践
java·人工智能·python·ai
阿里云云原生16 分钟前
Android App 崩溃排查指南:阿里云 RUM 如何让你快速从告警到定位根因?
android·java
历程里程碑18 分钟前
C++ 9 stack_queue:数据结构的核心奥秘
java·开发语言·数据结构·c++·windows·笔记·算法
醇氧33 分钟前
【Windows】从守护到终结:解析一个 Java 服务的优雅停止脚本
java·开发语言·windows
努力发光的程序员33 分钟前
互联网大厂Java求职面试实录
java·jvm·线程池·多线程·hashmap·juc·arraylist
小鹿学程序37 分钟前
FileZilla连接到虚拟机
java·服务器·开发语言
Haooog44 分钟前
Docker面试题(不定时更新)
java·docker·面试
feathered-feathered1 小时前
Redis基础知识+RDB+AOF(面试)
java·数据库·redis·分布式·后端·中间件·面试
毕设源码-赖学姐1 小时前
【开题答辩全过程】以 高校排课系统的优化设计与实现为例,包含答辩的问题和答案
java·eclipse
q_19132846951 小时前
基于SpringBoot2+Vue2的行业知识答题考试系统
java·vue.js·spring boot·mysql·毕业设计·计算机毕业设计·演示文稿