Java面向对象01——类与对象

这篇具有很好参考价值的文章主要介绍了Java面向对象01——类与对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是白夜,今天和大家聊聊类与对象

一、初识面向对象(了解)

1.1、面向过程和面向对象

面向过程编程

C 语言就是面向过程编程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。

面向对象编程

JAVA 是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

举个例子,比如洗衣服

面向过程:1.拿桶 2.把衣服放桶里 3.接水 4.放洗衣服 5.搓 6.再接水 7.把衣服拧干 8.晒衣服

面向对象:1.把衣服和洗衣粉放进洗衣机 2.打开洗衣机 3.把衣服拿出来晾干

在这里洗衣机就是一个对象,所以只要操作洗衣机所具备的功能,都要定义在对象中。

1.2、面向过程和面向对象的区别

面向过程:注重的是过程,在整个过程中所涉及的行为,就是功能。

面向对象:注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来

二、类与对象

什么是类?

​ 类是具备某些共同特征的实体的集合,是对所具有相同特征实体的抽象, 例如人类、车类、星球类,动物类, 猪类等

什么是对象?

对象是类的实例,简单的认为对象就是类中具体的个体。

用一个例子给你说明一下他们的关系:

比如“人类”就是一个类,那么具体的某个人“张三”就是“人类”这个类的对象,而“名字、年龄”等信息就是对象的属性,人的动作比如“吃饭、穿衣”等就是对象的方法

2.1、类的定义

语法:

class People{
    //成员变量/字段/属性
    //修饰符/数据类型/变量名
    public String name ;
    public String sex;
    public int age;

    //成员方法/行为
    public void show(){
        System.out.println("姓名:"+name+"性别:"+sex+"年龄:"+age);
    }
}

要求:

  1. 类名,大驼峰,见名知意,不能以jdk中存在的类命名
  2. 成员变量名和方法名,小驼峰,见名知意
  3. 在类名、方法名、成员变量名上面写文档注释

2.2、类的实例化

用类类型创建对象的过程,称为类的实例化

我们已经知道通过class关键字来定义一个类了,而我们知道类只是相当于一个模板,所以我们要通过类来实例化对象,由类产生对象的过程叫做 实例化一个对象。

2.2.1、语法

class People{//类名大驼峰
    //成员变量/字段/属性
    public String name ;
    public String sex;
    public int age;

    //成员方法/行为
    public void show(){
        System.out.println("姓名:"+name+"性别:"+sex+"年龄:"+age);
    }
}
 
public class Test {
    public static void main(String[] args) {
        //我们通过 new 关键字来实例化一个对象
        People p1 = new People();
        //通过 new 关键字我们是可以实例化多个对象的
        People p2 = new People();
        People p3 = new People();
    }
}

Java面向对象01——类与对象

2.2.2、类在内存中的分析

每创建一个对象就会在内存中开辟一片空间,在栈上会开辟一个引用地址,会指向堆上的对象

p1 和p2 这些变量都是局部变量它们(对象)属于引用

注意:类里面的方法并不是是存在堆区的 ,方法本身是不占内存的,方法是存在方法区里的方法表中,在每个对象 new 好之后前面有几个字节存的就是方法表的地址,只有在调用这个方法时,会通过方法表的地址找到这个这个方法,然后在栈上为这个方法开辟栈帧。

Java面向对象01——类与对象

2.2.3、访问类的成员

成员变量的访问:对象名 . 属性名

成员方法的访问:对象名 . 方法名

class People{
    //成员变量/字段/属性
    public String name ;
    public String sex;
    public int age;
    //成员方法/行为
    public void show(){
        System.out.println("姓名:"+name+"性别:"+sex+"年龄:"+age);
    }
}
public class Test {
    public static void main(String[] args) {
        People p1 = new People();
        System.out.println(p1.name);
        System.out.println(p1.sex);
        System.out.println(p1.age);
        p1.show();
    }
}

注意:这里的成员变量并没有初始化,不同于局部变量不初始化会报错。成员变量不初始化是其类型对应的0值。

Java面向对象01——类与对象

2.3、类的成员

2.3.1、初始化成员变量

我们把定义在类的内部,方法的外部的变量叫“字段”或者叫它成员变量有时候也叫它“属性"。这三种叫法并没有严格区分

public static void main(String[] args) {
        People p1 = new People();
        p1.name = "java";
        p1.sex = "nan";
        p1.age = 50;
        p1.show();
    }
}

还有一种就是在定义成员变量的时候赋值,但并不建议这样写,因为在实例化后还是能初始化,没必要多此一举。而且这个类是一个模板,把模板初始化也是不合适的。

class People{
    //成员变量/字段/属性
    public String name = "zhangsan" ;
    public String sex = "lisi";
    public int age = 22;
    //成员方法/行为
    public void show(){
        System.out.println("姓名:"+name+"性别:"+sex+"年龄:"+age);
    }
}

