java 类与对象基础整理
之前学习javaSE的时候,没有针对性地对对类与对象的一些基础进行整理,下面这些内容是笔记内容整理后的,希望以后自己可以通过这些博客时常复习!
一、类and对象的基础
类似于类的生命啊,类与对象的关系这些东西感觉就没什么写的啦,下面的记录仅仅是我记录感觉自己还不太熟悉而且也比较常用的知识点。
1、对象的初始化方法
A、new 调用构造函数。常用的对象初始化方法其实也是new 关键字进行对象的构造,在new 对象过程中(其他构造方式构造函数也是类似),会调用对应的构造函数,对必要的变量进行初始化。
B、newInstance()方法。这个方法利用反射机制进行构造。一般是调用Class.forName()获取class对象之后,再调用class对象的newInstance方法进行初始化。在newInstance中,其实也是调用构造函数,只是只能调用无参否认构造函数进行对象的初始化。
C、序列化,这里不详细将,后面再总结啦。
D、clone方法;clone方法是实现了 cloneable的类所共有的方法,该方法可以对当前的对象进行数据拷贝操作。
2、类加载与初始化的具体过程。
java程序的具体执行过程大体如下:
java原始class文件-->类加载-->加载父类的static块-->加载子类的static快-->加载父类的非静态代码块-->加载父类的构造函数-->加载子类的非静态代码块-->子类的构造函数-->创建对象成功。(当然,非静态代码块只有在创建对象的时候才开始执行,而static块则是在类加载时就执行了);而初始化过程主要发生在构造函数运行期间。
二、类封装性
1、类的封装要完整,不可过多暴露变量(一般将变量设置为private,通过对于的方法入口访问私有变量才是最安全和推荐的做法),看一下例子代码:
class Person{
//定义一些变量
//public String name = null;//不推荐这样定义变量,破换封装性!
private String name = null;//这里一般说,变量是设置为private,以保持类的良好封装性
private String sex = null;
//通过对应的setter和getter方法进行访问私有变量。
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
} }
通过统一的入口访问类所属的变量可以保持类的完好封装性。
2、类的访问入口(getter和setter)需要注意的地方(保持良好的封装性)。很多时候,我们会不自觉地做一些违反封装性的事情,请看下面的示意丑图:
上面示意图,其实我们可以总结到一个原则就是:尽量不要在方法中返回引用变量(当然,字符串等除外啦),因为这样会允许外部代码直接操作某个对象的引用变量对应的数据,这样破坏了封装性!
当然,这个原则在一般情况下我们是要遵守的,如果需要和对应引用指向的对象进行数据交互,应该考虑提供在原来的基础上提供一个入口进行数据交互(例如这里我要获取某个学生的所在学校的名字,这是,应该在学生类那里提供一个类似getStudentSchoolName的方法入口,而不是直接操作整个school类)
或者我们的确需要引用指向的对象数据时,可以调用clone方法返回(也就是说,类的封装严格地限制了外部方法对类的内部引用变量所指向的对象进行修改操作!)
三、方法调用与传参问题
1、方法调用:静态,直接类名+方法名(或者引用+方法名也行);非静态需要用引用调用;这个没什么好说的。
2、传参的注意事项:
传值or传引用?首先,要理解传值与传引用的概念(我想很多人没有学过c++只是学过java的人都会对什么是传引用有误解,当然也包括之前的我)
A、传引用:将一个指针(对应java中的引用)自身直接传给java方法
B、传值:将要传入的参数复制一份,将复制的副本传递给方法。
C、说明:java中所有的传参,都是传值!是的,你没听错,java没有传引用!
下面代码说明了这个例子:
//验证传值与传引用的方法
public void methodTest1(Person person){
person = new Person();
}
这里,传进来来的是person(指向某个对象的引用)的值的拷贝,这个方法的目的是将原来的person指向一个新的person对象,但是,其实这个传进来的person变量参数只是需要操作的那个person的一个引用值的拷贝罢了,它出了这个方法就会消失,所以这个方法,完全没有干任何的事情!
再看下面的例子,可能会更好理解传值和传引用
int test = 0;
public void methodTest2(int test){
test = 9;
}
这个方法估计大家都能理解:test的值并没有变为9,因为方法只是传值而已!
所以上面的例子也是一样道理:传进来的引用虽然是和要操作的person指向同一个对象(其实是可以通过该负责引用操作对象数据的),但是,它任然是值传递,methodTest1方法没有任何效果!
OK,这篇的类的基本知识就先总结到这里,下片着重整理下继承相关的问题!
java 类与对象基础整理的更多相关文章
- JAVA 类和对象基础知识详解
/*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 和C++一样,JAVA也是一门面向对象的语言,其基础和核心是类和对象.而面向对象的思想是来源与显示生 ...
- java类与对象基础篇
java面向对象基础篇 面向对象程序设计(Object Oriented Proframming ,OOP) 面向对象的本质是:以类的方式组织代码,以对象的方式组织(封装)数据. 面向对象的核心思想是 ...
- java类与对象基础--抽象类和接口
在java的类体系中,有两个比较特殊的抽象体--抽象类和接口.抽象体并不可以拥有具体的对象(而且接口甚至不是类),但是它们却是在java设计领域非常重要的两个概念,很多优秀的设计模式都是基于这两个概念 ...
- [Java初探08]__简单学习Java类和对象
前言 在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使 ...
- Java类和对象初始化
类的生命周期: Java类的初始化: 本阶段负责为类变量赋正确的初始值.(类变量即静态变量) Java编译器把所有的类变量初始化语句和静态初始化器通通收集到<clinit>方法中,该方法只 ...
- java类和对象之间的差
java类和对象之间的差别是一个普遍的问题,刚开始学习java当它来到与类和对象接触.今天就来总结一下它们之间的差异. 先说说class和object差异.事实上,词:object是全部class的父 ...
- 危险代码:如何使用Unsafe操作内存中的Java类和对象
危险代码:如何使用Unsafe操作内存中的Java类和对象—Part1 危险代码:如何使用Unsafe操作内存中的Java类和对象—Part2 危险代码:如何使用Unsafe操作内存中的Java类和对 ...
- java类和对象
类是对象的抽象 对象是类的一个实例类 对象 = new 类();拿对象可以操作这个类里的方法 java类与对象的区别是个老生常谈的问题,刚开始学java的时候就开始接触类和对象,今天来总结一下他们之间 ...
- MOOC C++笔记(二):类和对象基础
第二周:类和对象基础 面向对象程序设计的四个基本特点 抽象.封装.继承.多态. 面向对象程序设计的过程 1.从客观事物抽象出类 抽象出的事物带有成员函数与成员变量(类似于带函数的结构体) 成员变量和成 ...
随机推荐
- maven(私库)上传jar包
在实际开发过程中,我们经常会遇到需要引用的jar依赖,在我们公司的maven仓库不存在,这个时候我们就需要把jar上传上去,在项目中添加对应依赖就OK了. 步骤1:下载jar 在http://mvnr ...
- bzoj1800飞行棋
题目链接 简单模拟 真的不敢相信ahoi09年的题竟然是这个难度 首先,一个必须要知道的定理是:圆上只有直径所对的圆周角是直角. 然后就很显然了, 只有两条不重合的直径上的四个点才能组成一个矩形, 所 ...
- file.delete()的优化
//删除暂存的pdf File file =new File(pdfFilename); file.delete(); Path path2 = Paths.get(pdfFilename); Fil ...
- [Swift实际操作]八、实用进阶-(4)通过protocol在两个对象中进行消息传递
本文将演示如何借助协议,实现视图控制器对象和其内部的自定义视图对象之间的数据传递. 首先创建一个自定义视图对象.在项目名称文件夹点击鼠标右键New File ->Cocoa Touch Clas ...
- Cache缓存设计
缓存的适用场景: 缓存的目的是提高访问速度,减少不必要的开销,提高性能.那什么样的场景适用于缓存呢.试想一个多项式的计算是一个CPU bound的操作,如果频繁调用同一个多项式的结果.显然缓存结果是一 ...
- python 控制台输出带颜色的文字的方法
python_控制台输出带颜色的文字方法 在python开发的过程中,经常会遇到需要打印各种信息.海量的信息堆砌在控制台中,就会导致信息都混在一起,降低了重要信息的可读性.这时候,如果能给重要的信 ...
- vue-devtools 必备开发工具
转载自:http://blog.csdn.net/sinat_17775997/article/details/70224280 最近在研究vue单页面应用,一步一步用上全家桶,开发避免不了的就是调试 ...
- Numpy中扁平化函数ravel()和flatten()的区别
在Numpy中经常使用到的操作由扁平化操作,Numpy提供了两个函数进行此操作,他们的功能相同,但在内存上有很大的不同. 先来看这两个函数的使用: from numpy import * a = ar ...
- thinkphp5.1的安装
首先,下载composer.建议选择全屏安装.参考资料https://docs.phpcomposer.com/00-intro.html.安装到c盘.这个跟之前nodejs一样,都是装c盘.大概是全 ...
- 分分钟钟学会Python - 数据类型(dict)
今日内容 字典(dict) 具体内容 1.字典含义 帮助用户去表示一个事物的信息(事物是有多个属性). 基本格式 data = {键:值,键:值,键:值,键:值,键:值,键:值,} # 练习题 use ...