Java类和对象 详解(一)

article/2025/9/20 20:54:55

一、面向对象简述

面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计思路,才形成C++,而由C++产生了Java这门面向对象的编程语言。

但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题。面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,所以,面向对象的开发更像是一个具备标准的开发模式。

在面向对象定义之中,也规定了一些基本的特征:
(1)封装:保护内部的操作不被破坏;
(2)继承:在原本的基础之上继续进行扩充;
(3)多态:在一个指定的范围之内进行概念的转换。

对于面向对象的开发来讲也分为三个过程:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。

二、类与对象的基本概念

类与对象时整个面向对象中最基础的组成单元。

:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);
对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。

可以一句话来总结出类和对象的区别:类是对象的模板,对象是类的实例。类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。类不能直接使用,对象是可以直接使用的。

三、类与对象的定义和使用

在Java中定义类,使用关键字class完成。语法如下:

class 类名称 {属性 (变量) ;行为 (方法) ;
}

范例:定义一个Person类

class Person {     // 类名称首字母大写String name ;int age ;public void tell() {        // 没有staticSystem.out.println("姓名:" + name + ",年龄:" + age) ;}
}

类定义完成之后,肯定无法直接使用。如果要使用,必须依靠对象,那么由于类属于引用数据类型,所以对象的产生格式(两种格式)如下:

(1)格式一:声明并实例化对象

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

(2)格式二:先声明对象,然后实例化对象:

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

引用数据类型与基本数据类型最大的不同在于:引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间。

当一个实例化对象产生之后,可以按照如下的方式进行类的操作:
对象.属性:表示调用类之中的属性;
对象.方法():表示调用类之中的方法。

范例:使用对象操作类

