Java 类与对象

面向对象程序设计(Object-oriented Programming, OOP)

面向对象的基本特征

① 封装性:封装是将东西包围起来通过自己想定义的方式获取。面向对象程序语言把过程和数据包围起来,通过定义的接口访问数据。

② 抽象性:抽象是对数据进行实例分析,抽取其共同性质的结果,抽象包括两个方面,一是过程抽象,二是数据抽象。

③ 继承性:继承是是基于层次关系的不同类共享数据和操作的一种机制。父类定义了其所有子类的公共属性和操作,在子类中除了定义自己特有的属性和操作外,还可以对父类(或祖先类)中的操作重新定义其实现方法,即重载。

④ 多态性:多态性是是指同一操作作用于不同对象上可以有不同的解释,并产生不同的执行结果。动态绑,是指在程序运行时才将消息所请求的操作与实现该操作的方法进行连接。

类声明

[修饰符] class 类<泛型> [extends 父类][implements 接口列表]
{
    成员变量的声明;
    成员方法的声明及实现;
    类的构造方法;
}

必须项 — 关键字class和自定义的类名;
可选项 — 方括号[]中的;
<类>、<泛型>、<父类>、<接口> — 合法的Java标识符;
类名标识符 — Java预定通常首字母大写;
<修饰符> — 说明类属性,如public访问权限、abstract 抽象类或final最终类;
<泛型> — 类的参数,带参数的类称为泛型;
成员方法——用来描述对成员变量的操作,不但要声明方法,还要实现方法。

类的构成

类是数据以及对数据的一组操作的封装体。

  • 成员变量 — 类中的数据,反映类的状态和特征;

    [修饰符] 数据类型 变量[=表达式] {,变量[=表达式]};
    

    <修饰符>——说明成员属性的关键字,包括访问权限public、protected、private以及静态成员static、最终方法和最终变量final等;

  • 成员方法 — 类中对数据的操作,表示类的行为能力;

    [修饰符] 返回值类型 方法([参数列表]) [throws 异常类]
    {
        语句序列;
        [return [返回值]];
    }
    

    <修饰符>——说明成员属性的关键字,包括访问权限public、protected、private以及静态成员static、最终方法和最终变量final等。

  • 构造方法 — 为创建类的实例所使用。

    • 用于创建类的实例,并对实例的成员变量进行初始化。
    • 构造方法与类同名;构造方法通过new运算符调用。
    • 一个类可以声明多个构造方法对成员变量进行不同需求的初 始化;如果类没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,该构造器不执行任何代码。
    • 构造方法不需要写返回值类型,也不能定义为void,在方法名前面不声明方法类型。
    • 构造方法可以重载,不同的参数个数,类型,顺序

this引用

Java类中的每个成员方法都可以使用代词this引用调用该方法的当前对象自己。
(1) 指代对象本身
//相当于当前对象自身的引用。
(2) 访问本类的成员变量和成员方法
//通过this引用当前对象的成员变量,调用当前对象的成员方法。

this.成员变量
this.成员方法([参数列表])

instanceof 对象运算符

对象运算符instanceof 判断一个对象是否属于指定类及其子类,返回boolean类型。

Time1 t=new Time1();
t instanceof Time1; //返回true,t是Time1类的

Java参数传值

  • 适用范围:8种基本数据类型:boolean , byte , char ,short , int ,long ,float ,double;String对象;
  • 特点:在内存中复制一份数据,把复制后的数据传递到方法内部;
  • 作用:在方法内部改变参数的值,外部数据不会跟着发生改变。

例子:

public class test
{
    public void f1(int n){
        n = 10;
}
public void f2(String s){
    s = "abcd";
}
public static void main(String[] args){
    test obj = new test();
    int m = 5;
    obj.f1(m);
    System.out.println(m);

    String s1 = "test string";
    obj.f2(s1);
    System.out.println(s1);
} 

输出结果:

5
test stri

Java参数传引用

  • 适用范围:数组,除String以外的其他所有类型的对象,但字符串可以用StringBuffer动态字符串是传引用;
  • 特点:将对象的地址传递到方法内部;
  • 作用:在方法内部修改对象的内容,外部数据也会跟着发生改变。

