面相对象的成员介绍

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:1033586391@qq.com
 * @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:对象数组的内存解析:

相关推荐
zquwei2 分钟前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
TT哇8 分钟前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
火烧屁屁啦31 分钟前
【JavaEE进阶】初始Spring Web MVC
java·spring·java-ee
飞飞-躺着更舒服35 分钟前
【QT】实现电子飞行显示器(改进版)
开发语言·qt
w_312345444 分钟前
自定义一个maven骨架 | 最佳实践
java·maven·intellij-idea
岁岁岁平安1 小时前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA1 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_19284999061 小时前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
张国荣家的弟弟1 小时前
【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
java·jar·bi
ZSYP-S1 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring