文档章节

JAVA语法(2)

 子易乐
发布于 2017/02/28 22:54
字数 2623
阅读 13
收藏 0

可以将一组相关的类或接口封装在包(package)里,从而更好地管理已经开发的Java代码。这里的包(package)也可以称作软件包

包声明语句的格式是:

package 包名;

包声明语句要求是定义类或者接口、枚举类型的Java源程序文件的第一条语句,且必须是该文件的第一条语句。

包名可以是一个标识符,也可以由若干个标识符通过句点“.”连接而成。其中包名的前几个标识符是所在单位的Internet域名的倒序,最后一个标识符是一个可以概括该软件包功能的标识符。例如:package cn.edu.tsinghua.universityOrganization;

如果需要使用在软件包中的类或者接口或者枚举等,则需要导入包的语句。导入包的语句一般是在Java源程序文件中除了包声明语句之外的最前面的若干条语句。导入包语句的格式有三种,分别为:

(1)import 包名.*;   //将整个包的类或者接口或者枚举等导入到当前的程序中

(2)import 包名.类型名;  //将指定的类型导入到当前的程序中

(3)import static 包名.类型名.静态成员方法名; //将指定的静态成员方法导入

导入包语句的使用原则是尽量使用比较后面的导入包语句形式,否则会增加程序的内存开销,并在一定程度上降低程序的编译效率。导入包时,当前路径下不能包含有相应后缀为‘.java’的Java源程序文件以及编译生成的后缀为“.class”的文件。

每个软件包都有一个包名,而且在包与包之间没有嵌套关系,即任何包都不会包含其他包。例如,软件包 cn.edu.tsinghua.univers  不是软件包 cn.edu.tsinghua 的子软件包。导入包语句 import cn.edu.tsinghua.* 不能代替导入包语句 import cn.edu.tsinghua.univers.* 在导入软件包的过程中,软件包根路径由系统变量classpath确定。

在Java系统提供的软件包中,有一个软件包比较特殊,即 软件包“java.lang”。它是Java语言的基本软件包。即使不通过导入语句,Java语言也会为所有的Java程序自动导入该软件包。软件包“java.lang”提供Java程序所需要的最基本的类和接口,其中比较常用的类包括Object、Boolean、Byte、Character、Double、Float、Integer、Long、Short、Math、String、StringBuffer、Sysem等。

类Object:是在Java语言中除Object本身之外所有类的父类。

类Boolean、Byte、Character、Double、Float、Integer、Long和Short分别是Java八种基本数据类型的包装类。

类Math:提供各种数学计算方法。

类StringBuffer:用来编辑自丈夫序列。

类System:提供各种与标准输入和标准输出相关的功能,访问外部定义的属性和环境变量的功能,加载文件和库的功能,以及进行快速数组复制等功能。

封装性

类成员的访问控制模式及其允许访问范围

访问控制模式

在同一个类内

在同一个包内

子类

所有类

公共模式(public)

允许访问

允许访问

允许访问

允许访问

保护模式(protected)

允许访问

允许访问

允许访问

 

默认模式(default)

允许访问

允许访问

 

 

私有模式(private)

允许访问

允许访问

 

 

 

修饰词

三个常用修饰词:abstract(抽象)、static(静态)和final(最终)。abstract不能和其他两个修饰词组合在一起。

修饰词abstractJava允许类、接口或成员方法具有抽象属性,但不允许成员域或者构造方法具有抽象属性。无法通过抽象类的构造方法生成抽象类的实例对象。不管定义接口的修饰词是否含有关键字abstract,接口总是具有抽象属性

抽象类的应用方法:在定义抽象类型后,可以将该分类中的各个类型定义成为该抽象类型的子类型。这样,如果要生成抽象类型的实例对象,则可以通过这些子类型的构造方法来实现。如果抽象类型的子类型不是抽象类型,在要求在该子类型的定义中必须定义覆盖抽象类型的所有抽象方法。这里的覆盖指的是在多态性中的覆盖,即定义除封装性之外相同声明的成员方法。这样根据动态多态性,可以通过抽象类型的表达式访问抽象类型的成员域以及调用这些被覆盖的成员方法。

 

         抽象成员方法定义格式为:

