文章目录

  • 0. 面向对象的三大特征
    • 0.1 封装性
    • 0.2 继承性
    • 0.3 多态性(重点)
  • 1. 类与对象的概念
    • 1.1 类中的组成
  • 2. 类与对象的定义与使用
    • 2.1 类的定义
    • 2.2 对象的产生
    • 2.3 通过对象调用实例变量与实例方法
  • 3. 对象的内存分析
  • 4. 引用传递分析

0. 面向对象的三大特征

0.1 封装性

 把客观事物封装成抽象的类,每个类都有自己的属性与方法,并且类可以让自己的数据和方法只让可信的类或对象操作,对不可信的进行信息隐藏。内部操作对外部而言不可见(保护性)

0.2 继承性

 它可以是现有类的所有功能,并且再无需重新编写原有类的代码的情况下对这些功能进行扩展。

0.3 多态性(重点)

 指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。
面对对象的最大特征就是:可以进行生活的抽象

1. 类与对象的概念

类是共性的概念,而对象是一个具体、可以使用的事物。类是声场对象的蓝图,现有类才可以产生对象。对象的所有属性与行为,一定在类中进行了完整的定义。

1.1 类中的组成

  1. 方法(操作的行为)
  2. 属性(变量,描述每个对象的具体特点)

2. 类与对象的定义与使用

2.1 类的定义

class 类名称{属性1;属性2;……方法1;方法2;……
}

举例:定义一个Person类

class Person{// 属性public String name;public int age;// 构造方法public Person(String name, int age){this.name = name;this.age = age;}// 普通方法public String getPersonInfo(){return "姓名:" + this.name + "年龄:" + this.age;}
}

类中的属性与方法(不带static关键字的)只能通过对象调用。

2.2 对象的产生

类名称 对象名称 = new 类名称();

以Person类为例,可以产生一个Person类的实例(对象):

       Person per1 = new Person();Person per2 = new Person("zhangsan", 12);

2.3 通过对象调用实例变量与实例方法

只要出现了关键字new,就开辟了内存。

        Person per = new Person("zhangsan", 18);System.out.println(per.name);System.out.println(per.getPersonInfo());

运行结果如下图所示:

3. 对象的内存分析

 先简单的将Java中的内存区域分为 * 栈内存* 和 堆内存 (实际Java的内存区域的划分远比这个复杂)

  1. 栈内存(虚拟机局部变量表):存放的是局部变量(包含编译期可知的各种基本数据类型、对象引用—>即堆内存地址—>对象的名称),Java栈是与线程对应起来的,每当创建一个线程,JVM就会为这个线程创建一个对应的Java栈。
  2. 堆内存:保存的是真正的数据,即对象的属性信息。

new表示在对上新分配的空间。
举例:通过以下代码和内存分析给大家讲解一下内存:

class Person{// 属性String name;int age;
}
public class Test{public static void main(String[] args){Person per = new Person();System.out.println(per.name + "  " + per.age);per.name = "zhangsan";per.age = 18;System.out.println(per.name + "  " + per.age);}
}

以上代码运行后得:

以下按步骤进行分析,对应代码及内存图:

Person per = new Person();

        per.name = "zhangsan";per.age = 18;

通过per引用设置堆属性值,内存图如下所示:

对象(引用数据类型)必须在实例化后调用,否则会产生NullPointerException(运行时错误),编译时不会出错"NullPointerException"在开发生涯中会一直存在,只有引用类型(数组、类、接口)才会产生此类异常。以后此类异常,就根据出错位置查看引用数据类型变量是否初始化。

4. 引用传递分析

引用传递的本质:一块堆内存可以被多个栈内存所指向

        Person per1 = new Person();Person per2 = new Person();per2 = per1;

前两句代码的内存图如下:

当 per2 = per1; 执行后,内存会怎么样变化?

垃圾空间: 没有任何栈内存指向的堆内存空间。
所有垃圾空间会不定期GC(垃圾收集),GC会影响性能,所以开发之中一定要控制好对象的产生数量(无用的对象尽量少产生)

