`
bupter520
  • 浏览: 55695 次
  • 性别: Icon_minigender_2
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

类的高级特征

阅读更多

    static关键字用来声明成员属于类,而不是属于类的对象。static (类)变量:类变量可以被类的所有对象共享,以便与不共享的成员变量区分开来;static (类)方法:静态方法可以通过类名直接调用该方法,而不用通过对象调用。静态方法不能被覆盖成非静态。同样,非静态方法也不能被覆盖成静态方法。    
    单态设计模式,也就是说一个类只产生一个对象。那么怎么才能做到这一点呢?我们知道构造器是用来构造对象的。首先要对构造器入手。既然只产生一个对象,那么我们就干脆先一刀砍断,把构造器的访问权限定义成私有,不能在类的外面再构造该类的对象。也就是说只能在类的里面调用该类的构造器来产生对象。那么在该类里应该定义一个静态的属性,并初始化该类的一个对象。(原因是静态的东西只执行一次,也就是说该属性初始化一次。那么每次得到的应该是同一个实例)
public class A {
    int count = 1;
    private static A instance = null;
 
    private A() {  
    }
 
    public static A getClassA() {
      if (null==instance) {
      instance = new A();
    }
      return instance;
    } 
}
    Java编程语言如果使用关键字final修饰类,这个类便不能被继承。比如,类Java.lang.String就是一个 final类。这样做是出于安全原因,因为它保证,如果方法有字符串的引用,它肯定就是类String的字符串,而不是某个其它类的字符串。 
    方法也可以被标记为final。被标记为final的方法不能被覆盖。这是由于安全原因。如果方法具有不能被改变的实现,而且对于对象的一致状态是关键的,那么就要使方法成为final。被声明为final的方法有时被用于优化。编译器能产生直接对方法调用的代码,而不是通常的涉及运行时查找的虚拟方法调用。
    如果变量被标记为final,其结果是使它成为常数。想改变final变量的值会导致一个编译错误。下面是一个正确定义final变量的例子:public final int PI = 3.14。
    内部类,有时叫做嵌套类。内部类允许一个类定义被放到另一个类定义里。内部类是一个有用的特征,因为它们允许将逻辑上同属性的类组合到一起,并在另一个类中控制一个类的可视性。内部类可以访问外部类的属性和方法。你可以把内部类看作"方法"一样,在使用的时候调用执行。你也可以把内部类看作"属性"一样,在构造内部类对象的时候,也会在堆里为内部类的属性分配存储空间。所以内部类也有类似像修饰属性,方法那样的修饰符,比如:public,private,static 等等。当一个类没有用
static  关键字修饰的时候,这个内部类就叫做成员类,类似属性,方法,作为类的成员。
    内部类有如下属性:
内部类只在定义他们的代码段内可见;
内部类可以被定义在方法中。如果方法中的变量被标记为final,那么就可以被内部类中的方法访问;
内部类可以使用所嵌套类的类和实例变量以及所嵌套的块中的本地变量;
内部类可以被定义为abstract;
只有内部类可以被声明为private或protected,以便防护它们不受来自外部类的访问;
一个内部类可以作为一个接口,由另一个内部类实现;
被声明为static的内部类自动地成为顶层类。这些内部类失去了在本地范围和其它内部类中使用数据或变量的能力;
内部类不能声明任何static成员,只有顶层类可以声明static成员。因此一个需求static成员的内部类必须使用来自顶层类的成员。 

内部类的特点总结
(1)  在方法间定义的非静态内部类: 
       ● 外围类和内部类可互相访问自己的私有成员。
       ● 内部类中不能定义静态成员变量。

(2) 在方法间定义的静态内部类:
       ● 只能访问外部类的静态成员。
 
(3) 在方法中定义的局部内部类:
       ● 该内部类没有任何的访问控制权限
       ● 外围类看不见方法中的局部内部类的,但是局部内部类可以访问外围类的任何成员。
       ● 方法体中可以访问局部内部类,但是访问语句必须在定义局部内部类之后。
       ● 局部内部类只能访问方法体中的常量,即用final修饰的成员。

(4) 在方法中定义的匿名内部类:
       ● 没有构造器,取而代之的是将构造器参数传递给超类构造器。


    static变量在某种程度上与其它语言中的全局变量相似。Java编程语言没有这样的全局语言,但static变量是可以从类的任何对象访问的单个变量。当类被装载时,静态块代码只执行一次。类中不同的静态块按它们在类中出现的顺序被执行。
    如果存在继承关系,就先父类后子类;如果在类内有静态变量和静态块,就先静态后非静态,最后才是构造函数;继承关系中,必须要父类初始化完成后,才初始化子类。
    Java语言允许你在一个类中声明一些方法,然而又不实现它。这种方法叫抽象方法。包含一个或多个抽象方法的类叫做抽象类。你可以在抽象类的子类中实现抽象方法。抽象类只能被其它类继承,不能用来创建实例。
    接口是用关键字interface来定义的,接口是客户端代码与提供服务的类之间的"规约"。接口是抽象类的变体。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的使用,弥补了Java技术单继承规则的不足。一个类可以实现多个接口。接口的实现与子类相似,当类实现某个接口时,它必须定义这个接口的所有方法。
    抽象类用于部分实现一个类,再由用户按需求对其进行不同的扩展和完善;接口只是定义一个行为的规范或规定。抽象类在组件的所有实现间提供通用的已实现功能;接口创建在大范围全异对象间使用的功能。抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。抽象类主要用于设计大的功能单元;而接口用于设计小而简练的功能块。
    例如:Window窗体可以用抽象类来设计,可以把公有操作和属性放到一个抽象类里,让窗体和对话框继承自这个抽象类,再根据自己的需求进行扩展和完善。打印操作可以作为一个接口提供给每个需要此功能的窗体,因为窗体的内容不同,就要根据他们自己的要求去实现自己的打印功能。打印时只通过接口来调用,而不用在乎是那个窗体要打印。
    
 
    


















     

分享到:
评论

相关推荐

    JAVA类和对象的高级特征.doc

    "JAVA类和对象的高级特征" 本资源主要讲述了Java语言中面向对象的高级特征,包括抽象类、接口和包的特性。通过本资源的学习,同学们可以使用Java语言中较为深入的技术编写面向对象程序。 知识点: 4.1 抽象类 * ...

    第四章-Java类和对象的高级特征-重庆工商大学PPT优秀资料.ppt

    Java类和对象的高级特征 Java类和对象的高级特征是Java编程语言的核心概念之一,涵盖了抽象类、接口、包等高级特征。 抽象类 抽象类是Java语言中的一种特殊的类,它使用abstract关键字来修饰。抽象类可以包含抽象...

    Java编程技术课件:06类的高级特征(4学时).pptx

    Java编程技术中的类的高级特征是Java编程的核心概念,这些特征包括了`static`关键字、`final`关键字、抽象类(`abstract`)以及接口(`interface`)和内部类等。下面将对这些概念进行深入讲解。 1. **static 关键字...

    Java基础入门教程 Java编程技术06 类的高级特征(4学时)(共55页).pptx

    Java编程技术中的类的高级特征是Java学习的重要组成部分,涵盖了多个关键概念,这些概念对于理解和构建复杂的Java应用程序至关重要。在本教程中,我们将深入探讨以下几个主题: 1. **static关键字**: - `static`...

    基于PSO 面向K近邻分类的特征权重学习算法.pdf

    未来的研究可以进一步探索如何将PSOKNN与其他高级优化算法相结合,以应对更加复杂的数据集和应用场景。 综上所述,基于PSO的特征权重学习算法为K近邻分类提供了一种新的解决方案,不仅有助于提高分类精度,还能帮助...

    HEC.rar_classifier ensemble_ensemble classifier _hec_特征 分类_特征分类

    在人脸识别任务中,特征提取是关键步骤,包括色彩特征、纹理特征、形状特征以及更高级的深度学习特征如卷积神经网络(CNNs)学到的特征。这些特征不仅限于像素强度,还可能涉及边缘检测、角点定位、局部二进制模式...

    opencv,svm,图片分类,胶囊分类,特征训练

    综上所述,这个项目涵盖了从基础的图像预处理到高级的特征表示和模型训练的全过程,使用了OpenCV的图像处理能力和SVM的分类能力,并尝试结合胶囊网络以提升分类效果。在实际操作中,开发者需要对每个环节进行调参和...

    Java编程技术课件:06类的高级特征(对多态、抽象和接口的理解2学时).pptx

    Java编程技术课件:06类的高级特征(对多态、抽象和接口的理解2学时).pptx

    类高级语言编译器的设计与实现

    ### 类高级语言的特征 文章中提到的类高级语言是一种经过简化的编程语言,保留了高级语言的基本数据类型(如整型、字符类型、布尔类型)和控制结构,但去除了数组、指针、文件和集合等复杂的特性,以降低设计和实现...

    JAVA核心技术--高级特征(第八版)--第三部分

    《JAVA核心技术--高级特征(第八版)--第三部分》是一本深入探讨Java编程高级特性的权威指南,涵盖了Java语言的精髓和最新发展。本书分为四部分,确保全面且系统地讲解了Java开发中的关键知识点,而这里我们将聚焦于第...

    基于HOG的目标分类特征深度学习模型.pdf

    通过逐层训练的方式,稀疏自编码器能够提取出比原始HOG特征更具判别性的高级特征,为后续的分类器提供更有效的输入。 为了进一步提高分类准确率,研究者们设计了Softmax多分类器。Softmax函数是多分类问题中的常用...

    vgg16特征提取_成功_利用vGG16_VGG16_vgg16特征提取_vgg16图像分类_图像分类_

    总的来说,VGG16特征提取是一个将深度学习技术应用于图像识别的经典方法,它通过提取高级的视觉特征,帮助我们理解和解决各种图像分类问题。在这个项目中,我们不仅能够掌握如何使用VGG16模型,还能了解到深度学习...

    Graph search 个性化模型中高级特征挖掘浅谈.docx

    ### Graph Search 个性化模型中高级特征挖掘浅谈 #### 导言 随着大数据时代的到来,数据与特征的数量急剧增加,特别是在大规模机器学习领域,数据规模的扩张为算法工程师提供了更丰富的资源来优化模型。尽管深度...

    文本分类 特征选择 VSM

    ### 文本分类特征选择与VSM模型解析 #### 引言 ...随着深度学习的发展,如词嵌入和注意力机制等高级表示方法正在逐渐替代传统的VSM,但VSM的基本思想和原则依然为理解文本分类提供了坚实的理论基础。

    基于事件卷积特征的新闻文本分类

    在本方法中,CNN模型被用来处理更高级的语义信息,而不是简单的n-gram特征,这使得模型在处理文本数据时能够捕捉更丰富的语义和句法信息。 该方法在针对中文新闻的多分类实验中取得了显著的成果。相比于传统的文本...

    对比学习效果差?谷歌提出弱语义负样本,有效学习高级特征!.rar

    在提及的资料中,谷歌提出了一个创新的概念——弱语义负样本,旨在帮助模型更有效地学习高级特征。 对比学习的核心在于通过构建正样本对和负样本对来训练模型,让模型能够区分出相似的实例(正样本)和不相关的实例...

Global site tag (gtag.js) - Google Analytics