[方法修饰词列表]  返回类型  方法名(方法的参数列表);

抽象成员方法修饰词列表中含有关键字abstract,且该方法只能定义在抽象类的类体或定义接口的接口体中。

抽象成员方法定义格式与不具抽象属性的成员方法的定义格式之间的区别:除了是否含有修饰词abstract之外,抽象成员方法的定义以分号结束,而且不含方法体;而不具有抽象属性的成员方法的定义在成员方法声明之后不能立即出现分号,而且必须含有方法体。

 

修饰词static

具有关键字 static(静态)的成员域或成员方法,成为静态成员域或静态成员方法。例如,作为Java应用程序入口的main成员方法是一个静态成员方法。类本身也可以看做一种对象,简称为类对象。类的静态成员隶属于该对象,可通过类名直接调用。格式是:

类名.静态成员域名     或   类名.静态成员方法名

 

修饰词final

关键字final(最终)可用来修饰不具有抽象属性的类、类的成员域、接口的成员域以及类的不具有抽象属性的成员方法。具有最终属性的类不能作为父类,不能派生出子类。如:类java.lang.System的声明是

public final class Sysem extends Object  说明java.lang.System具有最终属性,因此类java.lang.System不具有子类。

内部类(inner class)

在类体内部定义的类,内部类坐在的类称为外部类。按照内部类是否含有显示的类名,分为“实名内部类”和“匿名内部类”,实名内部类定义格式是:

[类修饰词列表] class 类名 [extends 父类名] [implements 接口名称列表]

{

         类体

}

含有关键字static的内部类,称为静态实名内部类。对于不具有静态属性的实名内部类,如果它的成员域具有静态属性,则必须同时具有最终(final)属性。不具有静态属性的实名内部类不能含有具有静态属性的成员方法。

 

匿名内部类不具有类名,不能具有抽象和静态属性,并且不能派生出子类。定义匿名内部类的定义可以采用格式:

new 父类型名(父类型的构造方法的调用参数列表)

{

         类体

}

匿名内部类不含类型,所以在匿名内部类的类体中一般不能显示地定义构造方法。匿名内部类的定义格式定义并创建了匿名内部类的实例对象,它所调用的构造方法实际是父类型的与其调用参数相匹配的构造方法,或者是由Java虚拟机自动生成的不含任何参数的构造方法。

 

 

接口

Java语言规定任何子类只能有一个直接父类,但Java语言允许一个类实现多个接口,从而实现多重继承的特性。在同一个Java源文件中可以包含多个类或接口,但不能包含两个或两个以上的具有public修饰词的类或接口。接口的定义格式是:

 

[接口修饰词列表]  interface  接口名 [extends 接口名称列表]

{

         接口体

}

 

其中:

         “[  ]”:表示其内部的内容是可选项;

         接口修饰词列表:可以包括0个或多个接口修饰词;接口修饰词包括public、abstract和strictfp等。接口一般不能具有protected和private属性。

         接口名:可以是任意的合法标识符。

         extends 接口名称列表:当前定义的接口可以继承1个或多个父接口,相邻两个接口名称之间采用逗号分隔。

 

接口体:定义接口的两类成员要素“成员域”和“成员方法”。

接口的成员域的定义格式为:

 

[域修饰词列表] 类型 带初始化的变量名列表;

 

         修饰词列表:即使不包含修饰词,接口的所有成员域都具有public、static和final属性。

接口的成员方法只能是抽象成员方法,其定义格式为:

 

[方法修饰词列表]  返回类型 方法名(方法的参数列表);

 

         修饰词列表:即使不包含修饰词,接口所有方法也具有public和abstract属性;

         返回类型:数据类型,不返回值需要写关键字void;

