zoukankan      html  css  js  c++  java
  • 【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关键字调用本类的其他类方法。

  • 相关阅读:
    Matlab 绘制三维立体图(以地质异常体为例)
    Azure DevOps的variable group实现array和hashtable参数的传递
    Azure DevOps 利用rest api设置variable group
    Azure AADSTS7000215 其中一种问题的解决
    Power BI 实现实时更新Streaming Dataset
    AAD Service Principal获取azure user list (Microsoft Graph API)
    Matlab 沿三维任意方向切割CT图的仿真计算
    Azure Powershell script检测登陆并部署ARM Template
    Azure KeyVault设置策略和自动化添加secrets键值对
    Azure登陆的两种常见方式(user 和 service principal登陆)
  • 原文地址:https://www.cnblogs.com/yickel/p/15599588.html
Copyright © 2011-2022 走看看