文档章节

JAVA语法(2)

 子易乐
发布于 2017/02/28 22:54
字数 2623
阅读 12
收藏 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结束

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 17
码字总数 18498
作品 0
西安
大数据开发培训:0基础学习Java编程语言有哪些知识点?

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

加米谷大数据
07/25
0
0
Xtend语言(1):独辟蹊径的JVM语言

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

神思者l
06/05
0
0
Java程序员如何高效而优雅地入门Cpp?

java切入到cpp的学习,首先会具备以下几个优势点 1.没有初学编程语言的恐惧感 毕竟作为过来人切入新的编程语言的学习,驾轻就熟学习的套路上都已经很熟悉了,如果是中级的java程序员切入进来...

启示录是真的
05/27
0
0
google protobuf3简易教程

版权声明:本文为博主原创文章,欢迎大家讨论,未经博主允许不得转载. https://blog.csdn.net/u010398771/article/details/82077915 google 的 protobuf 一个及其快速,以及好用的序列化框架,支...

长河
08/26
0
0
JDBC基础教程之CallableStatement

概述      CallableStatement 对象为所有的 DBMS 提供了一种以标准形式调用已储存过程的方法。已储存过程储存在数据库中。对已储存过程的调用是 CallableStatement对象所含的内容。这种调...

xiahuawuyu
2012/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SAP不同的产品是如何支持用户创建自定义字段的

我们从SAP CRM,Cloud for Customer(简称C4C)和S/4HANA这三个产品分别来看看。 SAP CRM 我们使用所谓的Application Enhancement Tool(AET)来创建扩展字段。首先在Personalize里将Configu...

JerryWang_SAP
23分钟前
3
0
Vue-Element-Upload

记录一下文件上传封装Js 代码示例 封装:uploadFile.vue <template> <el-upload v-model="attachment" ref="upload" class="upload-demo" :action="uploadUrl" ......

华山猛男
30分钟前
2
0
AWVS破解及使用手册

1.安装 因为是windows软件,比较简单,此部分略: 破解插件下载: 链接: https://pan.baidu.com/s/1x9LK9F3KvqDgTvXDjoSZnQ 提取码: 7k4u 2.创建扫描目标 2-1.Targets->Add Target 2-2.对话框...

硅谷课堂
33分钟前
1
0
Centos 7 安装Zabbix 3.4

Zabbix 3.4 支持Centos 7。貌似不支持6.9. 更多详细内容请参考官方说明文档,详细的安装要求不贴出来了。 https://www.zabbix.com/documentation/3.4/zh/manual/installation/requirements 虚...

linjin200
38分钟前
1
0
阿里云数据库HybridDB for PostgreSQL使用教程

云数据库HybridDB for PostgreSQL(ApsaraDB HybridDB for PostgreSQL)是一种在线MPP大规模并行处理数据仓库服务。云数据库HybridDB for PostgreSQL基于Greenplum Database开源数据库项目,...

mcy0425
47分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部