Java中类与对象的定义与使用相关推荐

  1. java 对象的定义是_浅析Java编程中类和对象的定义

    1,什么是类? 答:类是客观存在的,抽象的,概念的东西. 2,什么事对象? 答:对象是具体的,实际的,代表一个事物.例如:车是一个类,汽车,自行车就是他的对象. 关于类与对象的描述:类是对象的模版,对 ...

  2. web前端培训分享:面向对象中类和对象的定义是什么?

    在学习web前端技术的时候,我们接触的最多的便是面向对象这一块,其实很多编程技术都有用到这个现象,下面我们就为大家详细的介绍一下面向对象中类和对象的定义是什么? web前端培训分享:面向对象中类和对象 ...

  3. java中类与对象回顾总结

    文章目录 一 类与对象的定义 二 类的成员变量 总结: 三 类的方法 (1)普通成员方法 (2)静态成员方法 类与对象的关键E点: 疑难解答: 四 private封装 五 setter与getter ...

  4. java中类和对象的个人理解

    目标: 1.掌握类和对象的格式和用途 2.把握好如何将生活中类和对象转换为程序. 面向对象编程:模拟现实生活. 所有的概念,都是源自于生活中. 1.找出生活中的对象? 对象:只要是生活中具体的某一个物 ...

  5. JAVA中类、对象、方法之间的关联关系

    引言   Java是一门面向对象的程序设计语言,基础语法是由类.对象.方法等共同组成,一个Java程序可以看成是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 定义   类:是一个模板,是 ...

  6. Java中类,对象,方法的关系

    类 类的理解 类是现实生活中一类具有共同属性和行为的事物的抽象 类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为 自我理解就是: 1.将张三这个人(对象)拥 ...

  7. 怎么去理解JAVA中类与对象的关系

    首先要明确,在现实生活中,每一个物体都有自己的基本特征,专业一点也可以说成是属性有些甚至还有一定的行为.例如 汽车的特征:有车门.有轮胎.颜色各一等等,行为:有行驶,开车门,开车灯,等等.有这些属性和 ...

  8. 最接地气的通俗易懂理解java中类和对象(什么是类,什么是对象)

    类和对象(什么是类,什么是对象) 以通俗易懂.说人话的方式理解类和对象以及如何创建对象(实例化) 在以下中,标红的字体就是类,标蓝的字体就是对象! 我问大家几个问题: 1.你最喜欢的娱乐明星是哪些? ...

  9. Java中类和对象的概念

    最近要开始投简历了,所以我闲着把Java基础复习一遍. 首先说说类和对象. 今天心情不错,来复习复习Java基础:类和对象. Java是什么?Java是一门面向对象的编程语言(OOP),想要理解Jav ...

  10. Java中类和对象的关系

    一.基本概念 1.类:类是一个模板,它描述一类对象的行为和状态.(比如一张汽车设计图纸) 2.对象:对象表示现实世界中一个具体的事物.对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的状态 ...

最新文章

  1. [svc]磁盘接口与RAID
  2. LINUX TOMCAT
  3. Linux下的tar归档及解压缩功能详解
  4. python库_计算机二级教程 Python语言程序设计,第10章python第三方库概览
  5. 源代码遭泄露,大疆员工被罚20万,判刑半年。
  6. Oracle Compile 编译 无效对象(ORA-04063: package body SYS.DBMS_XPLAN 有错误)
  7. JavaScript——易班优课YOOC课群在线测试自动答题解决方案(二十)整理维护
  8. 初探swift语言的学习笔记九(OC与Swift混编)
  9. postman用法_应该是接口测试神器postman最全的用法总结了
  10. android微信预览pdf,网页的pdf、office链接安卓版面微信浏览器无法打开
  11. JavaScript学习总结(1)——JavaScript基础
  12. 触发器使用教程和命名规范
  13. Java中sleep()与wait()的区别
  14. 消防工程师 10.2 火灾自动报警系统-设计要求
  15. 如何做 ASO 优化?
  16. 鸿蒙系统会碎片化吗,华为鸿蒙系统,解决安卓碎片化问题,4G流畅度媲美12G!...
  17. MATLAB 调用cplex解二次规划,【Cplex for MATLAB】安装问题以及二次规划的源码解释问题...
  18. UEFI HOB 学习
  19. Linux LVM全面实践
  20. PHP分布式路由算法介绍与实现

热门文章

  1. 2020年日历_2020年日历全年表
  2. Android Studio ADB 环境变量配置
  3. Mysql数据库Sql语句更改主键设置
  4. 国内HTML5前端开发框架汇总
  5. 医疗行业软件开发流程-立项阶段
  6. 大数据技术之Spark入门(一)概述
  7. 【yishen】黑苹果 声卡驱动
  8. 转载---美团外卖系统架构演进与稳定性的探索
  9. 人工智能杂记 人工智能简史
  10. HTTP长连接与短链接以及推送技术原理