package com.wz.classandobj;class Person { String name ;int age ;public void get() {System.out.println("姓名:" + name + ",年龄:" + age);}
}public class TestDemo {public static void main(String args[]) {Person per = new Person() ;// 声明并实例化对象per.name = "张三" ;//操作属性内容per.age = 30 ;//操作属性内容per.get() ;//调用类中的get()方法}
}

运行结果:

姓名:张三,年龄:30

以上完成了一个类和对象的操作关系,下面换另外一个操作来观察一下:

package com.wz.classandobj;class Person { String name ;int age ;public void get() {System.out.println("姓名:" + name + ",年龄:" + age);}
}public class TestDemo {public static void main(String args[]) {Person per = null;//声明对象per = new Person() ;//实例化对象per.name = "张三" ;//操作属性内容per.age = 30 ;//操作属性内容per.get() ;//调用类中的get()方法}
}

运行结果:

姓名:张三,年龄:30

那么,问题来了,以上两种不同的实例化方式有什么区别呢?
我们从内存的角度分析。首先,给出两种内存空间的概念:
(1)堆内存:保存对象的属性内容。堆内存需要用new关键字来分配空间;
(2)栈内存:保存的是堆内存的地址(在这里为了分析方便,可以简单理解为栈内存保存的是对象的名字)。

1

任何情况下,只要看见关键字new,都表示要分配新的堆内存空间,一旦堆内存空间分配了,里面就会有类中定义的属性,并且属性内容都是其对应数据类型的默认值。

于是,上面两种对象实例化对象方式内存表示如下:
这里写图片描述

两种方式的区别在于①②,第一种声明并实例化的方式实际就是①②组合在一起,而第二种先声明然后实例化是把①和②分步骤来。

另外,如果使用了没有实例化的对象,结果如何?
如下:

package com.wz.classandobj;class Person { String name ;int age ;public void get() {System.out.println("姓名:" + name + ",年龄:" + age);}
}public class TestDemo {public static void main(String args[]) {Person per = null;//声明对象//per = new Person() ;//实例化对象per.name = "张三" ;//操作属性内容per.age = 30 ;//操作属性内容per.get() ;//调用类中的get()方法}
}

运行结果:

Exception in thread "main" java.lang.NullPointerExceptionat com.wz.classandobj.TestDemo.main(TestDemo.java:15)

此时,程序只声明了Person对象,但并没有实例化Person对象(只有了栈内存,并没有对应的堆内存空间),则程序在编译的时候不会出现任何的错误,但是在执行的时候出现了上面的错误信息。这个错误信息表示的是“NullPointerException(空指向异常)”,这种异常只要是应用数据类型都有可能出现。

四、对象引用传递初步分析

引用传递的精髓:同一块堆内存空间,可以同时被多个栈内存所指向,不同的栈可以修改同一块堆内存的内容。

下面通过若干个程序,以及程序的内存分配图,来进行代码的讲解。

我们来看一个范例:

class Person {     String name ;int age ;public void tell() {        System.out.println("姓名:" + name + ",年龄:" + age) ;}
}
public class TestDemo {public static void main(String args[]) {Person per1 = new Person() ;         // 声明并实例化对象per1.name = "张三" ;per1.age = 20 ;Person per2 = per1 ;  // 引用传递per2.name = "李四" ;per1.tell() ;}
}

对应的内存分配图如下:

11

再来看另外一个:

class Person {String name ;int age ;public void tell() {System.out.println("姓名:" + name + ",年龄:" + age) ;}
}
public class TestDemo {public static void main(String args[]) {Person per1 = new Person() ;         // 声明并实例化对象Person per2 = new Person() ;per1.name = "张三" ;per1.age = 20 ;per2.name = "李四" ;per2.age = 30 ;per2 = per1 ;// 引用传递per2.name = "王五" ;per1.tell() ;}
}

对应的内存分配图如下:
12

垃圾:指的是在程序开发之中没有任何对象所指向的一块堆内存空间,这块空间就成为垃圾,所有的垃圾将等待GC(垃圾收集器)不定期的进行回收与空间的释放。

未完待续。。。


http://chatgpt.dhexx.cn/article/mlgCDDea.shtml

相关文章

C++类和对象详细总结

目录 目录 类与对象概念 什么是对象 什么是类 什么是方法: 自定义类型(类的关键字:class) 定义类的格式 封装 类的特性 访问权限以及访问限定符 struct 定义的类和class定义的类的区别: 小结 对象中包含了…

C++类和对象详解

类与对象上篇: 主要内容: 1.类和对象的区别。 2.类的定义。 3.类的访问限定符和封装 4.类的作用域 5.类的实例化(用类类型创建对象) 6.计算类对象的大小 7.this指针 C语言是面向过程的,关注的是过程,分析…

面向过程和面向对象区别

(1)从设计思路来看。 面向过程:程序设计的重点是分析解决问题的步骤,以及完成步骤的流程,是一种结构化自上而下的程序设计方法。面向对象:程序设计的重点是把构成问题的事物分解成对象,从局部着…

Java基础——类和对象

目录 一、类和对象的基本概念 二、类与对象的定义与使用 1.创建类的语法: 2. 创建具体的对象: 3.范例(创建一个Person 类的对象) 三、static关键字 (一)static修饰属性(类属性、类变量&a…

类,对象,方法与函数的区别

面向对象(Object oriented Programming,OOP)编程 的思想主要是针对大型软件设计而来的。面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更加接近人的思维,使程序的扩展性更强、可读性更好,…

C++的类和对象

目录 C面向对象的三大特性:封装、继承、多态 封装 构造函数和析构函数 构造函数的分类与调用 深拷贝与浅拷贝 类对象作为类成员 静态成员 成员变量和成员函数是分开存储的 const修饰成员函数 友元 运算符重载 继承 多态 C面向对象的三大特性&#xff1…

java实例和对象对象的区别_java中实例与对象的区别和联系

对象是抽象的说法,你可以把它看作一个符合它自身定义的所有实例的代表,而实例则是对象的现实体现。 你可以说一个实例是一个对象,但你不能说一个对象是一个实例。因为定义对象时只是把自身的规则和逻辑定义好,实例可以通过输入不同…

怎么来理解java类和对象的区别

对象在需求中的使用 在具体问题中如何使用面向对象去分析问题,和如何使用面向对象。 以把大象装冰箱为例进行分析:在针对具体的需求,可以使用名词提炼的办法进行分析,寻找具体的对象。 需求:把大象装冰箱里 对象&…

C++类对象和类指针的区别

好奇这个&#xff0c;所以参考了一些帖子&#xff0c;写下心得。 一篇转载率较高的帖子&#xff1a;C 类对象和 指针的区别 大佬都不贴结果。。。。所以这里我给出代码和结果&#xff1a; #include<iostream> using namespace std;class Test{ public:int a;Test(){a …

Java中类和对象的区别

一、类和对象 1、类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象类是对象的数据类型&#xff0c;类是具有相同属性和行为的一组对象的集合简单理解&#xff1a;类就是对现实事物的一种描述 类的组成 属性&#xff1a;指事物的特征&#xff0c;例如&#xff…

安装svn 汉化包 也不能设置中文

(以下为亲测!) 汉化包地址:https://osdn.net/projects/tortoisesvn/storage 进入地址之后:选择对应版本-->>Language Packs-->>选择中文包 问题: 已经安装svn汉化包,但是不能设置为中文. 解决: 确保汉化包版本对应svn版本.如果汉化包版本已经对应svn版本,则把…

SVN汉化失败的原因及解决方案(通过SVN官网下载SVN和相应的汉化包)

1、没删除SVN根目录语言包里的所有文件 2、汉化包没放在SVN根目录的语言文件夹下安装 3、SVN版本和汉化包版本不一致 首先看自己电脑上安装的svn是什么版本&#xff1a; 比如我的就是 TortoiseSVN 1.11.1&#xff0c;那我就要找TortoiseSVN 1.11.1对应的TortoiseSVN 1.11.1l…

Tortoise SVN 汉化(官网下载汉化包)

&#xff08;本操作是已经下载Tortoise SVN后 &#xff0c;通过官网下载汉化包进行的操作&#xff09; 1、首先进入到官网 https://tortoisesvn.net/downloads.html 2、进入到官网首页&#xff0c;点击Translations 3、进入到翻译页面&#xff0c;点击download 4、进入到下…

window eclipse快速导入svn项目以及软件汉化

刚入职新公司&#xff0c;之前几家公司使用得IDE跟代码管理是idea跟gitlab,公司内sap/erp系统&#xff0c;立项时间较早&#xff0c;使用得是eclipsesvn。 进行导入项目之前&#xff0c;英语水平较差得得同学&#xff0c;可以将软件先进行快速汉化 1、如图 2、在弹出得输入框中…

关于svn汉化包安装无效的解决办法

下载svn汉化包要和对应的svn客户端版本对应&#xff0c;否则安装无效&#xff0c; 在安装前要想将svn安装目录下的languages目录下的文件全部删除 还有一点要注意的是 汉化包安装要放在svn安装目录下进行安装&#xff0c;它才能正常汉化 安装完后就可以选择语言了

SVN安装包汉化VS插件

一.SVN客户端安装 首先下载SVN 地址&#xff1a;https://tortoisesvn.net/downloads.zh.html 根据版本进行选择 安装直接下一步下一步默认文件夹就好了 安装完成右键就会有二个多出来的菜单 都是英文不是很方便 二.语言转换 在下载SVN的下面就有语言包可以一起下载 进行语…

svn汉化插件安装步骤

1.svn安装好之后&#xff0c;查看svn安装的版本&#xff0c;比如我的svn是1.9.7.27907版本 64位的。 2.去svn官网&#xff1a;https://tortoisesvn.net/ 3.将网站显示中文版&#xff0c;便于查看&#xff1a; 4.点击“下载”&#xff1a; 5.看版本一致&#xff0c;往下拉&#…

SVN基本使用1

一、什么是SVN 代码管理工具 能记住每次的修改 查看所有的修改记录 恢复到任何历史版本 恢复已删除的文件 二、跟Git比 SVN使用简单上手快支持中文(Git较为复杂不支持中文) 目录级权限控制(Git没有),企业级安全必备 可以单独子目录checkOut(Git只能将整个仓库),可以减少…

Svn下载及安装(附带汉化包安装)

1、访问Svn官方网站&#xff1a;https://tortoisesvn.net 2、找到需要下载的版本类型 3、下载完成后一直下一步安装即可 4、Svn安装包下载 5、下载完成之后&#xff0c;一直下一步即可 6、安装好之后&#xff0c;在任意空白位置 —> 右击 —> 选择TortoiseSVN —> …

Windows安装SVN客户端并汉化

1、下载 https://tortoisesvn.net/downloads.zh.html 2、安装 鼠标双击 3、汉化 汉化包下载地址&#xff1a;https://tortoisesvn.net/downloads.zh.html 鼠标双击汉化包 点击svn的各种界面查看是否汉化成功