【JAVA】【类&对象&接口】(1)类与对象的修饰符

一、java中的面向对象类型

面向对象两个基本概念:类、对象

1. 类:

类是一个模板,抽象一类对象的属性、和方法。类由一些保存值的数据字段和处理这些值的方法组

类的属性通过字段表示,一个类包含如下字段:
2) 类字段(静态变量):类变量为static类型,此类的所有实例(对象)共用类变量的一个拷贝。类变量存储在静态存储区,在首次被访问时创建,在程序结束时释放。
3) 成员字段:在类内、方法外定义,一般是类的属性,其生命周期限于类对象生命周期期间。其在类对象实例化时创建,类对象释放时释放。实例变量最少需要被一个构造方法、或方法引用,使得通过这些方法可以操作成员变量。
4) 局部变量 (字段):在类的方法中定义,其生命周期仅限于方法内,在方法执行时创建,方法执行完毕后释放。

类包含如下方法:

  1. 构造方法:构造方法的名称必须和类名相同。

  2. 其他方法。

2、对象:

 对象是类的一个实例,有方法和属性。

 对象通过实例化类创建,方法是使用 new 关键字、并调用构造方法来初始化对象。

3、定义语法

 (1)类定义

  修饰符 class 类名 {

    ....

  }

(2) 方法定义

  修饰符 返回值类型 方法名(参数1类型 参数1, 参数2类型 参数2){

    ......
    return; //可选
  }

(3) main方法定义(java程序的入口)

  public static void main(String[] args) {
    ......
  }

一个类的定义包含一个签名和一个主体。类的签名定义类的名称,可能还会指定其他重要信息。类的主体是一些放在花括号里的成员。类的成员一般包含字段和方法,也可以包含构造方法、初始化程序和嵌套类型。

4、类字段/方法 和 实例字段/方法

类的成员(字段和方法)可以分为:

(1) 类字段

(2) 实例字段

(3) 类方法

(4) 实例方法

类实例、方法也可以称之为静态成员,通过static关键字修饰符定义。静态成员属于类本身,而非静态成员属于类的实例。

二、Java中的修饰符
Java中的修饰符可以分为“访问控制类修饰符”和“非访问控制修饰符”。

1、访问控制类修饰符:

包含public、protected、private。

1)修饰类

  (1)public:对所有类可见

  (2)protected:对同一包内可见。

  (3)default:不带任何访问控制修饰符。同protected,仅同一包内可见。

   注:类(外部类,内部/外部类见后续章节)不可以用private进行修饰的。

2)修饰方法、字段:

  (1)private:仅同一类内可见。

  (2)protected:同一包内的类,或本类的子类可见。

  (3)public:对于所有类可见。

  (4)default:不带任何访问控制修饰符。仅同一包内的类可见。(与protected的区别:protected同一包内的类、或其子类可见。default仅同一包内的类可见)

2、非访问控制类修饰符:

  1. static:

  修饰字段、方法。

  (1)修饰字段:类字段,用于声明类的静态变量。(非static修饰的字段,称之为实例字段)

  (2)修饰方法:类方法,用来声明独立于对象的静态方法。(非static修饰的字段,称之为实例方法)

  注意:

  (1)static修饰的字段、方法是绑定到类自身,而不是类的实例。

  (2)类方法不能使用非类字段和非类方法。(原因是:类方法独立于类的实例,没有创建类的实例时即可调用。而实例字段、实例方法只有在创建类的实例后,才有效)。

  (3)局部变量不能声明为static。

  关于类字段和类方法:

  (1)通过public修饰公开的类字段,类似于C语言的全局变量。不过,Java中的类字段的名称被定义它的类名限定。因此, 如果不同的类定义了同名的类字段, 不会像C语言一样出现名称冲突问题。

  (2)类似地,通过public修饰公开的类方法,类似于其他编程语言的全局方法、或全局函数。

  (3)在调用类字段、类方法时,本类内访问方式为“字段/方法名”,本类外访问方式为 “类名.字段/方法名”。

  关于实例字段和实例方法:

  (1)实例方法可以调用类字段、类方法。

  (2)在本实例的类外部,需要调用本类的实例方法,方式是“本类实例引用名.方法名”。

  (3)所有实例方法都使用了一个隐式参数,方法签名里没显示这个参数。这个隐式参数 是 this,它的值是调用这个方法的实例引用。

  1. final:
      修饰类、字段、方法。

  修饰类:修饰的类不能够被继承。注:

    (1)类不能同时被修饰为final和abstract。

  修饰字段:修饰的字段为常量。注:

    (1)修饰为final的成员字段,在类实例化时赋值后,不能被更改。

    (2)也可通过final修饰类字段,即static final,此种方式修饰的字段类似与C语言中的全局常量,在类定义时赋值,其后不可修改。字段同时使用static 和 final ,本字段就是编译时常量,javac 会将其内联化。

  修饰方法:修饰的方法不能被 子类 重写。注:

    (1)使用final修饰的方法能获取普通方法无法得到的编译器优化。

    (2)所有private方法都隐式添加了final修饰符。

    (3)final类的所有方法都隐式添加了final修饰符。

  1. abstract:
      修饰类、方法。

  修饰类:表示类为抽象类。抽象类不能用来进行实例化,其唯一的目的是被继承。抽象类,可以包含抽象方法、或非抽象方法。

  修饰方法:表示方法为抽象方法。抽象方法仅定义方法签名,不包含方法的实现主体,其方法主体通过一个分号代替;具体实现由其 子类 类提供。 注:

  (1)抽象方法不能声明为final和static(final修饰的方法不能被 子类 重写,与抽象方法需要子类实现矛盾)。

  (2)包含抽象方法的类 必须 为抽象类(非抽象的类可以实例化,若果包含了抽象方法,会导致实例的方法不可用)。

  1. synchronized、volatile:
      synchronized修饰方法。主要用于多线程编程。

  本修饰符实现线程安全的方法,synchronized修饰符声明的方法同一时间只能被一个线程访问。

  线程调用 synchronized 修饰的方法之前,必须先为方法所在的类(针对 static 修饰的方法)或 对应的类实例(针对没使用 static 修饰的方法)获取一个锁,避免两个线程同时执行该方法。

  volatile修饰字段。

  volatile修饰符表示字段的值必须始终从主存储器中读取和释放,不能被线程缓存(在寄存器或 CPU 缓存中)。每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

  更多描述,见后续多线程编程部分。

  1. strictfp:
      修饰类、方法。

  这个修饰符表示浮点数不扩展精度。如果类声明为strictfp,则这个类的所有方法都需要声明为strictfp。

  这个修饰符极少使用。

 
6) native:
  修饰方法。

  native修饰的方法表示此方法的实现由某种“本地”语言编写,例如C语言,并且开放给java程序使用。

  native修饰的方法没有主体,花括号及包含的实现主体被分号替代。

  现在native修饰符极少使用。

修饰符总结:

1、访问控制修饰符

2、非访问控制修饰符

三、类中方法的this隐式参数
类中的方法包含一个隐式的this参数。

(1)在实例方法中,this作为隐式的这个方法的实例引用。如果方法的入参、或方法局部变量 和类中的某个字段同名,就必须使用 this.字段名指向类中的字段。

(2)类方法也能使用this关键字,可以通过this关键字调用本类的其他类方法。

posted @ 2021-11-24 18:55  小拙  阅读(191)  评论(0编辑  收藏  举报