Java入门教程八(面向对象)

对象概念

一切皆是对象。把现实世界中的对象抽象地体如今编程世界中,一个对象表明了某个具体的操做。一个个对象最终组成了完整的程序设计,这些对象能够是独立存在的,也能够是从别的对象继承过来的。对象之间经过相互做用传递信息,实现程序开发。对象有如下特色:对象具备属性和行为。对象具备变化的状态。对象具备惟一性。对象都是某个类别的实例。java

三大特性

封装

封装是将代码及其处理的数据绑定在一块儿的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用。
Java 语言的基本封装单位是类。因为类的用途是封装复杂性,因此类的内部有隐藏实现复杂性的机制。Java 提供了私有和公有的访问模式,类的公有接口表明外部的用户应该知道或能够知道的每件东西,私有的方法数据只能经过该类的成员代码来访问。sql

继承

如同生活中的子女继承父母拥有的全部财产,程序中的继承性是指子类拥有父类数据结构的方法和机制,这是类之间的一种关系;继承只能是单继承编程

多态

面向对象的多态性,即“一个接口,多个方法”。多态性体如今父类中定义的属性和方法被子类继承后,能够具备不一样的属性或表现方式。多态性容许一个接口被多个同类使用,弥补了单继承的不足。数组

类和对象

具备相同特性(数据元素)和行为(功能)的对象的抽象就是类,所以对象的抽象是类,类的具体化就是对象,也能够说类的实例是对象。例如:人是一个类,你我就是对象。人类具备身高、体重等属性和说话、走路等方法。安全

人类:对象你我他

类是构造面向对象程序的基本单位,是抽取了同类对象的共同属性和方法所造成的对象或实体的“模板”。而对象是现实世界中实体的描述,对象要建立才存在,有了对象才能对对象进行操做。类是对象的模板,对象是类的实例网络

类的定义

在 Java 中定义一个类,须要使用 class 关键字、一个自定义的类名和一对表示程序体的大括号,类名应该如下划线()或字母开头,最好以字母开头;第一个字母最好大写,若是类名由多个单词组成,则每一个单词的首字母最好都大写;类名不能为 Java 中的关键字,例如 boolean、this、int 等;类名不能包含任何嵌入的空格或点号以及除了下划线()和美圆符号($)字符以外的特殊字符数据结构

public class Person{
    private int age;//年龄属性
    private String name;//姓名属性
    public void speak(){//说话方法
    }
}

经常使用关键字

public:表示“共有”的意思。若是使用 public 修饰,则能够被其余类和程序访问。每一个 Java 程序的主类都必须是 public 类,做为公共工具供其余类和程序使用的类应定义为 public 类。
abstract:若是类被 abstract 修饰,则该类为抽象类,抽象类不能被实例化,但抽象类中能够有抽象方法(使用 abstract 修饰的方法)和具体方法(没有使用 abstract 修饰的方法)。继承该抽象类的全部子类都必须实现该抽象 类中的全部抽象方法(除非子类也是 抽象类)。
final:若是类被 final 修饰,则不容许被继承。
extends:表示继承其余类。
implements:表示实现某些接口。架构

对象

对象是对类的实例化。对象具备状态和行为,变量用来代表对象的状态,方法代表对象所具备的行为,使用 new 关键字建立对象函数

类名 对象名=new 类名();
//人类
public class Person{
    public int age;//年龄属性
    public String name;//姓名属性
    public void speak(){//说话方法
    }
}
//建立类的对象
Person person = new Person();
person.age=20;
person.name="Hello World";

对象的销毁

对象使用完以后须要对其进行清除。对象的清除是指释放对象占用的内存。在建立对象时,用户必须使用 new 操做符为对象分配内存。不过,在清除对象时,由系统自动进行内存回收,Java 语言的内存自动回收称为垃圾回收(Garbage Collection)机制,简称 GC。垃圾回收机制是指 JVM 用于释放那些再也不使用的对象所占用的内存。
一个对象被看成垃圾回收的状况主要以下两种:工具

对象的引用超过其做用范围

{
    Object o=new Object();    //对象o的做用范围,超过这个范围对象将被视为垃圾
}

对象被赋值为 null

{
    Object o=new Object();
    o=null;    //对象被赋值为null将被视为垃圾
}

在 Java 的 Object 类中还提供了一个 protected 类型的 finalize() 方法,所以任何 Java 类均可以覆盖这个方法,在这个方法中进行释放对象所占有的相关资源的操做
在 Java 虚拟机的堆区,每一个对象均可能处于如下三种状态之一。

可触及状态:当一个对象被建立后,只要程序中还有引用变量引用它,那么它就始终处于可触及状态。

