[零基础学JAVA]Java SE面向对象部分-06.面向对象基础(01)

简介:
本季介绍了面向对象与面向过程的区别,重点阐述了类与对象的关系及JAVA中如何定义类和使用对象。之后又详细讲解了对象的引用传递和垃圾的产生。
面向对象是JAVA中最核心,最重要的部分,在此概念非常多,需要反复理解。
本季目标
image
此次目标是整个Java SE面向对象基础部分的目标哈,一共划分七个季讲解哈,同时会辅以大量的练习来巩固所学知识。OK,废话不多说,go on~~~
面向对象与面向过程的比较
image
面向对象的前身是叫面向过程。 
面向对象的分析过程就可以称为类的设计。
面向对象的三大特征
image
封装可以有效的保护程序。在所有基础上扩展类的功能就是继承哈~~~
类与对象
image
类与对象的区别和联系: 
类是一个抽象的,是一个共性的东西 
对象是类的具体的应用,是一个个性的东西 
在面向对象中重点是类的设计。
类的定义格式
image
按此格式定义一个Person(人类) 
假设Person类中只包含姓名和年龄;
image
现在我们成功定义了一个Person类,它有两个属性,分别是name和age,现在这个类有了,我们就可以使用它,重点是类的设计。要使用这个类的唯一方法就只有产生对象。我们再为其加入一个方法,例如说话方法哈~怎么加入这个说话方法呢?我们看下面
对象的产生
image
在main方法中的重点就是产生对象,对象的产生格式是: 
类名称 对象名称 = null ; ==> 声明对象 
对象名称 = new 类名称() ==> 实例化对象 
· new就表示要开辟新的内存空间。
注意:void say()方法,在这里讲一下哈,以前我们学习的方法主要是在主方法中直接调用的哈,所以我们在方法名称前面加入了一个public static,现在我们用对象调用方法的话,可以暂时不加哈,我们以后会讲清什么时候该加public static什么时候不该加public staic哈~
image
现在写完后我们来验证一下效果哈~
image
我们发现姓名:王乾和年龄:26都出来了哈,这就是最基本的类和对象的程序,我们发现并不是很复杂哈,只要按规则写就可以出来哈,我们继续往下学哈~
这个程序我们写完也验证了哈,那其中到底发生了什么呢?
image
上面的图很重要哈,我们最好可以背下来哈,以及重点理解会下面的程序详解过程哈~~
程序详解: 
1、定义好一个类 
2、为定义好的类实例化对象 
· 声明对象:在栈内存中开辟空间 
· 实例化对象(为一个对象开辟空间),使用关键字new完成。只要有new关键字就表示在堆内存中开辟空间,在堆内存中保存各个对象的属性。而方法是保存在全局代码区里面滴。
image 
3、通过对象.属性为类中的属性赋值,通过对象.方法()调用类中的方法。
image
我们明白了上面的过程,那我们能否通过以上的格式产生第二个对象呢?
image
我们看到可以产生第二个对象哈,如果要产生三个以上的对象也是按照这样的格式依次类推哈~~~
image
面向对象这个部分必须着重观察内存的分配。
类是一个引用的传递的数据类型。
image
我们发现,如果我们没有对对象开辟堆内存空间的话,程序执行会报NullPointerException错哈~,如果我们发现出现这个错误,我们排错时就检查对象有没被实例化。
image 
NullPointerException : 空指向异常,只要是没有堆内存引用的对象,直接调用对象访问属性或方法的时候都会出现空指向异常。此异常会伴随你的开发人生。
下面如果我们再加一条代码,p2=p1;将p1的值赋给p2,这样p1和p2就都指向了堆内存中的同一个空间。这样我们无论对p1还是p2进行修改,都将对其指向的同一个堆内存空间的属性进行修改。
内存的分配情况:
image
image
现在调用的p1.say();和p2.say();应该输出都是一样的内容,就是最后p2.name和p2.age所赋的值。我们验证一下效果哈。
image
这就是一个典型的引用传递例子,下面我们基本上讲到的都是引用传递哈~
观察以下的程序,分析其内存的分配过程:
image
//声明对象同时实例化对象 
Person p1=new Person(); 
Person p2=new Person();
p1和p2分别在堆内存中开辟空间
image
//将p1的值赋给p2,这样p1和p2就都指向了堆内存中的同一个空间 
p2=p1;
当p1的值要赋给p2时,p2先断开其刚才在堆内存中开辟空间的连接,然后再p2与p1所开辟的空间建立连接。
image
下面的内存储器分配情况就和ooDemo03一样了哈,我们看下效果
image 
image
我们发现原来p2开辟的那块空间没有用处了,没用的空间我们就称其为垃圾,垃圾会被垃圾收集(GC)自动回收。—— 垃圾的产生过程。
总结: 
1、类与对象的关系 
· 类是对象的模板,对象是类的一个实例 
2、对象的创建 
·声明对象:在栈内存中声明;类名称 对象名称 = null ; 
·实例化对象:使用new在堆内存中开辟空间,保存属性;对象名称 = new 类名称() ; 
3、对象的引用传递 
4、垃圾的产生。
本季内容是以后内容很基础的部分哈,我们一定要理解类与对象的关系,以及一个最重要的一个错误: NullPointerException(空指向异常).









本文转自redking51CTO博客,原文链接: http://blog.51cto.com/redking/119347 ,如需转载请自行联系原作者
相关文章
|
1月前
|
人工智能 Java 编译器
Java:面向对象
本文介绍了Java编程中的核心概念,包括包的命名规范与自动导入机制、构造方法的特点与使用、`this`和`super`关键字的作用、继承的基本规则、访问权限的设置、封装的意义、多态的实现原理以及`static`关键字的用法。通过详细解析每个知识点,并结合代码示例,帮助读者深入理解Java面向对象编程的核心思想与实践技巧。内容适合初学者及进阶开发者学习参考。
|
3月前
|
缓存 安全 Java
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
|
6月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
86 1
|
7月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
68 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
8月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
230 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
7月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
133 2
|
9月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
9月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
78 4
|
9月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
8月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
64 0