Java-类和对象
勤能补拙
文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。
前言
在Java语言中经常被提到的两个词是类和对象,实质上可以将类看作是对象的载体,它定义了对象所具有的功能。学习Java语言必须要掌握类与对象,这样可以从深层次去理解Java这种面向对象语言的开发理念,从而更好、更快地掌握Java编程思想与编程方式,因此,掌握类与对象是学习Java语言的基础。
一、面向对象概述
在程序开发初期人们使用结构化开发语言,但随着软件的规模越来越庞大,结构化语言的弊端也逐渐暴露出来,开发周期被延长,产品的质量也不尽人意,结构化语言已经不再适合当前的软件开发。这时人们开始将另一种开发思想引入程序中,即面向对象的开发思想。面向对象思想是人类最自然的一种思考方式,它将所有预处理的问题抽象为对象,同时了解这些对象具有哪些相应的属性以及展示这些对象的行为,以解决这些对象面临的一些实际问题,这样就在程序开发中引入了面向对象设计的概念,面向对象设计实质上就是对现实世界的对象进行建模操作。
1、对象
在计算机的世界中,面向对象程序设计的思想要以对象来思考问题,首先要将现实世界的实体抽象为对象,然后考虑这个对象具备的属性和行为。例如,现在面临一只大雁要从北方飞往南方这样一个实际问题,试着以面向对象的思想来解决这一实际问题。步骤如下。
1、首先可以从这一问题中抽象出对象,这里抽象出的对象为大雁。
2、然后识别这个对象的属性。对象具备的属性都是静态属性,如大雁有一对翅膀、黑色的羽毛等。这些都是属性。
3、接着识别这个对象的动态行为,即这只大雁可以进行的动作,如飞行、觅食等,这些行为都是这个对象基于其属性而具有的动作。
4、识别出这个对象的属性和行为后,这个对象就被定义完成了,然后可以根据这只大雁具有的特性制定这只大雁要从北方飞向南方的具体方案以解决问题。
2、类
类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体被称为类。例如,鸟类封装了所有鸟的共同属性和应具有的行为。
3、封装
封装是面向对象编程的核心思想。将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。例如,用户使用计算机时,只需要使用手指敲击键盘就可以实现一些功能,无须知道计算机内部是如何工作的,即使可能知道计算的工作原理,但在使用计算机时也并不完全依赖于计算机工作原理这些细节。
4、继承
类与类之间同样具有关系,如一个百货公司类与销售员类相联系,类之间的这种关系被称为关联。关联主要描述两个类之间的一般二元关系,例如,一个百货公司类与销售员类就是一个关联,学生类与教师类也是一个关联。两个类之间的关系有很多种,继承是关联中的一种。
5、多态
.多态性允许以统一的风格编写程序,以处理种类繁多的已存在的类及相关类。该统一风格可以由父类来实现,根据父类统一风格的处理,可以实例化子类的对象。由于整个事件的处理都只依赖于父类的方法,所以日后只要维护和调整父类的方法即可,这样就降低了维护的难度,节省了时间。
二、类
类是封装对象的属性和行为的载体,而在Java语言中对象的属性以成员变量的形式存在,对象的方法以成员方法的形式存在。
1、成员变量
在Java中对象的属性也称为成员变量。为了了解成员变量,首先定义一个图书类,成员变量对应于类对象的属性,在Book类中设置3个成员变量,分别为id、name和category,分别对应于图书编号、图书名称和图书类别3个图书属性。
2、成员方法
在Java语言中使用成员方法对应于类对象的行为。以Book类为例,它包含getName()和setName()两个方法,这两个成员方法分别为获取图书名称和设置图书名称的方法。
3、权限修饰符
Java中的权限修饰符主要包括private、public、protected,这些修饰符控制着对类和类的成员变量以及成员方法的访问。如果一个类的成员变量或成员方法被修饰为private,则该成员变量只能在本类中被使用,在子类中是不可见的,并且对其他包的类也是不可见的。如果将类的成员变量和成员方法的访问权限设置为public,那么除了可以在本类使用这些数据之外,还可以在子类和其他包的类中使用。如果一个类的访问权限被设置为private,这个类将隐藏其内的所有数据,以免用户直接访问它。如果需要使类中的数据被子类或其他包中的类使用,可以将这个类的设置为public访问权限。如果一个类使用protected修饰符,那么只有本包内的该类的子类或其他类可以访问此类中的成员变量和成员方法。
4、局部变量
如果在成员方法内定义一个变量,那么这个变量被称为局部变量。
5、局部变量的有效范围
局部变量的有效范围从该变量的声明开始到该变量的结束为止。
6、this关键字
this关键字用来代表本类对象的引用,this关键字被隐式地用于引用对象的成员变量和方法。
三、类的构造方法
在类中除了成员方法之外,还存在一种特殊类型的方法,那就是构造方法。构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的。每当类实例化一个对象时,类都会自动调用构造方法。
四、静态变量、常量和方法
在介绍静态变量、常量和方法之前首先需要介绍static关键字,因为由static修饰的变量、常量方法被称做静态变量、常量和方法。
有时,在处理问题时会需要两个类在同一个内存区域共享一个数据。例如,在球类中使用PI这个常量,可能除了本类需要这个常量之外,在另外一个圆类中也需要使用这个常量。这时没有必要在两个类中同时创建PI常量,因为这样系统会将这两个不在同一个类中定义的常量分配到不同的内存空间中。为了解决这个问题,可以将这个常量设置为静态的。
五、类的主方法
主方法是类的入口点,它定义了程序从何处开始;主方法提供对程序流向的控制,Java编译器通过主方法来执行程序。主方法的语法如下:
public static void main(String[] args) {
//方法体
}
- 1
- 2
- 3
六、对象
Java是一门面向对象的程序设计语言,对象是由类抽象出来的,所有的问题都通过对象来处理,对象可以操作类的属性和方法解决相应的问题,所以了解对象的产生、操作和消亡是十分必要的。
1、对象的创建
在Java语言中通过new操作符来创建对象。前文在讲解构造方法时介绍过每实例化一个对象就会自动调用一次构造方法,实质上这个过程就是创建对象的过程。准确地说,可以在Java语言中使用new操作符调用构造方法创建对象。
语法如下:
Test test = new Test();
2、访问对象的属性和行为
用户使用new操作符创建一个对象后,可以使用“对象.类成员”来获取对象的属性和行为。前文已经提到过,对象的属性和行为在类中是通过类成员变量和成员方法的形式来表示的,所以当对象获取类成员时,也相应的获取了对象的属性和行为。
3、对象的引用
在Java语言中尽管一切都可以看作对象,但真正的操作标识符实质上是一个引用,那么引用在Java中是如何体现的呢。
语法如下:
类名 对象引用名称
如一个Book类的引用可以使用以下代码:
Book book;
- 1
4、对象的比较
在Java语言中有两种对象的比较方式,分别为“==”运算符与equals()方法。实质上这两种方式有着本质区别。
例如:
public class Test {
public static void main(String[] args) {
String c1 = new String("abc");
String c2 = new String("abc");
String c3 = c1;
//使用"=="运算符比较c2与c3
System.out.println("c2==c3的运算结果为:"+ (c2==c3));
//使用equals()方法比较c2与c3
System.out.println("c2.equals(c3)的运算结果为:"+(c2.equals(c3)));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
可以看出两个比较方式是不同的,“==”比较的是两个对象的引用地址是否相同,"equals"比较的是两个值是否相同。
5、对象的销毁
每个对象都有声明周期,当对象的生命周期结束时,分配给该对象的内存地址将会被回收。在其他语言中需要手动回收废弃的对象,但是Java拥有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器将回收无用的但占用内存的资源。
虽然垃圾回收机制已经很完善,但垃圾回收器只能回收那些由new操作符创建的对象。如果某些对象不是通过new操作符在内存中获取一块内存区域,这种对象可能不能被垃圾回收机制所识别,所以在Java中提供了一个finalize()方法。这个方法是Object类的方法,它被声明为protected,用户可以在自己的类中定义这个方法。如果用户在类中定义了finalize()方法,在垃圾回收时会首先调用该方法,在下一次垃圾回收动作发生时,才能真正回收被对象占用的内存。
七、总结
这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。
可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。
文章来源: xiaoqijava.blog.csdn.net,作者:旷世奇才李先生,版权归原作者所有,如需转载,请联系作者。
原文链接:xiaoqijava.blog.csdn.net/article/details/125961307
- 点赞
- 收藏
- 关注作者
评论(0)