Java(一)对象导论

什么是对象(Object)

可以在计算机程序中被表示成唯一的实体。这些实体就是对象,每一个对象都属于定义了特性和行为的某个特定的类;
例如:“人类”就是一个类,那么具体的某个人“张三”就是“人类”这个类的对象,而“名字、年龄”等信息就是对象的属性,人的动作比如“吃饭、穿衣”等就是对象的方法。
对象是类的实例

什么是类

类描述了具有相同特性(数据元素)和行为(功能)的对象集合。一旦类被建立,就可以随心所欲地创建类的任意个对象,然后去操作它们。

每个对象都提供服务

当正在试图开发或理解一个程序设计时,最好的方法之一就是将对象想象为“服务提供者”。程序本身将向用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。你的目标就是去创建能够提供理想的服务来解决问题的一系列对象。

Java的访问权限

Java用三个关键字在类的内部设定边界:

  • public:声明的为公共成员变量和函数成员,在整个类内类外都可使用;
  • private:声明的为私有成员变量和函数成员,只在声明的类内可以使用;
  • protected:声明的为受保护成员变量和函数成员,只在声明的类内可以使用。(protected关键字与private作用相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员);

Java还有一种默认的访问权限,当没有使用前面任何访问指定词时,它将发挥作用。这种权限通常被称为包访问权限,因为在这种权限下,类可以访问在同一个包中的其他类成员,但是在包之外,这些成员如同指定了private一样;
这里写图片描述

复用具体实现

代码复用是面向对象程序设计语言所提供的最了不起的优点之一。
最简单地复用某个类的方式就是直接使用该类的一个对象,此外也可以将那个类的一个对象置于某个新的类中,称其为“创建一个成员对象”。新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能方式所组成。因为是在使用现有的类合成新的类,所以这种概念被称为组合 ,如果组合是动态发生的,那么它通常被称为聚合。

  • 组合:表示两个对象之间是整体和部分的强关系,部分的生命周期不能超越整体,或者说不能脱离整体而存在,如人和手;
  • 聚合:表示两个对象之间是整体和部分的弱关系,部分的生命周期可以超越整体,如人和电脑;
class Hand{ }      //手
class Computer{ }  //电脑

//人与手的关系是组合(因为当人死亡后人的手也就不复存在了):  
class Person
{  
  private Hand hand;  
  public Person()
  {  
  hand = new Hand(); 
   }  
}  
//人与电脑的关系是聚合:  
class Person
{  
  private Computer computer;  
  public setComputer()
  {  
  computer = new Computer();  
   }  
} 

继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
生活中的继承:
这里写图片描述
类的继承格式:

class 父类 {
}

class 子类 extends 父类 {      //Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的
}

例如:
公共父类(动物类):

public class Animal { 
    private String name;  
    private int id; 
    public Animal(String myName, int myid) { 
        name = myName; 
        id = myid;
    } 
    public void eat(){ 
        System.out.println(name+"正在吃"); 
    }
    public void sleep(){
        System.out.println(name+"正在睡");
    }
    public void introduction() { 
        System.out.println("大家好!我是"         + id + "号" + name + "."); 
    } 
}

企鹅类:

public class Penguin extends Animal { 
    public Penguin(String myName, int myid) { 
        super(myName, myid); 
    } 
}

老鼠类:

public class Mouse extends Animal { 
    public Mouse(String myName, int myid) { 
        super(myName, myid); 
    } 
}

继承的特性:

  • 子类拥有父类非private的属性,方法;
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展;
  • 子类可以用自己的方式实现父类的方法;
  • Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性;
  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系;
  • 所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承object(这个类在 java.lang 包中,所以不需要 import)祖先类;

单根继承结构

在Java中,所以的类最终都继承自单一的基类,这个终极基类的名字就是Object;单根继承结构保证所有对象都具备某些功能!

容器

在Java中,具有满足不同需要的各种类型的容器,例如List(用于存储序列)、Map(也被称为关联数组,用来建立对象之间的关联)、set(每种对象类型只持有一个),我们需要对容器有所选择:

  • 不同容器提供了不同类型的接口和外部行为;
  • 不同的容器对于某些操作具有不同的效率,例如:ArrayList和LinkedList,ArrayList随机访问元素是一个花费固定时间的操作,但是对于LinkedList来说,随机选取元素需要在列表中移动,这种代价是高昂的,访问越靠近表尾的元素,花费的时间越长。而另一方面,如果想在序列中间插入一个元素,LinkedList的开销却比ArrayList要小;

