搜档网
当前位置:搜档网 › java代码静态检查工具介绍

java代码静态检查工具介绍

java代码静态检查工具介绍
java代码静态检查工具介绍

静态检查:静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。

代码检查代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和

设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代

码结构的合理性等方面;可以发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构

检查等内容。”。看了一系列的静态代码扫描或者叫静态代码分析工具后,

总结对工具的看法:静态代码扫描工具,和编译器的某些功能其实是很相似的,他们也需要词法分析,语法分析,语意分析...但和编译器不一样的是他们可

以自定义各种各样的复杂的规则去对代码进行分析。

静态检测工具:

1. PMD

1)PMD是一个代码检查工具,它用于分析 Java 源代码,找出潜在的问题:

1)潜在的bug:空的try/catch/finally/switch语句

2)未使用的代码:未使用的局部变量、参数、私有方法等

3)可选的代码:String/StringBuffer的滥用

4)复杂的表达式:不必须的if语句、可以使用while循环完成的for循环

5)重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs

2)PMD特点:

1)与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在

不运行Java程序的情况下报告错误。

2)PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许

多问题

3)用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。

3)同时,PMD已经与JDeveloper、Eclipse、jEdit、JBuilder、BlueJ、

CodeGuide、NetBeans、Sun JavaStudio Enterprise/Creator、

IntelliJ IDEA、TextPad、Maven、Ant、Gel、JCreator以及Emacs

集成在一起。

4)PMD规则是可以定制的: 可用的规则并不仅限于内置规则。您可以添加新规则:

可以通过编写 Java 代码并重新编译 PDM,或者更简单些,编写 XPath 表

达式,它会针对每个 Java 类的抽象语法树进行处理。

5)只使用PDM内置规则,PMD 也可以找到你代码中的一些真正问题。某些问题可能

很小,但有些问题则可能很大。PMD 不可能找到每个 bug,你仍然需要做单元测试和接受测试,在查找已知 bug 时,即使是 PMD 也无法替代一个好的调试器。

但是,PMD 确实可以帮助你发现未知的问题。

1. FindBugs

1)FindBugs是一个开源的静态代码分析工具,基于LGPL开源协议,无需

运行就能对代码进行分析的工具。不注重style及format,注重检测真正

的bug及潜在的性能问题,尤其注意了尽可能抑制误检测(false positives)

的发生。以bytecode(*.class、*.jar)为对象进行检查。除了单独动作,还可

以用作Eclipse 的plug-in,以及嵌入Ant作为task之一进行利用。

2)findbugs自带检测器的介绍: findbugs自带60余种Bad practice,80余种Correntness,1种Internationalization,12种Malicious code

vulnerability,27种Multithreaded correntness,23种Performance,

43种Dodgy。

3)Findbugs的一些特点:

1)FindBugs主要着眼于寻找代码中的缺陷,这就与其他类似工具有些区别了,

直接操作类文件(class文件)而不是源代码。

2)FindBugs可以通过命令行、各种构建工具(如Ant、Maven等)、独立的

Swing GUI或是以Eclipse和NetBeans IDE插件的方式来运行。

3)FindBugs输出结果既可以是XML的,也可以是文本形式的。

4)开发者可以通过多种方式来使用FindBugs,最常见的是在新编写模块的代码

分析以及对现有代码进行更大范围的分析。

5)不注重style及format,注重检测真正的bug及潜在的性能问题,

尤其注意了尽可能抑制误检测(false positives)的发生。

4)FindBugs可检测的bug pattern举例:

检测java programing中容易陷入的bug pattern,equals() 实现时的一般规约违反Null pointer的参照,Method的返回值的check遗漏,初始化前field的访问,Multi-thread的正确性,同期化处理的矛盾,无条件的wait(), Code的脆弱性,可以变更的静态object ,内部数列参照的return等

1. Checkstyle

1)定义: Checkstyle是一款检查Java程序源代码样式的工具。

2)特点:

1)它可以有效的帮助我们检视代码以便更好的遵循代码编写标准,特

别适用于小组开发时彼此间的样式规范和统一。

2)Checkstyle提供了高可配置性,以便适用于各种代码规范,所以

除了使用它提供的几种常见标准之外,你也可以定制自己的标准。

3)Checkstyle提供了支持大多数常见IDE的插件,大部分插件中就含有

最新的Checkstyle,就不用费心再部署一份了。

4)Checkstyle可以检查代码的很多方面,从传统观点看,它主要是用来

检查代码层面的,自从第三版以后,它的内部架构作了重大改变,很多

其它意图的检测加了进来,现在Checkstyle可以检查像类设计的问题,

重复代码,如锁的双重检查的bug模式。

3)CheckStyle的主要流程是:

1)对Java文件进行词法语法分析,生成语法树。

2)载入配置文件(checkstyle-metadata.xml以及自定义的配置文件)

register check事件。

3)按照深度优先遍历对语法树进行解析,按照注册的事件,在到达某些节点

( AST ) 时进行style检查(AST,A child-Sibling Tree,是语法

树中的某个节点,其类型在TokenTypes类中定义。)

4)我们所说的自定义Style的检查,就是在第二步设定的。

这里牵涉到一个叫com.puppycrawl.tools.checkstyle.api.Check 的类,

我们通常需要重载其中的两个函数:public int[] getDefaultTokens()

和public void visitToken(DetailAST ast). 这两个函数的含义为,

在遍历语法树的过程中,每当到达getDefaultTokens函数所返回的AST类型,

程序就进入visitToken进行具体的检查和分析,即,真正的分析检查过程是在visitToken中实现的。

1. Hammurapi

1)定义: Hammurapi它是一个开源的代码审查/评审(review)工具。它可以帮助改进Java代码的质量。它可以基于一套设计规范来分析代码库。当它碰到违反规

