Java知识梳理之对象和类(一)

         本科大二的时候就已经修过这门课了,最近再翻出来花上三五天对几个重要的知识点再过一过。包括:Chap8对象和类、Chap10关于对象的思考、Chap11继承和多态、Chap13异常处理以及Chap14抽象类和接口。知识点很基础,大神勿喷。今天先将Chap8和Chap10梳理一下,这两章部分源码的Github地址为:https://github.com/hzka/JavaBook01  可以对照着帖子进行学习:

                                                           

(一)对象、类、封装的基础概念
     1.对象:代表现实世界中可以明确标识的一个实体。每个对象都有自己独特的标识、特征和行为。举例说明:对象:一个学生、一张桌子等。对象的特征/属性:矩形的宽、高。对象的行为:圆可以通过getArea来获取面积。
     2.类是创建对象的模板,定义对象的数据域以及方法做啥;对象是类的实例,可以从类中实例化多个对象;
     3.构造方法:创建新对象,主要用于完成类的初始化动作,譬如初始化对象的数据域。

                                                       

      4.统一建模语言(UML):对类的模板和对象的图解的符号进行标准化。也被称为类图。如下图所示:
                                             
      5.构造方法:
       满足三个特性:(1)与类名字相同;(2)无返回类型,但可以有修饰符;(3)在new操作时调用,以初始化对象;
可以提供无参构造方法和有参构造方法,也可以不定义构造方法。这时类中会隐含定义一个方法体为空的无参构造方法(默认构造方法)。new 类名(参数名)调用。
      6.通过引用变量来访问对象。
      6.1.一个类就是一种引用类型,在这里变量myCircle的引用类型为Circle类型,该变量能够引用一个Circle对象。即:类名 对象引用变量 = new 类名();eg:Circle myCirecle = new Circle();
      6.2.使用圆点运算符进行访问和调用,eg:使用myCircle.getArea()调用计算面积的方法。myCircle.radius引用对象的半径。getArea被称为实例方法、radius为实例对象。
      6.3.若引用类型数据域没有引用任何对象,则String等引用类型数据域的默认值为null;int类型的默认值为零;boolean类型的默认值为false;char类型的默认值为’\u0000’。

                                    

举例:
题目:java中String是引用数据类型,为什么
String str="scce";
String str2="scce";
String str3=new String("scce"); 
str==str2返回true
str==str3返回false??
答案:
String str="scce"; //这是在静态数据区创建了一个对象
String str2="scce"; //创建静态数据对象是先在静态数据区查,如果存在则不创建新的,保证静态数据区中的数据只有一份,
str==str2返回true //指向同一个对象
String str3=new String("scce"); 
str==str3返回false //在堆中创建一个对象,引用值当然不同
Stirng特殊在如果静态数据区中存在,那么不创建新的对象,而是指向这个对象。

       6.4.基本数据类型和引用类型变量的区别:存储和赋值两方面去理解。
             
       7.Java支持静态方法和静态变量,无需创建类的实例就可以调用静态方法。使用修饰符static。而类中的常量应该是被所有对象所共享的,因此使用声明为final static。程序示例如P223项目所示。变量方法依赖于类某个实例,则应将其设定为实例变量或方法。譬如:每个圆都有自己的半径,半径依赖于圆。若不依赖具体实例,则将其设定为静态方法,譬如:Math类中的random、pow、sin等方法。
       8.public、private和protected:private修饰符修饰的方法和数据与只能在自己的类中被访问,public默认修饰符只能在同一个包里面被访问,protected我们下一节再说。

                  

       9.数据域封装:未封装可能会存在易被篡改、类难以维护的问题,因此我们使用private修饰符将数据域声明设置为私有的,使用get或set方法返回或获取数据域的值。示例项目如p228所示。其UML图如下所示:

                
      10.Java参数传递只有值传递一种参数传递方式,方法中传递基本类型值或者引用值是一样的。
                       
      11.对象数组也很简单,示例项目如P231所示。
      创建的代码:

                                    

     创建的示意图:
                              
(二)几个实例
       1.计算圆的半径和体积:P212项目
       2.模拟电视机的频道,音量和电源开关:P214项目
       3.使用Java库的类:Date类、Random类以及GUI相关的类。P219项目
     (随机数Random类。(1)Math.random获取0.0到1.0之间的随机double类型(2)java.util.Random类产生相应的类型值。
显示GUI组件。JFrame、JButton、JLabel、JTextField、JRadioButton、JComboBox和JList这样的创建框架、单选按钮、标签、文本域、单选框、组合框、列表等类。JFrame里面包含了JPanel。JPanel里面包含了按钮各类组件。)
(三)本章小结

  

(四)关于对象的思考
       1.不可变对象和类:一旦创建,其内容就不能再更改。譬如:String类不可变;若一个类不可变,则其:(1)所有数据域必须是私有的(2)没有一个数据域提供公用的set方法(3)没有一个访问器方法,该方法会返回一个指向可变数据域的引用。  
       2.关于变量作用域,若一个局部变量与一个类变量有着相同的名字,那么局部变量优先,而同名的类变量将会被隐藏。因此尽可能使两者命名不一样。
       3.关键词this:第一种目的是隐藏引用类的隐藏数据域,关键词this给出一种指代对象的方法,可以在实例方法代码中调用实例方法,eg:this.i=i;将参数i的值赋给调用对象的数据域i。第二种目的是让构造方法调用同一个类中的另一个构造方法。譬如:

                                 
       4.类的抽象和封装:类的使用者无需知道类是如何实现的,将实现的细节进行封装,对用户只显示使用方法,此称之为类的封装。我们以计算贷款偿还额的程序P279为例进行说明:很low,就是对类中的数据域使用private进行封装,然后使用set和get方法进行访问和调用。
                              
       5.面向对象的思考:面向过程范式重在设计方法,面向对象范式将数据和方法组合于对象之中。换句话说:数据和数据上的操作是分离的,将其映射到现实世界中,所有对象的属性及动作是相关联的。一个Java程序可以看做是一个相互操作的对象的集合。一个好的设计原则是高内聚低耦合。

                

    6.对象的组合:一个对象可以包含另一个对象,称之为组合。换句话说:一个对象可以被几个其他聚集对象所拥有。
                              
       7.类的设计原则:(1)内聚性:类应描述单一实体,逻辑配合,支持连贯目标。不应将学生和教职工放在同一类中。(2)一致性:名字一致,构造默认实例的公共无参构造方法。(3)封装性:使用private修饰符隐藏数据,以免直接篡改和易于维护,使用set和get更新设置。(4)清晰性:易于理解和解释。(5)完整性:类的属性和方法可以满足不同用户的不同需求;(6)实例和静态:若一个变量被所有实例所共享,则将其声明为静态;譬如numberofObjects设置为静态方法,使用类名引用静态变量和方法可以增加可读性并避免错误。尽可能使用set方法改变静态作用域而非构造方法传入参数。

                    

(五)几个实例
      1.设计堆栈类:栈后进先出,编写测试程序,定义一个类建模栈,使用类创建一个栈,其中存储0~9这十个数,逆序显示,UML图如下图所示,项目示例为p288:
       注意:(1)i++和++i的区别为:都是i=i+1的意思,区别在于i++是i先不自加,在语句完后自加,++i先自加;列如a=1+i++;i本来为1的话,这里a=1+1;语句完后i才加1为2;a=1+++i的话就先i=i+1;i=2.然后a=i+1,a=3;(2)System.arraycopy(elements, 0, temp, 0, elements.length);可以实现原始数组到目标数组的复制。

                                     

(六)小结

                     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张云瀚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值