• Java类与对象


    一、基本概念

      类是为了让程序设计语言能更加清楚地描述日常生活中的事物。是对某一类事物+的描述,是抽象的。

      概念上的定义:而对象则是实际存在的属该类事物的具体的个体,所以也称为实例(instance)。

      对象是类的一个实例,是实实在在的个体,一个类可以有多个对象。

      面向对象程序设计思想的重点是类的设计而不是对象的设计。

      类是由数据成员和函数成员封装而成的。数据成员则称为类的属性,函数成员则称为类的行为。

      函数也称为方法,它可以简化程序的结构,也可以节省编写的相同代码的时间,达到程序模块化的目的。

      使用方法 来编写程序可以把特定的功能的程序代码独立出来,这样可以简化代码、精简重复代码的程序流程。

      所以总结来说就是类将某事物的数据与相关功能封装起来,形成一种特殊的数据结构,用以表达真实事物的一种抽象。

    二、定义类

      1、定义类实际上就是声明类的属性与方法。

      结构:[类修饰符] class 类名称

      {

        [修饰符] 数据类型 成员变量名称;

        [修饰符] 数据类型 成员变量名称;

        .

        .

        [修饰符] 返回值的数据类型 方法名(参数1,参数2,...)//方法可以不带参数

        {

          语句序列;

          return [表达式];//返回数据类型可以是没有返回值的类型void

        }

        .

        .

      }

      //其中[]表示的内容都可以省略

      2、分析类修饰符的用法

      类修饰符一共有四种分别是public、abstract、final、缺省

      一个类可以有多个修饰符,且无先后之分,但是abstract和final是相互对立,所以不能同时应用在一个类的定义中。

      一个.java文件中可以有多个class(类),但是只能有一个是用public修饰符修饰的,而且这个类的名称必须与.java文件名相同。

    修饰符 含义
    public 将一个类声明为公共类,它是可以被任何的对象访问
    abstract 将一个声明为抽象类,没有实现方法,需要子类提供方法实现,所以不能创建该类的实例
    final 将一个类声明为最终类即非继承类,表示它不能被其他的类所继承
    缺省 缺省修饰符时,则表示只有在同包中的对象才能使用这样的类

      3、成员变量

       一个类的成员变量可以是简单的变量,也可以是对象数组等结构型数据。

       [修饰符] 变量类型 变量名 [=初值];

      4、分析成员属性的修饰符

        成员属性的修饰符有访问控制符,静态修饰符,最终修饰符,过度修饰符,易失修饰符

        一个成员变量可以被两个以上的修饰符同时修饰,但游戏王修饰符是不能同时定义在一起。

        在定义类的成员修饰符的时候,可以读成员变量进行赋初值,表明成员变量的初始状态,但对成员变量的操作只能放在方法中。

    修饰符 含义
    public 公共访问控制符,指定该变量为公共的,它可以被任何对象的方法访问。
    private 私有访问控制符。指定该变量只能同一个类(当前类)中的方法可以访问,其他类,(包括子类)不能访问此变量。
    protected 保护访问控制符。指定该变量只可以被它自己的类及其子类或同一包中的其他类访问,在子类中可以覆盖此变量。
    缺省 缺省访问控制符时,则表示在同一个包中的其他类可以访问此成员变量,而其他包中的类不能访问该成员变量。
    final 最终修饰符。指定该变量的值不能改变。
    static 静态修饰符。指定该变量被所有对象共享,即所有的实例都可使用该变量。
    transient 过渡修饰符。指定该变量是一个系统保留,暂无特别作用的临时性变量。
    volatile 易失修饰符,指定该变量可以同时被几个线程控制和修改。

       5、类的成员方法。

        类的方法是用来定义对类的成员变量进行操作的,是实现类内部功能的机制,同时也是类与外界进行交互的重要窗口,声明方法的格式如下:

        [修饰符]  返回值的数据类型 方法名(参数1,参数2,...)//可以不用添加参数

        {

          语句序列;

          return [表达式];//可以是没有返回值的void型

        }

       6、分析成员方法的函数的修饰符

        修饰符有多种:包括访问控制访问修饰符,静态修饰符,抽象修饰符,最终修饰符,同步修饰符和本地修饰符   

        同样的是方法的修饰符也是可以同时有多个,但是互斥的修饰符不能同时出现。 

    修饰符 含义
    public 公共访问控制符。指定该方法为公共的,它可以被任何对象方法访问
    private 私有访问控制符。指定该方法只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能方法此方法。
    protected 保护访问控制符。指定该方法只可以被它的类及其或者同一包中的其他访问
    缺省 缺省访问控制符,则表示在同一个包中的其他类可以访问此成员方法,而其他包中的类不能访问该成语方法
    final 最终修饰符。指定该方法不能被重载
    static 静态修饰符。指定不需要实例化一个对象就可以激活的方法
    abstract 抽象修饰符。指定该方法只声明方法头,而没有方法体,抽象方法需在子类中被实现
    synchronized 同步修饰符。在多线程程序中,该修饰符用于在运行前,对它所属的方法加锁,以防止其他线程访问,运行结束后解锁
    native 本地修饰符。指定此方法的方法体是用其他语言(如C)在程序外部编写的。

       7、总结一下四种访问修饰符的使用情况 

    作用域 当前类 同一包(package) 子孙类 其他包(package)
    public
    protected ×
    friendly(缺省) × ×
    private × × ×

        friendly的情况是不写访问修饰符,就是缺省的情况,但是在Java中是不存在friendly这种情况的说法,它是 源自C++。

        访问修饰符修饰class时只能是public,和缺省。并不鞥使用protected和private

        而在使用访问修饰符修饰类的属性时,一般使用private,通过getter和setter方法来访问类的属性。

        8、成员变量与局部变量的区别

        由类和方法的定义可以,在类和方法中均可以定义属于自己的变量。类中定义的变量是成员变量,而方法中定义变量是局部变量。

        (1)、从语法形式上看,成员变量是属性类的,而局部变量是在方法中定义的变量或者是方法的参数;成员变量可以被public、private、 static等修饰符所修饰,而局部变量则不能被访问修饰符及static所修饰;成员变量和局部变量都可以被final所修饰。

        (2)、从变量在内存中的储存方式上看,成员变量是对象的一部分,而对象是存在于堆内存的,而局部变量是存在于栈内存的。

        (3)、从变量在内存中的生存时间上,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而产生,随着方法的结束而自动消失

        (4)、成员变量如果没有被赋值,则会自动以类型的默认值赋值(有一种情况例外,被final西施但没有被static修饰的成员变量必须显式地赋值);而局部变量则不会自动赋值,必须显式地赋值后才能使用。

    三、对象的创建与使用

      1、对象时整个面向对象程序设计的理论基础。

         2、一个对象的声明周期:创建—>使用—>销毁

      3、创建某类的对象步骤:

      (1)、声明指向‘由类所创建的对象’的变量

      (2)、利用new运算符创建新的对象,并指派给前面所创建的变量

      例如:Object obj = new Object();//从内存的角度来分析就是,在栈内存中定义了一个变量obj,用来指向通过new运算符在堆内存中创建的一堆Object对象。也就是说变量obj是对存放在堆内存中对象的引用变量,因为它是指向Object类所创建的对象,所以可将视为‘‘对象的名称”,因而简称对象;事实上,obj变量只是对象的名称,它是指向对象实体的变量,而非对象本身。

         4、因为在方法中定义的变量必须进行初始化,否则无法通过编译,所以当一个对象被创建时,会按照其的基本类型来成员变量的初始值。

      5、通过对象来引用对象成员的格式如下:

        对象.对象成员

      6、匿名对象就是,不定义对象的引用变量,直接用new创建的对象来调用对象的方法等。如new Object().xxx();

      7、使用匿名对象的两种情况:

        (1)、如果对一个对象只需要进行一次的方法调用,那么就可以使用匿名对象。

        (2)、将一个匿名对象作为参数传给方法调用时,可以使用。

      

      

        

  • 相关阅读:
    Go断后,Dart冲前,Google的野心
    gcc dynamic load library
    Go http server 高并发
    还是Go 为了伟大的未来
    windows go dll 框架
    Go cookie
    Go web ajax project
    hdoj 2844 Coins
    hdoj 1203 I NEED A OFFER!
    hdoj 2546 饭卡
  • 原文地址:https://www.cnblogs.com/liangxiaojin/p/7464589.html
Copyright © 2020-2023  润新知