范的地方,会在报告中标识。就像Checkstyle一样,它与Ant无缝集成并且

由基于XML配置文件来驱动。

2)特点:

1)Hammurapi是用来强制代码设计规范的。

2)Hammurapi是一个遵循设计的工具,提供了自动而且一致的方式来实现设计规范,

因此使代码评审更加有效而轻松。

3)Hammurapi如何工作:

Hammurapi这样的代码分析工具都带有语言分析器。语言分析器是一种输入

语言代码并输出抽象语法树的工具。这个树上的节点代表语言标识。例如,考

虑一下简单的算术表达式:3+4. 语言分析器会解析他成为一个如图5所示的语

法树。在这个树中,节点+代表操作符标识。节点3和4是操作数标识Hammurapi

使用ANTLR(另一个语言识别工具)作为语言分析器。然而ANTLR API是相当底层的。

为改善可用性,Hammurapi使用另一个API,基于ANTLR 的JSEL(Java源程序

工程类库),来访问抽象语法树。一旦树构建完成,一种树遍历算法就被用来访

问树中每一个节点。每次访问到一个节点,一种回调机制(Visitor模式)被用来

提示相应的检查器。在这些回调方法中,检查器收集相关的信息来确定是否有违反

规范的地方存在。

1. Lint4j

1)定义:Lint4J是一个针对Java的源代码分析工具,它可以对Java源码和字节

码进行静态分析,判断其中是否存在死锁、性能问题或者伸缩性问题。

它可以集成到任何IDE种或构建系统

2)特点:

1)检测代码语法规则

2)潜在的bug

3)检测编码模式对代码可读性及大小的影响

4)检测是否违反EJB规范

1. Sonar

1)定义:代码质量管理工具Sonar提供了设计与架构度量。Sonar 2.0引入了

针对Java应用的设计分析、架构与面向对象的度量,Sonar 2.1可以

检测到未使用的方法以及对不建议使用方法的调用。是一个集成了

CheckStyle,PMD,Findbugs的代码校验规则 ,重复代码发现,

代码测试覆盖率,代码注释率,及所有的检测率变化追踪的完美

代码质量检查工具。它包含了代码质量检测的七个方面,如下图

2)特点:

1)代码覆盖:通过单元测试,将会显示哪行代码被选中。

2)改善编码规则。

3)搜寻编码规则:按照名字,插件,激活级别和类别进行查询。

4)项目搜寻:按照项目的名字进行查询。

5)对比数据:比较同一张表中的任何测量的趋势。

6)单元测试

3)Sonar2.1:

Sonar还基于Squid引入了一个全新的规则引擎、Sonar解析器既可以处

理源代码,也可以处理字节码,解析器带有内建的规则,可以检测未使用

的私有与保护方法以及客户端对不建议使用的方法的调用。

Squid通过分析应用源代码、Java API和外部程序库

的字节码来决定哪些方法、类和属性是不建议使用的。

Sonar 2.1的新特性:

1)一个全新的“Libraries”页面,显示了项目中所有的程序库和依赖,该特性要求使用Maven来构建项目。

一旦在Sonar站点的主页上选择了一个项目,该服务就会以

可视化的树形结构展示出项目依赖。此外,还有一个可选的

动态过滤器,可以根据名称过滤程序库以便在应用的依赖间导航。

2)用于搜索程序库使用情况的“Dependencies”页面。比如说,可以

搜索到使用了第三方框架如Commons Logging 1.1的所有项目。

3)可以使用各种插件扩展Sonar的功能。现在有一个全新的

“System Info”页面显示了系统属性、已装插件和Java虚拟机内存

统计信息。该页面还给出了关于Sonar配置和数据库统计的详细信息。

4)一个用于管理已装插件和系统信息的管理控制台。

最新版的Sonar为这些插件引入了一个测试框架和一个客户化的Maven

生命周期管理工具。它还带有一个用于集成项目事件的

Web Service并在项目的size widget中增加了一个新的度量模块。

1. JDepend

1)JDepend一个开放源代码的可以用来评价Java程序质量的优秀工具,

它遍历Java class的文件目录,以Java包(package)为

单位,为每一个包/类自动生成包的依赖程度,稳定性,可靠度等

的评价报告,根据这些报告,我们可以得到包或类之间的依赖关

系,并分析出包的稳定程度,抽象程度,是否存在循环依耐关系等。

可以根据JDepend给出的报告数据,分析出我们的包是否是

可靠的,稳定的,健壮的包,是否符合面向对象的设计原则。

2)特点:

1)评价设计质量

2)翻转依赖性

3)支持并行开发和极限编程

4)独立的发布模块

5)识别package的循环依赖

3)Depend生成的Java包的质量评价报告主要包括:

1)Number of Classes and Interfaces:实现类与抽象接口的数目

2)Abstractness (A):包的抽象度。指一个包内包含的抽象类或接口

占整个包中的类的比重。

3)Afferent Couplings (Ca):向心耦合。依赖该包(包含的类)的外

部包(类)的数目(i.e. incoming dependencies),该数值越大,

说明该包的担当的职责越大,也就越稳定。

4)Efferent Couplings (Ce):离心耦合。被该包依赖的外部包的数目

(i.e. outgoing dependencies),该数值越大,说明该包越不独

立(因为依赖了别的包),也越不稳定。

5)Instability (I):衡量一个包的不稳定程度。I=Ce/(Ce+Ca)。它的值处于

[0,1]之间。I=0时说明包是最稳定的,反之I=1则说明包极不稳定。

6)Distance from the Main Sequence (D):该指标主要用来评价包的抽象

程度与稳定程度的平衡关系,它可以用二维直线图 A + I = 1 来表示。

7)Package Dependency Cycles:包的循环依赖度。

8. IBM Checking Tool for Bugs Errors and Mistakes(简称BEAM)

