您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > 风中――Java类和对象
12.Java中的类和对象【第一部分草案】收藏(本章的学习量相对比较大,我把整体分为三个部分讲解,第一个部分和第二个部分为Java关于类和对象以及OO的基础,第三个部分为在OO设计技巧中针对Java程序的一些性能提升的小技巧,因为尽量保证Java关于类和对象的基本概念以及关键知识点都能够涉及到,一是为了方便查询,二是按照常用的关键点来进行的整理,其中的关键点都是在开发过程中的一些相关内容涉及,所以本文特意提供了一个目录进行检索。类和对象属于面向对象的基本概念,在开发过程中,需要掌握了对象和类的基本思想过后才明白如何进行OO设计,Java本身是纯面向对象的语言,这篇文章的主要目的是针对Java里面一些关于类和对象的基本操作进行简单的讲解,若有笔误,请来Email提点,谢谢:silentbalanceyh@126.com)本文目录:【蓝色部分为本章的目录】1.基本概念2.Java变量相关1)Java变量分类2)Java中变量的初始化3)Java变量修饰符和访问域4)Java类修饰符[不包含内部类]3.Java涉及OO的关键知识点【主体】1)继承的基本概念2)抽象类、接口、final类:3)重载和重写:4)对象的拷贝[深拷贝和浅拷贝]:5)关键字this、super6)Java中的inlining[内联]7)带继承的构造函数以及构造顺序8)谈谈Object中的方法:equals、hashCode、toString9)带继承的类型转换以及转换中关于成员变量和成员函数的调用10)Java语言中的反射11)按引用传递和值传递原理12)Java中的包和导入13)匿名类和内部类4.Java编程OO设计技巧1)对象创建以及周期2)对象属性设置3)垃圾回收4)继承、接口、抽象类5.总结21.基本概念:类和对象:OO里面什么称为类,类一般性我们定义为创建对象的一个蓝图,当我们根据某个类创建了一个对象的时候,我们就说该对象是这个类的一个实例(instance),类描述了某些对象的基本结构,是对对象的相关属性的一种定义,它定义了对象所具有的属性、方法、事件等各种基本点。类设计的关键概念:封装是对象在工作的时候的一个关键概念,也是我们在进行OO设计的时候的一个需要掌握的点,封装简单讲就是将对象内部的一些细节实现隐藏起来不对外公布,仅仅对外公布某个对象能够提供的操作结果,从而实现信息隐藏的目的。在封装过程,对象内的数据我们一般称为成员变量(instancefields),对象内针对这些数据执行的操作我们可以叫做操作方法(成员函数)(methods),一个对象这些属性的集合所反映出来的就是该对象的状态。在Java里面,所有的复合数据都是从Object类继承而来的,这一点可以通过使用Java反射去获取父类的名称来获得。对象:在OO设计里面,对象有几个需要掌握的基本点:对象的行为:对象的行为指代的是这个对象能够做什么,不能做什么,包括这个对象有哪些接口是对外提供了我们可以直接进行使用等相关概念。对象的状态:对象的状态指代的是在程序运行过程,某个对象实例的一些属性发生了相关的变化过后产生的一个对象状态,在ORM设计中我们经常会遇到对象状态的操作。对象的标识:对象的标识指代的是这个对象如何区别于其他对象,即是是同一个类产生的新实例,其本质上讲它们属于两个不同的对象,而不应该是同一个对象。类与类的关系:依赖(Dependence):依赖关系简单讲就是users-a的关系,两个类创建的对象实例本身没有任何关系,在编程过程反映出来的就是两个对象在相互之间的调用关系,比如某个对象在执行它自己的行为的时候调用了其他对象的方法这些相关操作都属于users-a的基本关系,或者说在某个Class里面使用了其他Class来定义成员变量。组合(Aggregation):组合关系可以认为是has-a的关系,这种关系的两个类存在一个包含关系,很容易理解就是比如某个类包含了另外一个类,这种概念严格上讲不在操作,主要是成员变量,比如一个用户有个姓名属性成为NameInfo,然后这个NameInfo定义为一个包含了两个String的对象,一个是FirstName,另外一个是LastName,这种情况可以认为该对象本身和NameInfo之间的关系是has-a的关系。继承(Inheritance):继承关系属于is-a的关系,这种关系意味着两个类存在父类(superclass)和子类(subclass)的概念,Java里面使用extends和implements两个关键字来体现两个类的集成关系。(上边这些概念基本上在各种OO语言学习的开篇都会遇到,没什么特殊的,所以熟悉的人可以不用去了解)Java中的Class:预定义Class:在Java里面,什么称为预定义Class,学过Java的人都知道,JVM会在我们编写java程序的时候默认载入包java.lang,而java.lang里面已经存在了很多Class,这种Class就属于预定义的Class;不仅仅如此,3以及JavaAPI里面提供的Network相关类、IO相关类、XML相关类,这些可以不需要我们自定义,只需要import过后就可以直接使用的类就属于预定义的类。预定义类的各种使用方法可以参考JDK的API文档,里面针对目前存在的很多类都有详细的描述信息,有些类还提供了我们所需要的相关使用Demo可做参考。一些代码的使用例子。自定义Class:如果我们要使用自己的Class就需要在Java中自己定义Class,定义语法如下:classUserInfo{……}使用该语法我们就可以定义一个属于自己的Class,而在Class里面我们就可以根据自己的需求来设计相关成员变量和成员函数以及其他相关信息。2.Java变量:1)Java中的变量分为四种:类变量(又称为静态变量)、实例变量、局部变量、块变量类变量——类变量只能在一个class域里面进行定义,同样只能在类里面使用,使用关键字为static关键字,这种变量可以直接通过Class.VAR的方式来调用,而且不需要对象实例存在就可以调用,它的执行原理在于当JVM的类加载器将类加载进来的时候,这个变量就已经存在的,而且可以使用了。定义方式和调用方式如下,下边的A就属于类变量:classUserInfo{staticintA;publicstaticvoidmain(Stringargs[]){System.out.println(UserInfo.A);}}实例变量——实例变量也是在class域里面进行定义,但是只能在Object域里面使用,不使用关键字static,这种变量不能像类变量一样用Class.VAR的方式来调用,这种变量使用条件就是这个变量所属的实例必须存在,在实例初始化过后这个变量就可以调用了,通过实例的方式进行调用,定义方式和调用方式如下,下边的a就属于实例变量:classUserInfo{inta;publicstaticvoidmain(Stringargs[]){UserInfouser=newUserInfo();System.out.println(user.a);}}局部变量——局部变量不能在class域里面进行定义,只能在函数域里面定义和使用,这种变量使用范围仅仅在某个局部块里面,即每个函数中定义的局部4变量只能在函数本身中使用,其定义方式和调用方式如下,在下边代码里面,a就属于局部变量:classUserInfo{publicstaticvoidmain(Stringargs[]){}publicstaticvoidf(inti){inta=0;}}块变量——块变量只能在块域中进行定义,同样只能在块中使用,不能越过块域,其定义方式和调用方式如下,在下边代码里面,a变量就属于块变量:classUserInfo{publicstaticvoidmain(Stringargs[]){{inta=0;}}}2)变量的初始化:Java中的变量初始化规则是这样的:类变量和实例变量在没有进行显示初始化的时候,系统会自动赋予默认值,这里需要补充的是所有继承于Object的默认值为null,块变量和局部变量必须进行显示赋值操作,否则无法通过编译器的编译。这一点用下边的代码段来说明:classUserInfo{inta;publicstaticvoidmain(Stringargs[]){intb;System.out.println(b);//这句话无法通过编译器的编译,因为是局部变量,没有进行显示初始化操作System.out.println(a);//这句话的输出为0,因为系统自动初始化了一个默认值}}Java中有一种初始化的方式称为静态初始化,静态初始化会存在于class域的一个static块语句里面,所有静态初始化的语句会在类加载的时候第一时间执行,所以看下边这句代码:classUserInfo{staticinta=0;static{System.out.println(Initstatic);5}publicstaticvoidmain(Stringargs[]){System.out.println(Initmain);}}上边代码运行一次可以知道,静态初始化块是最先执行的,输出会如下:InitstaticInitmain这种静态初始化的方式在我们使用JDBC的时候我们会经常用来进行驱动的加载,而且它还有一个特性是:它只运行一次!其含义在于,及时以后使用该类去创建实例,这一段再也不会执行,因为静态初始化属于Class域的操作,仅仅在类第一次被JVM加载的时候会执行,以后就不会再执行了。3)Java变量修饰符和访问域(变量相关):在面向对象里面,我们设计的时候需要实现信息隐藏,同理而言,就是我们在设计类的属性和对应的成员函数的时候需要使用变量和函数的修饰符来操作,在Java语言里面,总共分为四种访问域:public域:public域使用public关键字来实现,该域里面的内容是任何成员都可以访问的,访问前提是已经导入了该类所在的包protected域:protected域使用protected关键字来实现,该域里面的内容访问限制在于:访问该类的类必须和被访问类在同一个包里面,或者访问类是被访问类的子类,这两种关系满足protected域的访问规则default域:default域不需要用任何关键字来实现,直接在类里面定义实例变量或者类变量的时候不带任何修饰符,该域的访问规则是:访问类和被访问类必须在同一个包里,因为这个原因,default域又可以称为包域private域:private域使用private关键字实现,访问规则为:该关键字定义的东西只有该类本身可以访问,其他类以及子类都不可以访问该成员按照以下的表可以知道这几个修饰符之间的大小和相互之间的访问关系所有成员子类成员同一个包本类成员public可访问可访问可访问可访问protected不可访问可访问可访问可访问default不可访问不可访问*可访问可访问private不可访问不可访问不可访问可访问*注意:这里需要注意的是,在同一个包里面的protected域和default域中,需要掌握的规则为:[1]protected域本身是为了对象继承而设计的,所以只要满足继承关系的时候protected是可以访问的,而不去管两个类是否在同一个包内[2]default域本身就是包域,所以上边的表格里面写的不可访问前提条件为子类成员不在同一个包内,即如果子类成员在同一个包内,default域是可以访问的,谨记:default域为包域4)Java类修饰符[不包含内部类]6Java里面外部类修饰符只有两种:公共类(使用public关键字)、友好类(不使用任何关键字)1.公共类只要被导入过后,任何一个类都可以访问该类,至于类中的成员按照变量访问域来规范,前提是你要可以访问该类才能访问类中的成员2.友好类只能在同一个包里面访问,其他包里面的类即使导入了该包也只能访问该包里面的共有类,这个符合变量的包域即default域3.在
本文标题:风中――Java类和对象
链接地址:https://www.777doc.com/doc-4152217 .html