参数化类型

在Java SE5出现之前,容器存储的对象都只具有Java中的通用类型:Object。单根继承结构意味着所有东西都是Object类型的,所以可以存储Object的容器可以存储任何东西,这使得容器很容易被复用。
但是由于容器只存储Object,所以当将对象引用置入容器时,它必须被向上转型为Object,因此它会丢失其身份。当把它取回时,就获取了一个对Object对象的引用,而不是对置入时的那个对象的引用。所以,怎样才能将它变回先前置入容器中时具有实用接口的对象呢?

这里用到了转型,向下转型为更具体的类型。这种转型方式称为向下转型,然而向下转型几乎是不安全的;并且向下转型和运行时的检查都需要额外的程序运行时间,也需要程序员付出更多的心血。那么能不能创建一个这样的容器,它知道自己所保存的对象的类型,从而不需要向下转型以及消除犯错误的可能,这样不是更有意义吗?
这种解决方案被称为参数化类型机制,Java SE5的重大变化之一就是增加了参数化类型,在Java中它称为范型:

ArrayList<Person> persons = new ArrayList<Person>()

对象的创建和生命期

在使用对象时,最关键的问题之一便是它们的生成和销毁方式。每个对象为了生存都需要资源,尤其是内存。当我们不在需要一个对象时,它必须被清理掉,使其占有的资源可以被释放和重用;那么怎样才能知道何时销毁这些对象呢?当处理完某个对象之后,系统某个其他部分可能还在处理它。

Java是在被称为堆(heap)的内存池中动态地创建对象,在这种方式中,直到运行时才知道需要多少对象,它们的生命周期如何,以及它们的具体类型是什么。这些问题的答案只能在程序运行时相关代码被执行到的那一刻才能确定。如果需要一个新对象,可以在需要的时刻直接在堆中创建。因为存储空间是在运行时被动态管理的,所以需要大量的时间在堆中分配存储空间,这可能要远远大于在堆栈中创建存储空间的时间;

然而,如果是在堆上创建对象,编译器就会对它的生命周期一无所知。因此,Java提供了被称为“垃圾回收器”的机制,它可以自动的发现对象何时不再被使用,并继而销毁它。Java的垃圾回收器被设计用来处理内存释放的问题,垃圾回收器知道对象何时不再被使用,并自动释放对象占用的内存;

异常处理:处理错误

异常是一种对象,它从出错点地点被“抛出”,并被专门设计用来处理特定类型错误的相应的异常处理器“捕获”。异常处理就像是与程序正常执行路径并行的、在错误发生时执行的另一条路径。因为它是另一条完全分离的执行路径,所以它不会干扰正常的执行代码。此外,异常不能被忽略,所以它保证一定会在某处得到处理。
最后需要指出的是:异常提供类来一种从错误状况进行可靠恢复的途径,现在不再是只能退出程序,你可以经常进行校正,并恢复程序的执行;

客户端编程

1:插件(plug-in)

下载一段代码,并将其插入到浏览器中适当的位置,以此来为浏览器添加新功能。

2:脚本语言

插件引发了浏览器脚本语言(scripting language)的开发。脚本语言先天就相当易于理解,因为它们只是作为HTML页面一部分的简单文本,当服务器收到要获取该页面的请求时,它们可以被快速加载;

3:Java applet

applet是只在Web浏览器中运行的小程序,它是作为网页的一部分而自动下载的(就像网页中的图片被自动下载一样)。当applet被激活后,它便开始执行一个程序;

4:.NET和C#

.NET平台大致相当于Java虚拟机(JVM,即执行Java程序的软件平台)和Java类库,而C#毫无疑问与Java有类似之处;

5:Internet与Intranet

当Web技术仅限用于特定公司的信息网络时,它就会被称为Intranet(企业内部网)。Intranet比Internet提供了更高的安全性,因为可以物理地控制对公司内部服务器的访问;

服务器端编程

Java编写被称为Servlet的程序来实现服务器 端编程。Servlet及其衍生物JSP,是许多开发网站的公司迁移到Java上的主要原因;

参考书籍:Java编程思想
以上只是学习所做的笔记,以供日后参考!!!

猜你喜欢

转载自blog.csdn.net/z1790424577/article/details/81317823