1) 定义:是 IBM 开发的一个静态分析工具,可以用于分析并查找出 C, C++ 和 Java

代码中的一些不容易发现的潜在错误,从而达到提高代码质量的目的。同动态

分析工具和其它静态分析工具相比,它拥有一些可贵的特性。

2)特点:

1)对代码进行语法扫描,通过算法对代码进行检查分析

2)和一些 bug 模式进行比较,最终标明问题区域,输出分析结果

3)使用了额外的定理证明(theorem proving)技术来判断一个潜在的错误是否

是真正的错误,从而减轻了程序员判断错误真伪所需的工作量

9. LDRA Testbed

1)定义:LDRA Testbed为应用软件的确认和验证提供强大的源代码测试和分析功能,

是独特的质量控制工具。它有助于提高计算机软件必需的可靠性,健壮性和尽

可能的零缺陷,它的使用带来时间、成本和效率上真实的节省,这些都是无法衡

量其价值的。它是强大和完整的集成工具包,使先进的软件分析技术应用在开发生

命周期的关键阶段。

2)LDRA Testbed提供强大的分析功能,用于两个主要的测试领域,静态分析和动态分析。1)静态分析:分析代码,并且提供对代码结构的理解。

2)动态分析:利用源代码的插装版本,使用测试数据执行,在运行时发现软件

缺陷

3) 使用LDRA testbed 的好处

软件开发和测试过程的成本效率分析工具

单元、集成和系统测试的理想工具

贯穿于软件开发的整个生命周期

LDRA Testbed应用于许多不同的领域

过程改进

软件测试

软件维护

LDRA Testbed的优点:

改进软件质量

定位软件缺陷

强制执行工业标准

减少维护费用40%以上

减少开发和测试成本75%以上

通过自动化过程提高员工动力

10. Yasca

1) 定义:yasca是一个开源静态代码分析工具插件框架, 集成流行的多语言静态分析工具如findbugs/pmd/jlint/rats/cppcheck,由于插件本身多样故可支持java

c++等语言静态分析.Yasca是一个用来寻找安全漏洞,在程序的源代码中检测代

码质量、性能以及一致性的软件。它集成了其他开源项目,其中包括FindBugs

PMD ,JLint , Cppcheck ,并扫描某些文件类型,以及自定义扫描书面的

Yasca 这是一个命令行工具,与报告中生成的HTML , CSV格式, XML的,的

SQLite ,和其他格式。

Testbed静态测试使用指南V1.1

目录 1Testbed功能介绍 (1) 1.1编程规则验证 (1) 1.2数据流分析 (1) 1.3控制流分析 (1) 1.4表达式分析 (2) 1.5接口分析 (2) 1.6软件质量度量分析 (2) 2使用Testbed 进行编码规则的定制和检查 (3) 2.1确定测试需求 (3) 2.2建立测试工程 (3) 2.3定制代码分析规则 (6) 2.4配置Report选项 (7) 2.5分析执行及结果查看 (8) 3结果分析及测试报告编写 (9) 3.1质量度量信息的获取 (9) 3.2程序质量度量报告单 (11) 3.3静态分析质量报告单 (12) 附录A:静态分析推荐规则使用说明 (1)

1Testbed功能介绍 1.1编程规则验证 编程标准验证是高可靠性软件开发不可缺少的软件质量保证方法,使用LDRA Testbed 自动地验证应用软件是否遵循了所选择的编程规则。编程规则由软件项目管理者根据自身项目的特点并参考现有的成熟的软件编程标准制定,如DERA(欧洲防务标准),MISRA(汽车软件标准),LDRA Testbed依据此规则搜索应用程序,并判断代码是否违反所制定的编程规则。LDRA Testbed报告所有违反编程规则的代码并以文本方式或图形反标注的方式显示。测试人员或编程人员可根据显示的信息对违反编程规则的代码进行修改。 1.2数据流分析 LDRA Testbed分析软件中全局变量、局域变量及过程参数的使用状况,并以图形显示、HTML或ASCII文本报告方式表示,清晰地识别出变量使用引起的软件错误,此种方法既可使用于单元级,亦可使用于集成级、系统级。 通过Testbed数据流分析功能,可方便地分析出软件中一些可能的程序欠缺,如: 1.没使用的函数参数; 2.不匹配的参数; 3.变量未赋初值就引用; 4.代码中有多余变量; 5.给值传递参数赋值; 6.无返回值的函数路径; 7.函数的实参是全局变量。 1.3控制流分析 控制流分析检查以下内容: 1.不可达代码; 2.不合理的循环结构; 3.存在浮点相等比较; 4.函数存在多个出口; 5.函数存在多个入口。

静态分析、测试工具.doc

静态代码分析、测试工具汇总 静态代码扫描,借用一段网上的原文解释一下 ( 这里叫静态检查 ) :“静态测试包括代码检查、 静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势, 也可以借助软件工具自动进行。代码检查代码检查包括代码走查、桌面检查、代码审查等, 主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代 码结构的合理性等方面;可以发现违背程序编写标准的问题,程序中不安全、不明确和模糊 的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型 审查、程序逻辑审查、程序语法检查和程序结构检查等内容。”。 我看了一系列的静态代码扫描或者叫静态代码分析工具后,总结对工具的看法:静态代码 扫描工具,和编译器的某些功能其实是很相似的,他们也需要词法分析,语法分析,语意 分析 ...但和编译器不一样的是他们可以自定义各种各样的复杂的规则去对代码进行分析。 以下将会列出的静态代码扫描工具,会由于实现方法,算法,分析的层次不同,功能上会 差异很大。有的可以做 SQL注入的检查,有的则不能 ( 当然,由于时间问题还没有对规则进行研究,但要检查复杂的代码安全漏洞,是需要更高深分析算法的,所以有的东西应该不 是设置规则库就可以检查到的,但在安全方面的检查,一定程度上也是可以通过设置规则 进行检查的 )。 主 工具名静态扫描语言开源 / 厂商介绍 页付费网 址 https://www.sodocs.net/doc/4e4399764.html,、C、 ounec5.0 C++和 C#,付 Ounce Labs \ 还支持费 Java。 还有其他辅助工具: 1.Coverity Thread Coverity C/C++,C#,JAV Analyzer for Java 付费Coverity 2.Coverity Software Prevent A Readiness Manager for Java 3.Coverity