方法参数列表:可包含0个或多个参数,不能写关键字void;格式:类型 参数变量名

        

接口的应用方法非常类似于抽象类,知识通过接口在一定程度上可以实现多重继承。在实现接口的类中,除抽象类之外,要求在该类的类体中定义覆盖该接口的所有成员方法。若生成接口的实例对象,可通过实现接口的类的构造方法来实现。根据继承性,实现接口的类的实例对象也可以被认为是该接口的实例对象。访问接口成员的格式如下:

接口名.静态成员域名   或  表达式.成员域名

表达式.成员方法名(成员方法调用参数列表)

接口定义的程序示例:

interface J_Shape

{

         public static final double PI=3.1415926;

         public abstract double mb_getArea();  //计算并返回形状的面积

}  //接口J_Shape结束

© 著作权归作者所有

共有 人打赏支持
下一篇: JAVA语法(1)
粉丝 0
博文 17
码字总数 18498
作品 0
西安
私信 提问
大数据开发培训:0基础学习Java编程语言有哪些知识点?

Java 技术通用、高效、具有平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网等,学习Java首先要知道学习知识点有哪些。在这就用加米谷大数据培训...

加米谷大数据
07/25
0
0
Groovy 2018 Roadmap:下一步主打 lambda 和模块化

JVM 动态脚本语言 Groovy 在 5 月底发布了最新的 2.5 版本, 最大的亮点是对宏的支持,允许开发者在创建 compile-time 元编程扩展时直接使用 Groovy 语法,而不是使用内部编译器表示。 Apac...

王练
06/07
825
3
Xtend语言(1):独辟蹊径的JVM语言

我是2004年开始学习Java语言的,那时候的Java是1.4版本,说实在的,最新的Java10跟我一开始学习Java时候的语法变化并不大。我相信很多人都会跟我有相同的感受:Java写的越多就越觉得语法十分...

神思者l
06/05
0
0
kan-java, 一个能裁剪语法特性的java动态编译工具

'kan-java' 就是 '砍-java', 就是字面意思 这是一个java代码动态编译工具,也就是能够把String形式的java代码实时地编译为字节码的工具; “动态编译”工具,其实自jdk1.6发布以来,应该出现...

pf_miles
2015/03/28
172
0
JDBC驱动下载及各种数据库的连接字符串URL写法

各种数据库的JDBC驱动下载及连接字符串URL写法 sun官方网站上的JDBC驱动列表:http://java.sun.com/products/jdbc/reference/industrysupport/index.html 数 据 库 说 明 MySQL http://www.m...

余路
2012/05/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20181213 上课截图

小丑鱼00
10分钟前
0
0
nginx+php-fpm配置后页面显示空白的解决方法以及用nginx和php-fpm解决“502 Bad Gateway”问题

https://stackoverflow.com/questions/15423500/nginx-showing-blank-php-pages For reference, I am attaching my location block for catching files with the .php extension: location ~......

Yao--靠自己
18分钟前
1
0
mac 没声音

somehow不时就会出现这种情况。之前都得重启。 其实可以直接在terminal里打以下命令: sudo kextunload /System/Library/Extensions/AppleHDA.kext sudo kextload /System/Library/Extension...

dubox
34分钟前
1
0
看完让你彻底搞懂Websocket原理

作者:Ovear 链接:https://www.zhihu.com/question/20215561/answer/40316953 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 额。。最高票答案没答到点...

时刻在奔跑
48分钟前
2
0
Spring Cloud Stream消费失败后的处理策略(一):自动重试

之前写了几篇关于Spring Cloud Stream使用中的常见问题,比如: 如何处理消息重复消费 如何消费自己生产的消息 下面几天就集中来详细聊聊,当消息消费失败之后该如何处理的几种方式。不过不论...

程序猿DD
50分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部