面相对象的成员介绍

2.面相对象的成员 -> 类:

a.类的定义:

  • 1.类是对公共特点的抽象,其中包含了很多成员,如属性(成员变量 )、方法、构造器等.要想很好的定义类,就必须要好好的了解这些类的成员

b.访问修饰符

  • 控制属性的访问范围 有四种访问修饰符 public, proctected, 默认, private
  • 属性的定义类型可以为任意类型,包含基本类型或引用类型
  • 属性如果不赋值,有默认值,规则和数组一致。具体说: int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char, boolean false,String null

c.类用处:

  • 1.对类进行实例化就产生了对象
  • 2.创建对象 = 类的实例化 = 实例化类

d.类成员介绍:

  • 1.类的常见的成员有:属性和行为
  • 2.类的其他成员:
    • 构造器
    • 代码快
    • 内部类
d1.类的成员->属性:
  • 1.属 性:对应类中的成员变量 或者叫:field;或者叫:域,字段
d2.类的成员->方法:
  • 1.对应类中的成员方法 或者叫:函数;或者叫:method

3.面相对象的成员 -> 对象:

对象哪来的??是对类实例化所产生的

a.对象的创建与使用:


b.代码举例:

  • 1.编码实现创建对象及属性的调用:
java 复制代码
// Object01.java 
package com.jianqun.package01;
import java.util.function.IntBinaryOperator;
/**
 * @author jianqun
 * @email:[email protected]
 * @creat 2022-01-31-16:11
 */
public class Object01 {
    public static void main(String[] args) {
        //实例化一只猫;即造出一只实实在在的猫来
        //把创建的第一支猫赋给cat1,就是这个猫的名字叫cat1
        Cat cat1 = new Cat();
        cat1.name = "小白";
        cat1.color = "白色";
        cat1.age = 3;

        //创建第二支猫
        Cat cat2 = new Cat();
        cat2.name = "小黑";
        cat2.color = "黑色";
        cat2.age = 30;
        System.out.println("第一支猫" + cat1.name + cat1.color);
    }
}

class Cat{
    /**
     * 猫的属性
     */
     String name;
     String color;
     int age;
    /**
     * 猫的行为
     */
}
  • 2.对象创建说明: new Cat()代表的才是真正的对象,cat只是代表的对象名字,或者说叫对象的引用
java 复制代码
//直接创建
Cat cat;//先声明对象cat
cat = new Cat();//再创建对象cat
java 复制代码
//直接创建对象
Cat cat = new Cat();

c.类与对象的区别和联系

  • 1.通过上面的代码可以看出:类是抽象的,是代表一类事务,比如人类,猫类...是一种数据类型
  • 2.对象是具体的,实际的,代表一个具体事务,即是实例
  • 3.类是对象的模板,对象是类的一个个的个体,对应着实例
  • 4.如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰(非static类型的属性

d.匿名对象介绍:

  • 1.匿名对象就是:我们创建的对象没有赋给一个变量名,而直接调用这个对象的方法。这样的对象叫做匿名对象,如:new Person().shout();
  • 2.匿名对象智能调用一次
  • 3.使用情况 :
    • 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象
    • 我们经常将匿名对象作为实参传递给一个方法调用
java 复制代码
package com.jianqun.day08;
public class InstanceTest {
    public static void main(String[] args) {
        //创建Phone对象
        Phone phone = new Phone();
        System.out.println(phone);
        //对象调方法
        phone.sendEmail();
        phone.playGame();

        //匿名对象使用举例1:
        new Phone().price = 20000;
        new Phone().showPrice();//0.0
        new Phone().playGame();//打游戏.....

        //匿名对象使用举例2:
        PhoneMall phoneMall = new PhoneMall();
        phoneMall.show(new Phone());//发送邮件.....
    }
}

class PhoneMall{
    public void show(Phone phone){
        phone.sendEmail();
    }
}

class Phone{
    double price;//价格
    public void sendEmail(){
        System.out.println("发送邮件.....");
    }

    public void playGame(){
        System.out.println("打游戏.....");
    }

    public void showPrice(){
        System.out.println("手机价格::" + price);
    }
}

d.对象的内存解析:

d1.JVM内存结构简介:
  • 1.堆(Heap)
    • 此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存
    • 这一点在Java虚拟机规范中的描述是:所有的对象实例(Cat cat)以及数组都要在堆上分配
  • 2.栈(Stack)
    • 通常所说的栈(Stack)是指虚拟机栈
    • 虚拟机栈用于存储局部变量表、操作数栈等。
    • 局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址), 方法执行完,自动释放。
  • 3.方法区(Method Area)
    • 方法区(Method Area)用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
d2.案例1:分析对象创建过程:


d3.案例2:创建单个对象的内存解析:

以下分析忽略了main方法在栈中的存储,对对象中的属性做了进一步的分析


d4.案例3:一个类的多个对象的内存解析:
  • 1.如果我们创建了一个类的多个对象,则每个对象都独立的拥有一套属性(非static),也就是说,我们修改一个对象的属性a,不会影响另一个对象的属性a的值

  • 2.如下分析暂时忽略了jvm中的方法区
d5.案例3:对象数组的内存解析:

相关推荐
Tanecious.8 分钟前
机器视觉--python基础语法
开发语言·python
叠叠乐14 分钟前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
战族狼魂1 小时前
CSGO 皮肤交易平台后端 (Spring Boot) 代码结构与示例
java·spring boot·后端
Tttian6222 小时前
Python办公自动化(3)对Excel的操作
开发语言·python·excel
xyliiiiiL2 小时前
ZGC初步了解
java·jvm·算法
杉之2 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
hycccccch3 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
独好紫罗兰3 小时前
洛谷题单2-P5713 【深基3.例5】洛谷团队系统-python-流程图重构
开发语言·python·算法
天天向上杰4 小时前
面基JavaEE银行金融业务逻辑层处理金融数据类型BigDecimal
java·bigdecimal
闪电麦坤954 小时前
C#:base 关键字
开发语言·c#