静态代码分析

静态代码分析 一、什么是静态代码分析 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。 在软件开发过程中,静态代码分析往往先于动态测试之前进行,同时也可以作为制定动态测试用例的参考。统计证明,在整个软件开发生命周期中,30% 至70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。但是,由于静态代码分析往往要求大量的时间消耗和相关知识的积累,因此对于软件开发团队来说,使用静态代码分析工具自动化执行代码检查和分析,能够极大地提高软件可靠性并节省软件开发和测试成本。 静态代码分析工具的优势 1. 帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。 2. 帮助代码设计人员更专注于分析和解决代码设计缺陷。 3. 显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。 二、主流Java静态分析工具 Findbugs、checkstyle和PMD都可以作为插件插入eclipse,当然也有单独的工具可以实现他们的功能,比如Findbugs Tool就可以不必插入eclipse就可以使用。 三者的功能如下表: 工具目的检查项 FindBugs 检查.class 基于Bug Patterns概念,查 找javabytecode(.class文件) 中的潜在bug 主要检查bytecode中的bug patterns,如NullPoint空指 针检查、没有合理关闭资源、字符串相同判断错(==, 而不是equals)等 PMD 检查源文件检查Java源文件中的潜在问 题 主要包括: 空try/catch/finally/switch语句块 未使用的局部变量、参数和private方法 空if/while语句 过于复杂的表达式,如不必要的if语句等 复杂类

100道Java基础测试题

Java基础测试题 不定项选择题 1、面向对象的三大特征是() A) 封装B) 继承C) 多态D) 线性 2、变量命名规范说法正确的是() A) 变量由英文字母、下划线、数字、$符号组成 B) 变量不能以数字作为开头 C) A和a在Java中代表同一个变量 D) 不同类型的变量,可以起相同的名字 3、i的值为10,表达式(i++)+(i--)的值为() A) 21B) 20 C) 19 D) 18 4、下面哪些定义变量的语句是正确的?() A) int i = 'A'; B) float f = 1.23; C) byte b = (byte)128; D) int c[5][5] = new int[ ][ ]; 5、以下代码的执行结果是() int a = 1; bool ean m = a%2 = = 1; if(m = false){ System.out.println("false"); }else{ System.out.println("true"); } A) false B) true C) 编译不通过 6、以下程序段中,哪个选项不能插入到第二行?() A)class Demo2 { } B) import java.util.*; C) public static void main(String args[ ]) { } D) package com; E) public class Demo2 { } 7、下面有关Java循环结构的描述正确的是() A) for循环体语句中,可以包含多条语句,但要用大括号括起来 B) for循环和do...while循环都是先执行循环体语句,后进行条件判断 C) continue和break只能用于循环结构中 D) 增强for循环遍历数组时不需要知道数组的长度,但不能实现与下标相关的操作 8、switch选择语句是多分支选择语句,只能处理等值条件判断的情况。在jdk1.7中,switch中的表达式可以是以下哪种类型() A)int B)char C)double D) float E)String F) short

静态代码检查工具Sonar的安装和使用

静态代码检查工具Sonar的安装和使用 目录 静态代码检查工具Sonar的安装和使用 (1) 第一章、Sonar简介 (2) 第二章、Sonar原理 (3) 第三章、Sonarqube安装 (5) 3.1、下载安装包 (5) 3.2、数据库连接方式 (5) 3.3、启动 (7) 3.4、插件引用 (8) 第四章、SonarQube Scanner安装 (10) 4.1、下载安装 (10) 4.2、数据库连接方式 (12) 4.3、启动并执行代码检查 (13) 4.4、查看执行结果 (16) 4.5、启动失败原因 (18)

第一章、Sonar简介 Sonar (SonarQube)是一个开源平台,用于管理源代码的质量。Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。支持的语言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex 等。 开源中国代码质量管理系统->https://www.sodocs.net/doc/4e4399764.html,/ 主要特点: ?代码覆盖:通过单元测试,将会显示哪行代码被选中 ?改善编码规则 ?搜寻编码规则:按照名字,插件,激活级别和类别进行查询 ?项目搜寻:按照项目的名字进行查询 ?对比数据:比较同一张表中的任何测量的趋势

第二章、Sonar原理 SonarQube 并不是简单地将各种质量检测工具的结果(例如FindBugs,PMD 等)直接展现给客户,而是通过不同的插件算法来对这些结果进行再加工,最终以量化的方式来衡量代码质量,从而方便地对不同规模和种类的工程进行相应的代码质量管理。 SonarQube 在进行代码质量管理时,会从图1 所示的七个纬度来分析项目的质量。

构造代码块与静态代码块

