之前学习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 类与对象基础整理的更多相关文章

  1. JAVA 类和对象基础知识详解

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 和C++一样,JAVA也是一门面向对象的语言,其基础和核心是类和对象.而面向对象的思想是来源与显示生 ...

  2. java类与对象基础篇

    java面向对象基础篇 面向对象程序设计(Object Oriented Proframming ,OOP) 面向对象的本质是:以类的方式组织代码,以对象的方式组织(封装)数据. 面向对象的核心思想是 ...

  3. java类与对象基础--抽象类和接口

    在java的类体系中,有两个比较特殊的抽象体--抽象类和接口.抽象体并不可以拥有具体的对象(而且接口甚至不是类),但是它们却是在java设计领域非常重要的两个概念,很多优秀的设计模式都是基于这两个概念 ...

  4. [Java初探08]__简单学习Java类和对象

    前言 在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使 ...

  5. Java类和对象初始化

    类的生命周期: Java类的初始化: 本阶段负责为类变量赋正确的初始值.(类变量即静态变量) Java编译器把所有的类变量初始化语句和静态初始化器通通收集到<clinit>方法中,该方法只 ...

  6. java类和对象之间的差

    java类和对象之间的差别是一个普遍的问题,刚开始学习java当它来到与类和对象接触.今天就来总结一下它们之间的差异. 先说说class和object差异.事实上,词:object是全部class的父 ...

  7. 危险代码:如何使用Unsafe操作内存中的Java类和对象

    危险代码:如何使用Unsafe操作内存中的Java类和对象—Part1 危险代码:如何使用Unsafe操作内存中的Java类和对象—Part2 危险代码:如何使用Unsafe操作内存中的Java类和对 ...

  8. java类和对象

    类是对象的抽象 对象是类的一个实例类 对象 = new 类();拿对象可以操作这个类里的方法 java类与对象的区别是个老生常谈的问题,刚开始学java的时候就开始接触类和对象,今天来总结一下他们之间 ...

  9. MOOC C++笔记(二):类和对象基础

    第二周:类和对象基础 面向对象程序设计的四个基本特点 抽象.封装.继承.多态. 面向对象程序设计的过程 1.从客观事物抽象出类 抽象出的事物带有成员函数与成员变量(类似于带函数的结构体) 成员变量和成 ...

随机推荐

  1. [arc076F]Exhausted? 贪心+堆

    Description ​ 有m个椅子,第i个在位置i,每个椅子只能坐一个人.  有n个人,第i个人能坐的椅子的位置j需满足j≤Li或j≥Ri.  现在你可以添加若干个椅子,可以放在任意实数位置.问最 ...

  2. java double 保留两位小数

    java保留两位小数问题: 方式一: 四舍五入  double   f   =   111231.5585;  BigDecimal   b   =   new   BigDecimal(f);  d ...

  3. 2016级算法第三次上机-G.Winter is coming

    904 Winter is coming 思路 难题.首先简化问题, \(n\) 个0与 \(m\) 个1排成一列,连续的0不能超过x个,连续的1不能超过y个,求排列方法数. 显然会想到这是动态规划. ...

  4. CSS的nth-of-type和nth-child的区别

    <!--源代码--><!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  5. JVM理解

    在阅读本文之前,先向大家强烈推荐一下周志明的<深入理解Java虚拟机>这本书. 前些天面试了阿里的实习生,问到关于Dalvik虚拟机能不能执行class文件,我当时的回答是不能,但是它执行 ...

  6. tomcat下各个文件夹的作用

    1.bin目录:这个文件夹包含的是启动/关闭tomcat的脚本,里面有startup.sh(Linux环境下启动tomcat脚本)和startup.bat(Windows环境下启动tomcat脚本), ...

  7. 小众软件:windows 系统下 exe 文件打包软件

    1. Enigma Virtual Box 单文件打包软件 官网:EnigmaProtection 2. 安装包打包软件 官网:Inno Setup 参考文献: [1] 单文件制作工具Enigma V ...

  8. Linux 系统下安装 mysql5.7.25(glibc版)

    前言:经过一天半的折腾,终于把 mysql 5.7.25 版本安装上了 Amazon Linux AMI release 2017.09 系统上,把能参考的博客几乎都看了一遍,终于发现这些细节问题,然 ...

  9. CSAPP阅读笔记-数组分配与访问-来自第三章3.8的笔记-P176-P183

    这一节比较简单,仅记录几个比较重要的点: 1.C语言允许对指针进行运算,计算出的值会根据该指针引用的数据类型大小进行伸缩. 例子: 其中,xE是数组的起始地址.注意,指针运算时,若最终结果为指针,则指 ...

  10. Git学习系列之Git的功能特性(从一般开发者的角度和主开发者的角度来剖析)

    不多说,直接上干货! Git的功能特性,从一般开发者和主开发者的角度来进行剖析. Git的功能特性: 从一般开发者的角度来看,Git有以下功能: 1.从服务器上克隆完整的Git仓库(包括代码和版本信息 ...