    public class test
    {
        public void f1(int[] array)
        {
            array[0] = 100;
        }
    
        public void f2(String buffer) 
        {
            buffer="String";
        }
    
        public void f3(StringBuffer buffer) 
        {
            buffer.append(“StringBuffer");//append()是添加字符串的方法
        }
    
        public static void main(String[] args)
        { 
            test obj = new test();
            int[] arr = {1,2,3,4};
            obj.f3(arr);
            System.out.println(arr[0]);
    
            String str1 = new String("test ");
            obj.f2(str1);
            System.out.println(str1);
    
            StringBuffer str2 = new StringBuffer("test ");
            obj.f4(str2);
            System.out.println(str2);
        }
    } 
    

输出结果:

100
test
test StringBuff

Java成员方法重载

一个类中成员变量不能同名,但成员变量与成员方法可以同名。

  • 重载:一个类中可以有多个同名的成员方法,前提是参数列表必须不同,称为类的成员方法重载。
  • 作用:重载多个方法为一种功能提供多种实现;
  • 区分:第一是参数的个数不一样,第二是参数的类型不一样。只要这两方面有其中一方面不一样就可以重载构成方法。
  • 注意:如果两个方法的返回值不同, 而其他都相同。 这个时候并不构成方法的重载, 在编译的时候会报错。

拷贝构造函数

  • 拷贝构造函数是特殊的构造函数,其参数是该类对象,称为拷贝构造方法,它将创建的新对象初始化为形式参数的实例值,实现对象复制功能。
  • Java不提供默认拷贝构造方法。

例子

    public class Person {
        int id;
        int age;
        public Person(int i,int j) { /* 构造方法 */
            id = i;
            age = j;
        }
        public Person(Person p) { /*拷贝构造方法 */
            id=p.id;
            age=p.age;
        }
        public static void main(String[] args) { 
            Person p1 = new Person(30,50);
            Person P2 = new Person(p1); //调用拷贝构造方法复制对象p1
        } 
    }

final关键字

① 修饰普通变量

如果Final修饰基本数据类型的变量(包括String),则其数值一旦在初始化之后便不能更改;

② 修饰成员变量

  • 当用final作用于类的成员变量时,成员变量必须在定义时或者构造器中进行初始化赋值;
  • 当final成员变量被初始化赋值后,就不能再被赋值;
  • 如果类的所有成员变量都定义为final,类创建的对象可以被视为常对象;
  • 当用final修饰的成员变量在定义时初始化,则就不能在构造函数中初始化;
  • 如果final修饰的成员变量在构造器中初始化时,就不能在定义时初始化;
  • 当final成员变量没有在定义时初始化时,就必须显式提供构造函数初始化。

③ 修饰引用变量

  • 如果final是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象;
  • 但引用所指向的对象数据成员(属性)是可以改变。

④ 修饰函数形参

  • 如果final是形参为基本类型变量,则形参作为局部变量传值,对外部变量的值不产生影响,作为局部变量的形参由于有final限定,因此在成员方法中不能被修改;
  • 如果final是形参为引用类型的对象,该形参就不能再次引用其他对象,但传给该形参的实参所引用的对象的数据成员(属性)是可以改变。

⑤ 修饰成员方法

如果final修饰成员方法,该方法禁止 该方法在子类中被覆盖或者重写 。

⑥ 修饰Java类

如果final修饰类,表明这个类不能被继承。

static变量

  • static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。

  • 被static修饰的成员变量和成员方法独立于该类的任何对象。它不依赖类特定的实例,被类的所有实例共享。

  • 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内找到它。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

  • public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。

  • static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的成员方法中使用,但是不能在其他类中通过类名来直接引用。

finalize() 方法

它在对象被垃圾收集器析构(回收)之前调用,这个方法叫做 finalize( ),它用来清除回收对象。
例如,你可以使用 finalize() 来确保一个对象打开的文件被关闭了。
在 finalize() 方法里,你必须指定在对象销毁时候要执行的操作。
finalize() 一般格式是:

protected void finalize()
{
   // 在这里终结代码
}

关键字 protected 是一个限定符,它确保 finalize() 方法不会被该类以外的代码调用。
当然,Java 的内存回收可以由 JVM 来自动完成。如果你手动使用,则可以使用上面的方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值