构造代码块(了解) 编码是基本不用,面试时考的可能性大。 1什么是构造代码块 构造代码块,又叫实例初始化块(实例块)。 它是被类体直接包含的,它是类的成员之一。 它也是无名块 2实例块的语法 class Demo { { System.out.println(“hello world”); } } 实例块是被类体直接包含的。 实例块中可以放0 ~ n条语句。 3实例块什么时候执行 与显示初始化语句同时执行(创建对象时执行)。它们的执行顺序是按上下顺序执行的!class Person { {System.out.println("hello1");} //a private String name = "zhangSan"; //1 {System.out.println("hello2");} //b private int age = 100; //2 {System.out.println("hello3");} //c private String sex = "male"; //3 {System.out.println("hello4");} //d } 当创建一个Person对象时,执行顺序是a、1、b、2、c、3、d。

4实例块的局限性 一般情况下没有使用实例块的必要,只有在匿名内部类中,需要使用构造器时才会使用实例块来充当构造器的作用。 实例块只能对下面定义的属性做写操作,而不能做读操作。 实例块对上面定义的属性就没有限制了。读写操作都可以。 class Person { { name = "zhangSan";//OK,对下面定义的属性做写操作 System.out.println(name);// 错误,不能对下面定义的属性做读操作 } private String name; { name = "liSi";//OK,对上面定义的属性做什么操作都可以 System.out.println(name);//OK,对上面定义的属性做什么操作都可以 } } 静态块(掌握) 在就业班中会看到它的使用。使用的不是很多! 1什么是静态块 静态块,又叫静态构造代码块、静态初始化块。 它是被类体直接包含的,它是类的成员之一。 使用static修饰的块 2静态块的语法 class Demo { static { System.out.println(“hello world”); } } 静态块是被类体直接包含的。 静态块中可以放0 ~ n条语句。

Java静态检测工具的简单介绍 - Sonar、Findbugs

Java静态检测工具的简单介绍- Sonar、Findbugs 2010-11-04 13:55:54 标签:sonar休闲职场 Java静态检测工具的简单介绍 from: https://www.sodocs.net/doc/4e4399764.html,/?p=9015静态检查:静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人 工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。 代码检查代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和 设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代 码结构的合理性等方面;可以发现违背程序编写标准的问题,程序中不安全、 不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题, 包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构 检查等内容。”。看了一系列的静态代码扫描或者叫静态代码分析工具后, 总结对工具的看法:静态代码扫描工具,和编译器的某些功能其实是很相似的, 他们也需要词法分析,语法分析,语意分析...但和编译器不一样的是他们可 以自定义各种各样的复杂的规则去对代码进行分析。 静态检测工具: 1.PMD 1)PMD是一个代码检查工具,它用于分析 Java 源代码,找出潜在的问题: 1)潜在的bug:空的try/catch/finally/switch语句 2)未使用的代码:未使用的局部变量、参数、私有方法等 3)可选的代码:String/StringBuffer的滥用

4)复杂的表达式:不必须的if语句、可以使用while循环完成的for循环 5)重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs 2)PMD特点: 1)与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在 不运行Java程序的情况下报告错误。 2)PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许 多问题 3)用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。 3)同时,PMD已经与JDeveloper、Eclipse、jEdit、JBuilder、BlueJ、 CodeGuide、NetBeans、Sun JavaStudio Enterprise/Creator、 IntelliJ IDEA、TextPad、Maven、Ant、Gel、JCreator以及Emacs 集成在一起。 4)PMD规则是可以定制的: 可用的规则并不仅限于内置规则。您可以添加新规则: 可以通过编写 Java 代码并重新编译 PDM,或者更简单些,编写 XPath 表 达式,它会针对每个 Java 类的抽象语法树进行处理。 5)只使用PDM内置规则,PMD 也可以找到你代码中的一些真正问题。某些问题可能 很小,但有些问题则可能很大。PMD 不可能找到每个 bug,你仍然需要做单元测 试和接受测试,在查找已知 bug 时,即使是 PMD 也无法替代一个好的调试器。

Java选择题

Java 练习题 一、单选题 1.Java 程序的执行过程中用到一套JDK 工具,其中 java.exe 是指( B ) A. Java文档生成器 B. Java解释器 C. Java编译器 D. Java类分解器 2.编译 Java程序的命令文件名是(B) A. java.exe B. javac.exe C. javac D. appletviewer.exe 3.编译 Java程序 file.java后生成的程序是(C) A. file.html B. File.class C. file.class D. file.jar 4.Java 语言与其他主要语言相比较,独有的特点是( C ) A. 面向对象 B. 多线程 C. 平台无关性 D. 可扩展性 5.声明 Java独立应用程序main()方法时,正确表达是( A ) A. public static void main(String[] args){ ?} B. private static void main(String args[]){?} C. public void main(String args[]){?} D. public static void main(){?} 6.下列有关 Java 语言的叙述中,正确的是(B)。 A. Java是不区分大小写的 B.源文件名与 public 类型的类名必须相同 C. 源文件的扩展名为 .jar D.源文件中 public类的数目不限 7.Java 用来定义一个新类时,所使用的关键字为( A)。 A. class B. public C. struct D. class 或 struct 8 .一个可以独立运行的Java 应用程序( D )。 A. 可以有一个或多个main方法 B. 最多只能有两个main 方法 C. 可以有一个或零个main方法 D. 只能有一个main方法 9.下面哪个是 Java 语言中正确的标识符(B ) A. 3D B. $this C. extends D. implements 10.下面哪个不是 Java 的保留字或关键字 ?( B ) A. default B. NULL C. throws D. long 11.对if(? )句型括号中的表达式,下列Java 类型中哪一个是合法的?( C ) A. byte B. short C. boolean D. Object reference 12. Java中整型包括(D)。 A. int , byte , char B. int , short , long , byte , char C. int , short , long , char D. int , short , long , byte

四款优秀的源代码扫描工具简介

