首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第一章:面向对象思想概述
第二章:类和对象
第三章:类的定义
第四章:对象的创建和使用
第五章:关键字 package 和 import
第六章:类的成员之一:属性
第七章:类的成员之二:方法
第八章:可变参数
第九章:方法重载( overload )
第十章:方法的值传递机制
第十一章:递归
第十二章:对象数组
第十三章:OOP特征之一:封装
第十四章:类的成员之三:构造器
第十五章:JavaBean
第十六章:关键字 this
当前位置:
首页>>
技术小册>>
Java语言基础5-面向对象初级
小册名称:Java语言基础5-面向对象初级
6.1 语法格式 - 语法: ```bash 访问修饰符 class 类名{ 访问修饰符 数据类型 属性名 = 初始化值; 访问修饰符 数据类型 属性名; } ``` - 访问修饰符: - 常用的权限访问修饰符有:private 、缺省 、protected 、public 。 - 其他的访问修饰符:static 、final 。 - 数据类型:任何基本数据类型或任何引用数据类型。 - 属性名:属于标识符,符合命名规则和规范即可。 ```bash package com.github.model; /** * @author maxiaoke.com * @version 1.0 */ public class Person { /** * 声明public类型的变量name */ public String name = "张三"; /** * 声明private类型的变量age */ private int age; } ``` 6.2 变量的分类 - 成员变量:方法体外,类体内声明的变量。 - 局部变量:在方法体内声明的变量。 ![](/uploads/images/20230724/a22b09056ee094af2081dfff5e57b2be.png) 注意:成员变量和局部变量在初始化值方面的异同。 - 同:都有生命周期。 - 异:局部变量除形参外,均需显示初始化。 成员变量和局部变量的区别: ![](/uploads/images/20230724/da660715598edab20727dd151319bd64.png) 6.3 成员变量的特点 6.3.1 成员变量的默认初始化值 - 当一个对象被创建后,会对其中各种类型的 成员变量 自动进行初始化赋值。除了基本数据类型之外的变量类型都属于引用数据类型。 ![](/uploads/images/20230724/fd7cbc08d60b24bc7c7cfdd64e04569a.png) 6.3.2 类变量的值是所有对象共享的,而实例变量的值是每个对象独立的 示例: ```bash package com.github.demo; /** * @author maxiaoke.com * @version 1.0 */ public class ChineseTest { public static void main(String[] args) { Chinese c1 = new Chinese(); Chinese c2 = new Chinese(); c1.name = "张三"; c2.name = "李四"; c2.gender = '女'; // c1.country = "中国"; Chinese.country = "中国";// 推荐 System.out.println("c1.country = " + Chinese.country + ",c1.name = " + c1.name + ",c1.gender = " + c1.gender); System.out.println("c2.country = " + Chinese.country + ",c2.name = " + c2.name + ",c2.gender = " + c2.gender); } } class Chinese { /** * 国家 */ static String country = "中国"; /** * 姓名 */ String name; /** * 性别 */ char gender = '男'; } ``` 6.4 如何在类外面访问成员变量? 类变量: ```bash 类名.静态成员变量 // 推荐 对象名.静态成员变量 // 不推荐 ``` 实例变量: ```bash 对象名.非静态成员变量 ``` 示例: ```bash package com.github.demo; /** * @author maxiaoke.com * @version 1.0 */ public class ChineseTest { public static void main(String[] args) { // 类名.静态成员变量 System.out.println(Chinese.country); Chinese c1 = new Chinese(); // 对象名.非静态成员变量 System.out.println(c1.name); // 对象名.静态成员变量 不推荐 System.out.println(Chinese.country); // 对象名.非静态成员变量 System.out.println(c1.gender); } } class Chinese { /** * 国家 */ static String country = "中国"; /** * 姓名 */ String name; /** * 性别 */ char gender = '男'; } ``` 6.5 实例变量的内存分析 - 内存是计算机中最为重要的部件之一,它是和 CPU 进行沟通的桥梁。其作用是用于暂时存放 CPU 的运算数据,以及和硬盘等外部存储设备交换的数据。只要计算机在运行中,CPU 就会将需要运算的数据调度到内存中进行运算,当运算完成后 CPU 会将结果再传送出来。 - 我们编写的程序是存放在硬盘上的,在硬盘上的程序是不会运行的,必须放进内存中才能运行,运行完毕之后会清空内存。Java 虚拟机要运行程序,必须要对内存进行空间的分配和管理,每一片区域都有其特定的处理数据方式和内存管理方式。 - JVM 的运行时内存区域分为:方法区、堆、虚拟机栈、本地方法栈、程序计数器等。 ![](/uploads/images/20230724/8f1d5326b89835932b68947ea602ad8e.png) ![](/uploads/images/20230724/799da249b900d5178c1a5a64dab33388.png) - Java 对象保存在内存中时,由以下三部分组成: - 对象头: ■ Mark Word:记录了和当前对象有关的 GC、锁等信息。 ■ 指向类的指针:每一个对象需要记录它是由那个类创建出来的,而 Java 对象的类数据保存在方法区,指向类的指针就是记录创建该对象的类数据在方法区的首地址。该指针在 32 位的 JVM 中的长度是 32bit,在 64 位的 JVM 中的长度是 64 bit。 ■ 数组长度:只有数组对象才有。 - 实例数据:实例变量的值。 - 对齐填充:因为 JVM 要求 Java 对象占用的内存大小应该是 8bit 的倍数,所以如果不满足该大小,必须补齐至 8bit 的倍数。 - 以下是实例变量的内存分析图: ![](/uploads/images/20230724/f017729950fd9bf95ca42a9e8be1ab2c.png)
上一篇:
第五章:关键字 package 和 import
下一篇:
第七章:类的成员之二:方法
该分类下的相关小册推荐:
经典设计模式Java版
Java语言基础3-流程控制
Java语言基础11-Java中的泛型
Mybatis合辑2-Mybatis映射文件
深入理解Java虚拟机
Mybatis合辑1-Mybatis基础入门
Java语言基础13-类的加载和反射
Java语言基础16-JDK8 新特性
Java语言基础15-单元测试和日志技术
Mybatis合辑3-Mybatis动态SQL
Java面试指南
SpringBoot零基础到实战