再来看一个代码,这个代码是什么意思呢?

public static void main(String[] args) {
    	//p1和p2都指向了这个对象
        People p1 = new People();
        People p2 = p1;
}

Java面向对象01——类与对象

就是我们曾经讲过的方法,用于描述一个对象的行为.

class People{
    //成员变量/字段/属性
    public String name ;
    public String sex;
    public int age;
    //成员方法/行为
    public void show(){
        System.out.println("姓名:"+name+"性别:"+sex+"年龄:"+age);
    }
    public void prt(){
        System.out.println("爱java");
    }
}
public class Test {
    public static void main(String[] args) {
        People p1 = new People();
        p1.show();
        p1.prt();
    }
}

Java面向对象01——类与对象

2.3、修饰符(了解)

对 Java 当中的,类,变量,方法,构造方法等等.....进行修饰,赋予被修饰内容特殊意义。

public(公共访问控制符):它表示公共的意思,被public修饰的类、接口、方法和变量等成员都可以被任何其他类或对象所访问。

private(私有访问控制符):它表示私有的意思,只有在定义该成员的类内部才能被访问。被private修饰的类、方法、变量或接口只能在自己的类中被调用,无法被同一个包内或者其他包中的其他类或对象所访问。

protected(保护访问控制符): 它表示受保护的意思。被protected修饰的类、方法、变量或者接口只能被相同包或其子类中的类或对象所访问。

static(静态修饰符):它可以用来修饰成员变量、成员方法和代码块。当一个变量或方法被声明为 static 时,它就是一个静态成员。

final:有最终的、不可变更的意思,它可用于修饰类、变量和方法。用于表示它修饰的类、方法和变量不可改变。

native: 本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的

abstract: 将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现。

transient(过度修饰符): 指定该变量是系统保留,暂无特别作用的临时性变量。

volatile: 指定该变量可以同时被几个线程控制和修改。

synchronize: 同步修饰符,在多个线程中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程的访问,运行结束后解锁。

三、构造方法

3.1、构造方法的基本使用

构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作 构造方法没有返回值,且方法名和类名是相同的 构造方法是用来构造对象的(实例化对象)

new 执行过程

1.为对象分配内存空间

2.调用合适的构造方法

语法:

  1. 构造方法的名字和类名完全一致(包括大小写完全一致)。

  2. 没有返回值类型(void也不行)。

  3. 构造方法方法体不能返回任何的值(即不能在方法体中return 值)。

  4. 其他的和普通方法类似 ,可以有修饰符(public、protected、private、默认),可以有形参列表。

  5. 构造方法必须有方法体。

  6. 构造方法不能有任何非访问性质的修饰符修饰,例如 static、final、synchronized、abstract等都不能修饰构造方法。

class People{
    private String name ;
    private int age;//普通成员变量
    public static int cont;//静态成员变量
	
    public People(){
        System.out.println("这是一个不带有参数的构造方法");
    }

}
public class Test {
    public static void main(String[] args) {
       People p = new People();
    }
}

运行结果:

Java面向对象01——类与对象

那么为什么我们前面示例化对象时为什么没有构造方法呢?

如果我们没有写构造方法,系统默认会有一个没有参数且没有任何内容的构造方法

Java面向对象01——类与对象

特点:

  1. 每一个类中都至少有一个构造方法;
  2. 如果没有看到(显示的),那么存在一个隐式的无参数的构造方法;
  3. 如果一个类中有显示的构造方法,那么隐式的无参的构造方法就不存在了;

3.2、构造方法的重载

构造方法和方法一样是可以实现重载的, 由于需求不同,会创建多个构造方法

重载:

1.方法名要相同
2.参数列表不同(类型和个数)
3.返回值不做要求

class People{
    private String name ;
    private int age;//普通成员变量
    public static int cont;//静态成员变量

    public People(){
        System.out.println("这是一个不带参的构造方法");
    }
    public People(String name){
        System.out.println("这是一个带有一个参数的构造方法");
    }
    public  People(String name,String sex){
        System.out.println("这是一个带有两个参数的构造方法");
    }

}
public class Test {
    public static void main(String[] args) {
       People p = new People();
       People p1 = new People("张三");
       People p2 = new People("李四","男");
    }
}

Java面向对象01——类与对象

四、匿名对象(了解)

概念:

​ 匿名对象,就是创建的时候没有使用变量接收保存一个对象。但是匿名对象本质也是一个对象(具体的值)

作用:

​ 可以节约资源,因为GC【垃圾回收器】会不定时回收匿名对象

使用场景

​ 匿名对象一般用在:只需要使用一次的情况(如:调用一次非static修饰的普通方法作为方法实参使用)文章来源地址https://www.toymoban.com/news/detail-844581.html