一、DMSCA-企业级静态源代码扫描分析服务平台 端玛企业级静态源代码扫描分析服务平台(英文简称:DMSCA)是一个独特的源代码安 全漏洞、质量缺陷和逻辑缺陷扫描分析服务平台。该平台可用于识别、跟踪和修复在源代码 中的技术和逻辑上的缺陷,让软件开发团队及测试团队快速、准确定位源代码中的安全漏洞、质量和业务逻辑缺陷等问题,并依据提供的专业中肯的修复建议,快速修复。提高软件产品 的可靠性、安全性。同时兼容并达到国际、国内相关行业的合规要求。 DMSCA是端玛科技在多年静态分析技术的积累及研发努力的基础上,联合多所国内及国 际知名大学、专家共同分析全球静态分析技术的优缺点后、结合当前开发语言的技术现状、 源代码缺陷的发展势态和市场后,研发出的新一代源代码企业级分析方案旨在从根源上识别、跟踪和修复源代码技术和逻辑上的缺陷。该方案克服了传统静态分析工具误报率(False Positive)高和漏报(False Negative)的缺陷。打断了国外产品在高端静态分析产品方面的垄断,形成中国自主可控的高端源代码安全和质量扫描产品,并支持中国自己的源代码检测方 面的国家标准(GB/T34944-2017 Java、GB/T34943-2017 C/C++、GB/T34946-2017 C#),致 力于为在中国的企业提供更直接,更个性化的平台定制和本地化服务。 DMSCA支持主流编程语言安全漏洞及质量缺陷扫描和分析,支持客户化平台界面、报告、规则自定义,以满足客户特定安全策略、安全标准和研发运营环境集成的需要。产品从面世,就获得了中国国内众多客户的青睐,这些客户包括但不限于银行、在线支付、保险、电力、 能源、电信、汽车、媒体娱乐、软件、服务和军事等行业的财富1000企业。 1、系统架构 2、系统组件

Java中的static变量、方法、代码块

1、static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是: 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。 对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。 2、static方法 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!! 因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。 3、static代码块 static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。 例子: class A{ static{ System.out.println("A static block"); // (3)运行 } { System.out.print("Q"); // (5)运行 } public A (){ System.out.println("x"); // (6)运行 } } class B extends A{ static{ System.out.println("B static block"); // (4)运行 } { System.out.print("W"); // (7)运行 }

4种代码扫描工具分析

简介 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有4 种主流Java 静态代码分析工具(Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,希望能够帮助Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中。 引言 在Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。Java 静态代码分析(static code analysis)工具能够在代码构建过程中帮助开发人员快速、有效的定位代码缺陷并及时纠正这些问题,从而极大地提高软件可靠性并节省软件开发和测试成本。目前市场上的Java 静态代码分析工具种类繁多且各有千秋,因此本文将分别介绍现有4 种主流Java 静态代码分析工具(Checkstyle,FindBugs,PMD,Jtest),并从功能、特性等方面对它们进行分析和比较,希望能够帮助Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中。

静态代码分析工具简介 什么是静态代码分析 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。 在软件开发过程中,静态代码分析往往先于动态测试之前进行,同时也可以作为制定动态测试用例的参考。统计证明,在整个软件开发生命周期中,30% 至70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。 但是,由于静态代码分析往往要求大量的时间消耗和相关知识的积累,因此对于软件开发团队来说,使用静态代码分析工具自动化执行代码检查和分析,能够极大地提高软件可靠性并节省软件开发和测试成本。 静态代码分析工具的优势 1. 帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。 2. 帮助代码设计人员更专注于分析和解决代码设计缺陷。 3. 显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。

Java试卷(简单)

《Java试卷(简单)》试卷 得分 单选题(每题2分,共计40分) 1.下面IP地址格式中,错误的是() A、1.1.1.1 B、127.0.0.1 C、192.168.1.360 D、123.125.114.144 2.对于使用多态的应用程序,某个对象的确切类型何时能知道() A、执行时才可以知道 B、应用程序编译时能够判断 C、程序员编写程序时就已知道 D、永远不会知道3.下列关于Socket类的描述中,错误的是() A、Socket类中定义的getInputStream()方法用于返回Socket的输入流对象。 B、Socket类中定义的getOutputStream()方法用于返回Socket的输出流对象。 C、Socket类中定义的getLocalAddress()方法用于获取Socket对象绑定的本地IP地址。 D、Socket类中定义的close()方法用于关闭输入\\输出流对象。 4.下列选项中,属于浮点数常量的是() A、198 B、2e3f C、true D、null 5.下列选项中,不属于Java中关键字的是() A、const B、false C、Final D、try 总分题型单选题判断题填空题简答题题分 得分

6.下列关键字中,用于创建类的实例对象的是() A、class B、new C、private D、void 7.下面关于ArrayList的描述中,错误的是() A、ArrayList是List接口的一个实现类。 B、ArrayList内部的数据存储结构是数组 C、ArrayList不太适合做大量的增删操作 D、使用ArrayList集合遍历和查找元素很高效 8.以下关于foreach的说法中,哪一个是错误的() A、使用foreach遍历集合时,可以对元素进行修改。 B、foreach可以对数组进行遍历。 C、foreach可以对集合进行遍历。 D、foreach循环是一种更加简洁的for循环,也称增强for循环。9.KeyEvent类位于下列哪个包中() A、java.awt B、java.awt.event C、java.awt.dnd D、java.awt.im 10.下面关于静态同步方法说法错误的是() A、静态方法必须使用class对象来同步。 B、对于静态的同步方法而言,该方法的同步监视器不是this,而是该类本身。 C、静态同步方法和以当前类为同步监视器的同步代码块不能同时执行。 D、一个类中的多个同步静态方法可以同时被多个线程执行。 11.下列选项中,正确关闭数据库资源的顺序是() A、resultSet.close() B、atement.close() C、nnection.close() D、statement.close()

三款静态源代码安全检测工具比较

源代码安全要靠谁? 段晨晖2010-03-04 三款静态源代码安全检测工具比较 1. 概述 随着网络的飞速发展,各种网络应用不断成熟,各种开发技术层出不穷,上网已经成为人们日常生活中的一个重要组成部分。在享受互联网带来的各种方便之处的同时,安全问题也变得越来越重要。黑客、病毒、木马等不断攻击着各种网站,如何保证网站的安全成为一个非常热门的话题。 根据IT研究与顾问咨询公司Gartner统计数据显示,75%的黑客攻击发生在应用层。而由NIST的统计显示92%的漏洞属于应用层而非网络层。因此,应用软件的自身的安全问题是我们信息安全领域最为关心的问题,也是我们面临的一个新的领域,需要我们所有的在应用软件开发和管理的各个层面的成员共同的努力来完成。越来越多的安全产品厂商也已经在考虑关注软件开发的整个流程,将安全检测与监测融入需求分析、概要设计、详细设计、编码、测试等各个阶段以全面的保证应用安全。 对于应用安全性的检测目前大多数是通过测试的方式来实现。测试大体上分为黑盒测试和白盒测试两种。黑盒测试一般使用的是渗透的方法,这种方法仍然带有明显的黑盒测试本身的不足,需要大量的测试用例来进行覆盖,且测试完成后仍无法保证软件是否仍然存在风险。现在白盒测试中源代码扫描越来越成为一种流行的技术,使用源代码扫描产品对软件进行代码扫描,一方面可以找出潜在的风险,从内对软件进行检测,提高代码的安全性,另一方面也可以进一步提高代码的质量。黑盒的渗透测试和白盒的源代码扫描内外结合,可以使得软件的安全性得到很大程度的提高。 源代码分析技术由来已久,Colorado 大学的 Lloyd D. Fosdick 和 Leon J. Osterweil 1976 年的 9 月曾在 ACM Computing Surveys 上发表了著名的 Data Flow Analysis in Software Reliability,其中就提到了数据流分析、状态机系统、边界检测、数据类型验证、控制流分析等技术。随着计算机语言的不断演进,源代码分析的技术也在日趋完善,在不同的细分领域,出现了很多不错的源代码分析产品,如 Klocwork Insight、Rational Software Analyzer 和 Coverity、Parasoft 等公司的产品。而在静态源代码安全分析方面,Fortify 公司和 Ounce Labs 公司的静态代码分析器都是非常不错的产品。对于源代码安全检测领域目前的供应商有很多,这里我们选择其中的三款具有代表性的进行对比,分别是Fortify公司的Fortify SCA,Security Innovation公司的Checkmarx Suite和Armorize 公司的CodeSecure。 2. 工具介绍

Java 中的 static 使用之静态方法

Java 中的static 使用之静态方法 与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。静态方法的使用如: 需要注意: 1、静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如: 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。如: 、在普通成员方法中,则可以直接访问同类的非静态变量和静态变量,如下所示:

3、静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。如: ava 中的static 使用之静态初始化块 Java 中可以通过初始化块进行数据赋值。如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。 需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。 我们来看一段代码:

运行结果: 通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。 封装 1、概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 2、好处 a:只能通过规定的方法访问数据 b:隐藏类的实例细节,方便修改和实现。 什么是Java 中的内部类 问:什么是内部类呢? 答:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。 问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!! 答:内部类的主要作用如下:

java代码静态检查工具介绍

静态检查:静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。 代码检查代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和 设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代 码结构的合理性等方面;可以发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构 检查等内容。”。看了一系列的静态代码扫描或者叫静态代码分析工具后, 总结对工具的看法:静态代码扫描工具,和编译器的某些功能其实是很相似的,他们也需要词法分析,语法分析,语意分析...但和编译器不一样的是他们可 以自定义各种各样的复杂的规则去对代码进行分析。 静态检测工具: 1. PMD 1)PMD是一个代码检查工具,它用于分析 Java 源代码,找出潜在的问题: 1)潜在的bug:空的try/catch/finally/switch语句 2)未使用的代码:未使用的局部变量、参数、私有方法等 3)可选的代码:String/StringBuffer的滥用 4)复杂的表达式:不必须的if语句、可以使用while循环完成的for循环 5)重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs 2)PMD特点: 1)与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在 不运行Java程序的情况下报告错误。 2)PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许 多问题 3)用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。 3)同时,PMD已经与JDeveloper、Eclipse、jEdit、JBuilder、BlueJ、 CodeGuide、NetBeans、Sun JavaStudio Enterprise/Creator、 IntelliJ IDEA、TextPad、Maven、Ant、Gel、JCreator以及Emacs 集成在一起。 4)PMD规则是可以定制的: 可用的规则并不仅限于内置规则。您可以添加新规则: 可以通过编写 Java 代码并重新编译 PDM,或者更简单些,编写 XPath 表 达式,它会针对每个 Java 类的抽象语法树进行处理。 5)只使用PDM内置规则,PMD 也可以找到你代码中的一些真正问题。某些问题可能 很小,但有些问题则可能很大。PMD 不可能找到每个 bug,你仍然需要做单元测试和接受测试,在查找已知 bug 时,即使是 PMD 也无法替代一个好的调试器。 但是,PMD 确实可以帮助你发现未知的问题。 1. FindBugs 1)FindBugs是一个开源的静态代码分析工具,基于LGPL开源协议,无需 运行就能对代码进行分析的工具。不注重style及format,注重检测真正