可复活状态:当程序再也不有任何引用变量引用该对象时,该对象就进入可复活状态。在这个状态下,垃圾回收器会准备释放它所占用的内存,在释放以前,会调用它及其余处于可复活状态的对象的 finalize() 方法,这些 finalize() 方法有可能使该对象从新转到可触及状态。

不可触及状态:当 Java 虚拟机执行完全部可复活对象的 finalize() 方法后,若是这些方法都没有使该对象转到可触及状态,垃圾回收器才会真正回收它占用的内存。

构造方法

构造方法是类的一种特殊方法,用来初始化类的一个新的对象。Java 中的每一个类都有一个默认的构造方法,它必须具备和类名相同的名称,并且没有返回类型。构造方法的默认返回类型就是对象类型自己,而且构造方法不能被 static、final、synchronized、abstract 和 native 修饰

class class_name
{
    public class_name(){}    //默认无参构造方法
    public ciass_name([paramList]){}    //定义构造方法
    …
    //类主体
}

public class MyClass
{
    private int m;    //定义私有变量
    MyClass()
    {
        //定义无参的构造方法
        m=0;
    }
    MyCiass(int m)
    {
        //定义有参的构造方法
        this.m=m;
    }
}

类的构造方法不是要求必须定义的。若是在类中没有定义任何一个构造方法,则 Java 会自动为该类生成一个默认的构造方法。默认的构造方法不包含任何参数,而且方法体为空。若是类中显式地定义了一个或多个构造方法,则 Java 再也不提供默认构造方法。

析构方法

析构方法与构造方法相反,当对象脱离其做用域时(例如对象所在的方法已调用完毕),系统自动执行析构方法。析构方法每每用来作清理垃圾碎片的工做,例如在创建对象时用 new 开辟了一片内存空间,应退出前在析构方法中将其释放。在 Java 的 Object 类中还提供了一个 protected 类型的 finalize() 方法,所以任何 Java 类均可以覆盖这个方法,在这个方法中进行释放对象所占有的相关资源的操做
对象的 finalize() 方法具备以下特色:
垃圾回收器是否会执行该方法以及什么时候执行该方法,都是不肯定的。
finalize() 方法有可能使用对象复活,使对象恢复到可触及状态。
垃圾回收器在执行 finalize() 方法时,若是出现异常,垃圾回收器不会报告异常,程序继续正常运行。

protected void finalize()
{
    //对象的清理工做
}

public class Counter
{
    private static int count=0;    //计数器变量
    public Counter()//构造方法
    {
        this.count++;    //建立实例时增长值
    }
    public int getCount()        //获取计数器的值
    {
        return this.count;
    }
    protected void finalize()//析构方法
    {
        this.count--;    //实例销毁时减小值
        System.out.println("对象销毁");
    }
}

包(package)

在编写 Java 程序时,随着程序架构愈来愈大,类的个数也愈来愈多,这时就会发现管理程序中维护类名称也是一件很麻烦的事,尤为是一些同名问题的发生。有时,开发人员还可能须要将处理同一方面的问题的类放在同一个目录下,以便于管理。Java 为了解决上述问题,提供了包机制

系统包

包容许将类组合成较小的单元(相似文件夹),它基本上隐藏了类,并避免了名称上的冲突。包容许在更普遍的范围内保护类、数据和方法,能够在包内定义类,而在包外的代码不能访问该类,经常使用系统包:

Java.lang   Java 的核心类库,包含运行 Java 程序必不可少的系统类,如基本数据类型、基本数学函数、
字符串处理、异常处理和线程类等,系统默认加载这个包
java.io Java 语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等
java.util   包含如处理时间的 Date 类,处理动态数组的 Vector 类,以及 Stack 和 HashTable 类
java.awt    构建图形用户界面(GUI)的类库,低级绘图操做 Graphics 类、图形界面组件和布局管理
(如 Checkbox 类、Container 类、LayoutManger 接口等),以及用 户界面交互控制和事
件响应(如 Event 类)
java.awt.image  处理和操纵来自网上的图片的 java 工具类库
java.wat.peer   不多在程序中直接用到,使得同一个 Java 程序在不一样的软硬件平台上运行
java.net    实现网络功能的类库有 Socket 类、ServerSocket 类
java.lang.reflect   提供用于反射对象的工具
java.util.zip   实现文件压缩功能
java.awt.datatransfer   处理数据传输的工具类,包括剪贴板、字符串发送器等
java.sql    实现 JDBC 的类库
java.rmi    提供远程链接与载入的支持
java. security  提供安全性方面的有关支持

自定义包

Java 的系统包无须定义能够直接调用,也能够自定义包

声明

package 包名;

使用

在要引用的类名前带上包名做为修饰符,bookexample 是包名,Test 是包中的类名,test 是类的对象

bookexample.Test test = new bookexampie.Test();

在文件开头使用 import 引用包中的类

import bookexample.Test;
相关文章
相关标签/搜索