public class Main {
    public static void main(String[] args) {
        // 创建匿名对象并调用方法
        new MyClass().doSomething();

        // 在方法参数中使用匿名对象
        printMessage(new Message("Hello, World!"));
    }

    static void printMessage(Message message) {
        System.out.println(message.getText());
    }
}

class MyClass {
    void doSomething() {
        System.out.println("Doing something...");
    }
}

class Message {
    private String text;

    public Message(String text) {
        this.text = text;
    }

    public String getText() {
        return text;
    }
}

到了这里,关于Java面向对象01——类与对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python-基础篇-类与对象/面向对象程序设计

    “类”是物以类聚的 “类” 类 和 对象 是 面向对象编程的 两个 核心概念 类 是对一群具有 相同 特征 或者 行为 的事物的一个统称,是抽象的, 不能直接使用 特征 被称为 属性 行为 被称为 方法 类 就相当于制造飞机时的 图纸 ,是一个 模板 ,是 负责创建对象的 定义类📚

    2024年01月19日
    浏览(41)
  • 7-1 jmu-Java-03面向对象基础-01-构造方法与toString

    String name、int age、boolean gender、int id 所有的变量必须为私有(private)。 注意:属性顺序请严格按照上述顺序依次出现。 分析: 定义一个Person的类,并在类中包含 String name 、 int age 、 boolean gender 、 int id ,并且定义为私有属性( private ) 1.编写无参构造函数:   打印\\\"This i

    2024年02月06日
    浏览(26)
  • 第十单元 面向对象二:静态类与静态成员

    前言 我们天天都在使用 为什么Console 类 调用 方法不需要实例化而可以直接调用呢? 我们可以查看Console的源码发现Console类定义如下: 我们发现 Console 类 前面有个 static 修饰, 我们把 static 修饰的类 叫作 静态类 static的作用 static是静态的意思,可以修饰成员变

    2024年02月06日
    浏览(32)
  • 【C++】面向对象编程(二)面向对象的编程思维:virtual虚拟调用、继承、protected成员、派生类与基类

    默认情形下,成员函数的解析都是编译时静态进行。如果要让成员函数的解析在程序运行时动态进行,需要在成员函数的声明前加上virtual: 虚函数的作用: 用基类的指针指向不同的派生类的对象时,基类指针调用其虚成员函数,会调用 真正指向对象的成员函数 ,而

    2024年02月07日
    浏览(35)
  • 【是C++,不是C艹】 类与对象 | 认识面向对象 | 访问限定符 | 封装 | this指针

    💞💞 欢迎来到 Claffic 的博客 💞💞  👉  专栏: 《是C++,不是C艹》👈 前言: 在C++入门之后,就要进入C++的第一个核心:类与对象,这期带大家认识认识面向对象编程,访问限定符,封装以及 this 指针。 注: 你最好是学完了C语言,并学过一些初阶的数据结构。 (没有目

    2024年02月07日
    浏览(32)
  • < Python全景系列-6 > 掌握Python面向对象编程的关键:深度探索类与对象

    欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。 Python全景系列的第六

    2024年02月06日
    浏览(52)
  • 学习笔记整理-面向对象-01-认识对象

    1. 对象 对象(object)是 键值对 的集合,表示属性和值的 映射关系 。 对象的语法 k和v之间用冒号分割,每组 k:v 之间用逗号分割,最后一个 k:v 对后可以不书写逗号。 属性是否加引号 如果对象的属性键名不符合命名规范,则这个键名必须用引号包裹。 属性的访问 可以用 点语

    2024年02月13日
    浏览(31)
  • 01 面向对象方法的概念

    面向对象不仅仅是一种程序开发方法 使用面向对象程序设计语言 使用对象、类、继承、封装、消息等基本概念进 行编程 面向对象是一种软件方法学 如何看待软件系统与现实世界的关系 以什么观点进行求解 如何进行系统构造 从问题域中客观存在的事物出发来构造软件系统

    2024年02月08日
    浏览(75)
  • 01_面向对象的设计原则

    参考资料: 视频 书籍 《设计模式:可复用面向对象软件的基础》 面对复杂问题如何解决? 分解:分而治之,大问题分解成小问题。 抽象:忽视非本质的细节,处理泛化和理想化的对象模型。 面向对象 从语言实现看,是代码和数据的封装 是一系列的公共接口 某种拥有责任

    2024年02月13日
    浏览(32)
  • 进一步了解C++函数的各种参数以及重载,了解C++部分的内存模型,C++独特的引用方式,巧妙替换指针,初步了解类与对象。满满的知识,希望大家能多多支持

    C++的编程精华,走过路过千万不要错过啊!废话少说,我们直接进入正题!!!! 函数默认参数 在C++中,函数的形参列表中的形参是可以有默认值的。 语法 : 返回值类型 函数名 (参数 = 默认值){} 示例 : 函数占位参数 C++中函数的形参列表里可以有占位参教,用来做占位

    2023年04月17日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包