精华内容
下载资源
问答
  • *类的声明[修饰符] class [extends 父类名] [implements 接口列表]{ }修饰符:可选,用于指定访问权限,可用值为public,abstract和finnal.类名:一般情况下,要求首字母要大写。extends 父类名:可选,用于指定要...

    *类的声明

    [修饰符] class [extends 父类名] [implements 接口列表]{ }

    修饰符:可选,用于指定访问权限,可用值为public,abstract和finnal.

    类名:一般情况下,要求首字母要大写。

    extends 父类名:可选,用于指定要定义的类继承于哪个父类。

    implements 接口列表:用于指定该类实现的是那些接口。

    一个类被声明为public,就表明该类可以被所有其他的类访问和引用,也就是说程序的其他部分可以创建这个类的对象,访问这个类内部可见的成员变量和调用它的可见方法。

    *成员方法

    [修饰符] ([参数列表]){[方法体]}

    *成员变量

    [修饰符] [static] [final]

    修饰符:可选参数,用于指定变量被访问权限,可选值为public,protected和private。

    static:可选,用于指定该成员变量为静态变量,可以直接通过类名访问。

    final:可选,用于指定该成员变量为取值不会改变的常量

    *局部变量

    [final] ;

    final:可选,用于指定该局部变量为常量。

    *变量的有效范围

    成员变量:在类中声明,在整个类中有效。

    局部变量:在方法内或方法内的复合代码块中声明的变量。只在当前复合块有效。

    展开全文
  • 第十章 类的生命周期10.1 Java虚拟机及程序的生命周期当通过java命令运行一个Java程序时,就启动了一个Java虚拟机进程。Java虚拟机进程从启动到终止的过程,称为Java虚拟机的生命周期。在以下情况下,Java虚拟机会...

    第十章 类的生命周期

    10.1 Java虚拟机及程序的生命周期

    当通过java命令运行一个Java程序时,就启动了一个Java虚拟机进程。Java虚拟机进程从启动到终止的过程,称为Java虚拟机的生命周期。在以下情况下,Java虚拟机会结束生命周期:

    程序正常结束

    程序在执行中因为出现异常或错误而异常终止

    执行了System.exit()方法

    由于操作系统出现错误而导致Java虚拟机进程终止

    当Java虚拟机处于生命周期时,它的总任务就是运行Java程序,Java程序从一开始运行到终止的过程称为程序的生命周期,它和Java虚拟机的生命周期是一致的。

    10.2 类的加载、连续和初始化

    当Java程序需要使用某个类时,Java虚拟机会确保这个类已经被加载、连续和初始化。其中,连接的过程又被分为3个子过程。

    加载:查找并加载类的二进制数据。

    连接:包括验证、准备和解析类的二进制数据。

    验证:确保被加载类的正确性。

    准备:为类的静态变量分配内存,并将其初始化为默认值。

    解析:把类中的符号引用转换为直接引用

    初始化:给类的静态变量赋予正确的初始值。

    所有Java虚拟机实现必须在每个类或接口被Java程序“首次主动使用”时才初始化它们。Java虚拟机对类的使用分为两种:

    主动使用

    被动使用

    10.2.1 类的加载

    是指把类的.class 文件中的二进制数据读入到内存中,把它存放在运行时数据区的方法区中内,然后在堆区创建一个java.lang.Class对象。用来封装类在方法区内的数据结构。

    Java 虚拟机能够从多种来源加载类的二进制数据,包括:

    从本地文件系统中加载类的.class文件。

    通过网络下载类的.class文件。

    从ZIP、JAR或其它类型的归档文件中提取class文件

    从一个专有数据库中提取class文件

    把一个Java源文件动态编译为class文件

    类的加载的最终产品是位于运行时数据区的堆区的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序提供类访问类在方法区的数据结构的接口。

    类的加载是由类加载器完成的,类加载器可分为两种:

    Java虚拟机自带的加载器:包括启动类加载器、扩展类加载器和系统类加载器。

    用户自定义的类加载器:是java.lang.ClassLoader类的子类的实例,用户可以通过它来定制类的加载方式。

    Java虚拟机允许类加载器在预料某个类将要被使用时,就预先加载它,如果在预先加载过程中遇到class文件缺失或存在错误,类加载器必须等到程序首次主动使用该类时才报告错误(抛出一个LinkageError实例)。如果一个类一直没有被程序主动使用,那么类加载器将不会报错。

    10.2.2 类的验证

    当类被加载后,就进入连接阶段,连接就是把已经读入到内存的类的二进制数据合并到虚拟机的运行环境当中。连接的第一步是类的验证。作用是:保证被加载的类的正确性。并且能与其它类协调一致。

    如果Java虚拟机检查到错误,就会抛出相应的Error对象。

    类的验证主要包含以下内容:

    类文件的结构检查:确保类文件遵从Java类文件的固定格式。

    语义检查:确保类本身符合Java语言的语法规定。

    字节码检查:确保字节码流可以被Java虚拟机安全的执行。字节码流代表Java方法(包括静态方法和实例方法),它是由被称为操作码的单字节指令组成的序列,每一个操作码后都跟着一个或多个操作数。字节码验证步骤会检查每个操作码是否合法,即是否有着合法的操作数。

    二进制兼容的验证:确保相互引用的类之间步调一致。

    10.2.3 类的准备

    在准备阶段,Java虚拟机为类的静态变量分配内存,并设置默认的初始值。

    10.2.4 类的解析

    在解析阶段,Java虚拟机会把类的二进制数据中的符号引用替换为直接引用。

    10.2.5 类的初始化

    在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值。在程序中,静态变量的初始化有两种途径:

    在静态变量的声明处进行初始化。

    在静态代码块中进行初始化。

    静态变量的声明语句,以及静态代码块都被看做类的初始化语句,Java虚拟机会按照初始化语句在类文件中的先后顺序来依次执行它们。

    Java虚拟机初始化一个类包含以下步骤:

    假如这个类还没有被加载和连接,那就先进行加载和连接。

    如果类存在直接的父类,并且这个父类还没有被初始化,那么就先初始化直接的父类。

    如果类中存在初始化语句,那么就依次执行这些初始化语句。

    10.2.6 类的初始化的时机

    Java虚拟机只有在程序首次主动使用一个类或接口时才会初始化它,只有六种活动被看作是程序对类或接口的主动使用:

    创建类的实例。(包括用new语句创建实例,或者通过反射、克隆及反序列化手段来创建实例)

    调用类的静态方法。

    访问某个类或接口的静态变量,或者对该静态变量赋值。

    调用JavaAPI中某些反射方法。

    初始化一个子类。

    Java虚拟机启动时被标明为启动类的类

    类的初始化的时机:

    对于final类型的静态变量,如果在编译时就能计算出变量的取值,那么这种变量被看作编译时常量。Java程序中对类的编译时常量的使用,被看作是对类的被动使用,不会导致类的初始化。

    对于final类型的静态变量,如果在编译时不能计算出变量的取值,那么程序对类的这种变量的使用,被看作是对类的主动使用,会导致类的初始化。

    只有当程序访问静态变量或静态方法的确在当前类或接口中定义时,才可以看作是对类的主动使用。

    调用ClassLoader类的loadClass()方法加载一个类,并不是对类的主动使用,不会导致类的初始化。

    10.3 类加载器

    类加载器用来把类加载到Java虚拟机中。

    Java虚拟机自带以下几种加载器:

    根(Bootstrap)类加载器:该类加载器没有父加载器。负责加载虚拟机的核心类库。如java.lang.*。根类加载器的实现依赖于底层操作系统,属于虚拟机实现的一部分,它并没有继承java.lang.ClassLoader类。

    扩展(Extension)类加载器:它的父加载器是根类加载器。0.+-

    系统(System)类加载器:也称为应用类加载器,它的父加载器为扩展类加载器。

    除了以上虚拟机自带的加载器,用户还可以定制自己的类加载器(User-defined Class Loader)。Java提供了抽象类java.lang.ClassLoader,所有用户自定义的加载器应该继承ClassLoader类。

    10.3.1 类加载的父亲委托机制

    在父亲委托机制中,各个加载器按照父子关系形成了树形结构,除了根类加载器以外,其余的类加载器都有且只有一个父加载器。

    加载器之间的父子关系实际上是指加载器对象之间的包装关系,而不是类之间的继承关系。一对父子加载器可能是同一个加载器类的两个实例,也可能不是。

    父类委托机制的优点是能提供软件系统的安全性。因为在此机制下,用户自定义的类加载器不可能加载应该由父加载器的可靠类,从而防止不可靠甚至恶意的代码替代由父加载器的可靠代码。

    命名空间:

    每个类加载器都有自己的命名空间,命名空间由该加载器及所有父加载器所加载的类组成。在同一个命名空间中,不会出现类的完整名字。相同的两个类。

    运行时包

    由同一个类加载器加载的属于相同包的类组成了运行时包,决定两个类是不是属于同一个运行时包,不仅要看它们的包名是否相同,还要看定义类加载器是否相同。只有属于同一运行时包的类才能互相访问包可见的类和类成员。

    10.3.2 创建用户自定义的类加载器

    要创建用户自己的类加载器,只需扩展java.lang.ClassLoader类,然后覆盖它的findClass方法,该方法根据参数指定的类的名字,返回对应的Class对象的引用。

    10.3.3URLClassLoader类

    在JDK的java.net 包中,提供了一个功能比较强大的URLClassLoader类,它拓展了ClassLoader类。它不仅能从本地文件系统加载类,还可以从网上下载类。Java程序可以直接用URLClassLoader类作为用户自定义的类加载器。

    10.4 类的卸载

    由Java虚拟机自带的类加载器所加载的类,在虚拟机的声明周期中,始终不会被卸载。由用户自定义的类加载器所加载的类是可以被卸载的。

    展开全文
  • 1、类的声明类本身的声明:对类的声明来说,主要包括类的访问权限声明和非访问修饰符的使用。对于一个普通的Java类(POJO)来说,主要的访问权限修饰符只有两个public和默认权限,内部类可以有private权限。非访问修饰...

    1、类的声明

    类本身的声明:对类的声明来说,主要包括类的访问权限声明和非访问修饰符的使用。对于一个普通的Java类(POJO)来说,主要的访问权限修饰符只有两个public和默认权限,内部类可以有private权限。非访问修饰符主要包括abstract,final和strictfp.

    (1) 这里先讨论非访问修饰符,下面是基本的规则:

    abstract:声明一个类是抽象的。

    final:声明一个类是可以被继承的。

    strictfp:声明一个类中所有的方法在处理浮点数时遵循IEEE754规则。

    由上面的这些规则可以得出一个结论:一个类不可能既声明为abstract的,又声明为final的。抽象类的实质即为继承它的类定义了一组行为准则,任何继承它的类都必须实现抽象类所定义的抽象方法,抽象类不可以实例化,抽象类中可以不包含抽象方法,但是含有抽象方法的类一定要声明为抽象类。

    final类表示一个类似不能被继承的。如果你不希望一个类的行为被改变,或者说该类的行为是整个系统的基础,就跟数学中的数字一样的话,就可以把这个类声明为final的。

    (2) 类的访问权限修饰符:

    首先需要弄清楚的是类的访问包括哪些方面:

    一个类中创建另一个类的实例; 一个类继承自另一个类;一个类中的方法访问另一个类的方法和变量。类的访问权限声明为public的,表示该类可以被任意的类访问,当然,在其他类中访问该类类的访问权限为默认权限,则表示和该类处在同一个包下的类可以访问它 ,此处注意以下比较容易忽视的地方:

    源文件一:

    package cert;

    class test1 {}

    源文件二:

    package cert2;

    import cert.test1;

    public class test2 extends test1{}

    这里test2类会产生错误,因为test1是默认访问权限,test2 使用继承的方式访问test1,由于这两个类不在同一个包中,因此test2是无法看到test1 的。

    展开全文
  • 为了方便广大考生更好复习,帮考网综合整理提供了2012年计算机二级考试java类类声明以及体 ,以供各位考生考试复习参考,希望考生复习有所帮助。/计算机三级2012年计算机等级考试二级java类类声明以及体...

    为了方便广大考生更好的复习,帮考网综合整理提供了2012年计算机二级考试java类之类声明以及类体 ,以供各位考生考试复习参考,希望对考生复习有所帮助。/计算机三级

    2012年计算机等级考试二级java类之类声明以及类体

    类是组成java程序的基本要素。它封装了一类对象的状态和方法,是这一类对象的原型。在前几章的例子中,我们已经定义了一些简单的类,如hellowo rldapp类 。

    public class helloworldapp{

    public static void main( string args[ ] ){

    system.out.println(“hello world !”);

    可以看出,一个类的实现包含两部分的内容:

    classdeclaration {

    classbody

    下面我们分别对每一部分详细讲述。

    6.2.1 类 声 明

    一 个 最 简 单 的 类 声 明 如 下 :

    class classname {

    class point{

    同 时 ,在 类 声 明 中 还 可 以 包 含 类 的 父 类 ,类所实现的接口以及修饰符public、abstract或final。我们将分别在后面的几节中介绍 。

    6.2.2 类 体

    类 体 中 定 义 了 该 类 所 有 的 变 量 和 该 类 所 支 持 的 方 法 。 通 常 变 量 在 方 法 前 定 义 (并 不 一 定 要 求 ),如 下 所 示 :

    class classname {

    membervariabledeclarations

    下例定义了一个point类 ,并且声明了它的两个变量x、y坐标,同时实现init()方法对x、 y赋 初 值 。

    class ponit {

    int x,y;

    void init(int ix, int iy){

    类中所定义的变量和方法都是类的成员。 对类的成员可以设定访问权限,来限定其它对象对它的访问,访问权限所以有以下几种:private, protected, public, friendly。 我们将在§6.6中详细讨论。同时对类的成员来说,又可以分为实例成员和类成员两种。 我们在§6.8中详细讨论 。

    计算机二级考试Java类之类声明以及类体由用户“123oeizuro5lp2”分享发布 ( www.177liuxue.cn )编辑整理,转载请保留出处

    展开全文
  • 本篇文章给大家带来内容是介绍java中抽象,让大家抽象有一个简单了解,知道抽象是什么,怎么声明。有一定参考价值,有需要朋友可以参考一下,希望你们有所帮助。在我们介绍抽象之前,我们首先来...
  •  类本身的声明:对类的声明来说,主要包括类的访问权限声明和非访问修饰符的使用。对于一个普通的Java类(POJO)来说,主要的访问权限修饰符只有两个public和默认权限,内部类可以有private权限。非访问修饰符主要...
  • 详细内容本篇文章给大家带来内容是介绍java中抽象,让大家抽象有一个简单了解,知道抽象是什么,怎么声明。有一定参考价值,有需要朋友可以参考一下,希望你们有所帮助。在我们介绍抽象之前,...
  • 为什么在Java中需要内部类?总结一下主要有以下四点:1.每个内部类都能独立的继承一个接口的实现,所以...方便编写线程代码个人觉得第一点是最重要的原因之一,内部类的存在使得Java的多继承机制变得更加完善。◆Jav...
  • 要理解这个问题,首先你需要承认如下事实:抽象类的本质在于抽象方法。java中的实例方法,其实可以理解为隐式传入了this指针的静态方法。而静态方法就能和C里的函数对应上了。例如class Dog {void bark(int howMany)...
  • 因为java中char类型只能表示单个字符,不能表示由多个字符连成字符串,而在java中定义了String来表示创建字符串对象,其主要位于java.lang包中,Stringjava中常用的类声明和方法掌握是我们研究...
  • class 类名称{  属性  方法 } 声明类需要通过关键字class ...创建了一个Person类(类名首字母大写) ...声明一个名为tell的打印...声明并实例化一个类的对象; 通过对象.属性 修改类的属性 通过对象.方法 调用类的
  • JAVA 类声明中关键字public作用

    万次阅读 2017-11-25 22:10:04
    使用public关键字声明的类必须与java...相应.class文件,而一个java文件中可以同时又多个不使用public关键字声明的类,但是编译后会产生多个与之对应.class文件,并且要执行文件是多个.class前缀名。
  • java当中类的成员变量定义了类的属性,下面的文章要给大家详细讲解的就是成员变量的定义和声明的内容,一起来了解一下吧。例:一个学生类当中一般都需要有姓名性别以及年龄等属性,这个时候的话,就需要定义姓名、...
  • Java类的定义、声明及使用

    万次阅读 多人点赞 2017-03-19 10:56:20
    1、class 名称{ ...1)某一事物描述,是抽象、概念上意义,对象是实际存在事物每一个个体,也被称为实例。package classdemo; class Person{ String name; int age; public void tell
  • 最近在看Java core I 对java有了更深一步了解。 Java是一种成长语言, 从1996年到现在,Java的类库从200多个增长到了4000多个,有个惊人增长。 Java从1.0版本升级到了Java10 第一个问题: 必须用public...
  • 获得类的对象的过程包含两个步骤。首先,必须声明该类类型的一个变量,这种声明只是一种简单声明计算机来讲,并没有实际的物理含义;然后,需要创建一个对象的实际物理备份,并把对于该对象的引用赋给该变量,这...
  • 如题,学C语言时总是先声明变量,到了JAVA我看到书的程序都是把变量声明类的结尾处,为什么? 如 import java.util.*; public class Test { public static void main(String[] args) { } } ...
  • 引言重出江湖了,各位少侠多多关照内部类多而繁杂,互访情况下,不管是内访外,还是外访内,静态(类,方法,成员...文章导读内部类的种类命名规则匿名内部类编译内外互访一、内部类的种类内部类分为4种:成员内部类...
  • 在人工智能发展过程中,随着人们智能理解和现实问题解决方法演变,机器学习大致出现了符号主义、贝叶斯、联结主义、进化主义、行为推主义五大流派。 符号主义 符号主义起源于逻辑学、哲学,实现方法是Java...
  • 声明是A a就是一个对象的声明出来 实例化A a = new A()就是声明的对象进行分配地址空间 初始化是实例化的对象给分配的空间里面写入东西。也就是给对象赋值 public static void main(String args[]){ A ...
  • Java声明复数Complex

    千次阅读 2020-03-24 07:34:42
    声明复数Complex,成员变量包括实部和虚部,成员方法包括实现由字符串构造复数、复数加法、减法,字符串描述、比较相等、计算复数模等操作。 百度百科—复数介绍 import java.util.Scanner; public class ...
  • 声明成员方法能够定义类的行为,行为表示一个对象可以做的事情或者是可以从一个对象取得的信息,下面的话就来对java成员方法的声明做一个详细介绍。类的各种功能操作都是用方法来实现的,属性只是提供了相应的数据。...
  • 对Java抽象和接口

    2018-11-04 16:10:44
    对于面向对象编程来说,抽象是它的一大特征之一。...抽象方法的声明格式为: abstract void fun(); 抽象方法必须用abstract关键字进行修饰。如果一个含有抽象方法,则称这个为抽象,抽象必须在前用...
  • 图中1.4动物例子,动物只做了简单方法声明,而在子类中不重写或少重写方法虽不会程序带来错误,既然不会报错误那么客户就不会遵守规则可能会少写一个或者几个方法,这是不严格 这样问题就大了,不能让子类...
  • 对象是类的实例,一个类可以拥有多个实例,创建实例的过程叫做实例化。实例也称为对象,两者说法一致。2、定义声明类要创建一个类,请使用关键字class:Main.java创建一个带有变量x的名为MyClass的类:public class...
  • Java Java抽象java中用abstract关键字声明的类称为抽象。 它可以有抽象和非抽象方法(带主体方法)。在学习java抽象之前,先来了解java抽象。Java抽象抽象是隐藏实现细节并仅向用户显示功能...
  • 对java类的理解

    千次阅读 2013-10-12 00:25:46
    类 1 类与对象 1 2 抽象类与接口 3 2.1基本概念 3 2.2抽象类与接口的区别 3 3 面向对象的理解 4 4 关键字 6 ...使用new运算符和类的构造方法为声明的对象分配成员变量,创建对象就是为它分配成员
  • 小编典典[…]应该如何声明Java Comparator以按其降序将数组第一个元素排序 […]这是使用Java 8完整示例:import java.util.*;public class Test {public static void main(String args[]) {int[][] twoDim = {...
  • JAVA类的声明、实例化和初始化理解

    千次阅读 2015-11-06 10:12:11
    声明是A a就是一个对象的声明出来 实例化A a = new A()就是声明的对象进行分配地址空间 初始化是实例化的对象给分配的空间里面写入东西。也就是给对象赋值 上代码分析 public class Test { public ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,877
精华内容 3,150
关键字:

java对类的声明

java 订阅