java练习题

public class Multipation { public static void main(String[] args) { 定义一个类Student,属性为学号、姓名和成绩;方法为增加记录SetRecord和得到记录GetRecord。SetRecord给出学号、姓名和成绩的赋值,GetRecord通过学号得到考生的成绩。 public class Student { /** *@param args */ private int ID; private String name; private float score; public void SetRecord(int ID,String name,float score){ =ID; =name; =score; } public float getRecord(int ID){ if(ID== return ; else return -1; } public static void main(String[] args) { 编写程序,测试字符串“你好,欢迎来到Java世界”的长度,将字符串的长度转

换成字符串进行输出,并对其中的“Java”四个字母进行截取,输出截取字母以及它在字符串中的位置。 public class StringTest { /** *@param args */ public static void main(String[] args) { 自己设计一个坐标类,能提供以下方法如求当前坐标和其他坐标之间的距离等方法,要求所有变量为私有变量,并提供两个构造函数。 public class XYdistance { private int x; private int y; XYdistance(){ setX(0); setY(0); } public void setX(int x) { = x; } public int getX() { return x; } public void setY(int y) { = y;

Facebook静态代码分析工具Infer介绍

Facebook静态代码分析工具Infer介绍 作者:暨景书,新炬网络高级技术专家。 随着IT系统的广泛应用,补丁、需求大量变更,版本快速迭代,需要频繁的进行发布,发布管理质量不高,导致故障频繁。如何在上线采取有效措施,将一些潜在的bug扼杀在版本发布之前,优化代码,防止应用的崩溃和性能低下问题,值得我们去探索。 目前行业主要是通过静态代码分析方式,在无需运行被测代码前提下,在构建代码过程中帮助开发人员快速、有效的定位代码缺陷并及时纠正这些问题,从而极大地提高软件可靠性并节省软件开发和测试成本。静态代码分析可以分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等。 Infer是Facebook今年刚开源一款静态分析工具。Infer可以分析Objective-C,Java 或者C代码,重点作用于分析APP(Android/iOS)项目,报告潜在的问题。Infer已经成为 Facebook 开发流程的一个环节,包括Facebook Android和iOS主客户端,Facebook Mes senger,Instagram在内的,以及其他影响亿万用户的手机应用,每次代码变更,都要经过Infer的检测。 先介绍infer相比其它静态分析工具有什么优点: 1、是一款开源静态的代码分析工具; 2、效率高,规模大,几分钟可以扫描数千行代码; 3、支持增量及非增量分析; 4、分解分析,整合输出结果。Infer能将代码分解,小范围分析后再将结果整合在一起,兼顾分析的深度和速度。 Infer捕捉的bug类型: 1.Java中捕捉的bug类型 Resource leak Null dereference 2.C/OC中捕捉的bug类型 Resource leak Memory leak Null dereference Premature nil termination argument

面向对象程序设计(Java)-题库

面向对象程序设计(java)题库 抽题规范: (1)此题库共75道题,抽8道作为期末考试题。其中,易8道,较易33道,较难18道,难16道. (2)按题型,第一大题抽4道,每道10分;第二大题抽2道,每道10分;第三大题抽1道,每道20分;第四大题抽1道,每道20分。 (3)按难易程度:易(1道)、较易(4道)、较难(2道)、难(1道)。 一、解答题(共40道,抽4道,每道10分,共40分) 1.面向对象有哪三大特征? 封装,继承,多态. 2.什么是类?(易) 类是定义同一类所有对象的变量和方法的蓝图或原型。 3.什么是对象? 对象是类的实例;对象是通过new className产生的,用来调用类的方法;类的构造方法 .。 4.类和对象的区别是什么? java中的类是模板,而对象是依据模版产生的实体 5.简述Java的封装性,如何在Java中实现封装 封装性是指的把代码封装到大括号中,只能访问自己内部的数据,外边的东西访问不了。 实现为加访问权限。 6.构造方法有哪些特点 方法名与类名相同,没有返回值,可以有多个重载。 7.构造方法的作用是什么?(较易) 初始化对象,就是你new一个类的时候可以很方便的给你的对象里的属性赋值。 8.this在程序中所代表的意思(易) 指当前对象 9继承的作用是什么?(易) 实现代码复用。 10.Java支持多继承吗?(易) 不能。 11.子类可以继承父类的哪些成员?(较难) 变量和构造方法。 12.简述构造子类对象时子类和父类构造方法执行顺序(较易) 先执行父类再执行子类。 13.什么是方法的重载,如何选择被重载的方法?(较易)

同一个类中如果同时存在两个以上的方法有同一个名字,在这种情况下,我们说方法被重载了,这个过程被称为重载。 14什么是方法的重写,如何选择被重写的方法?(较难) 当同名方法同时存在于子类和父类中时,对于子类来说就是将继承父亲的方法重载写过了,实现功能完全和父类无关。 15.简述重载和覆盖的区别(较易) 重载是让同一方法名的方法可以处理和返回不同类型的数据 而覆盖是在子类中改写父类的方法 16.什么是成员的隐藏?如何访问被隐藏了的父类成员?(较易) 在子类对父类的继承中,如果子类的成员变量和父类的成员变量同名,此时称为子类隐藏了父类的成员变量。 Super语句。 17.简述this和super的区别(较难) this 即可以拿到自己的也可以拿到父类的,super 只能拿到父类的 18.简述面向对象的多态性(较易) 一个接口,多个方法 19.简述实例变量和类变量的区别(较易) 1.简述静态方法和实例方法的区别(较易) 2.简述按值传递和按址传递的区别(较难) 3.什么是抽象类?抽象类中一定有抽象方法吗?(较难) 4.什么是接口?接口中的成员有什么特点?(较易) 5.简述抽象类和接口的区别(较易) 6.extends和implements的区别是什么?(较易) 7.final可以用在哪些地方,分别代表什么意思?(较易) 8.static可以用在哪些地方,分别代表什么意思?(较易) 9.静态代码块的作用是什么?它被执行几次?(较易) 10.Java中包的作用是什么(易) 11.在Java中,import和package的区别?(易) 12.public,protected,default,private的区别(较易) 13.内部类的作用是什么?内部类常用在哪里?(较难) 14.简述异常处理机制(较难) 15.简述throw和throws的区别(较易) 16.简述final和finally的区别(较易) 17.列出三个常见的异常并说明其作用(较易) 18.简述String和StringBuffer的区别(较易) 19.集合Collection包含哪两大子接口?它们的区别是什么?(较易) 20.如何把一个字节流转换成字符流?(较易) 21.让一个类成为线程有哪两种方式?(较易) 二、单项编程(共25题,抽2题,每题10分,共20分)

相关主题