`

Java基础知识的十个盲点

阅读更多

        连续三天的Java Language Fundamental Knowledge培训,整体是会让那些有经验的Java程序员哈欠连天的。原本也想坐到Training Room的后排敷衍了事,不过想想自己的基础,最后还是选择了坐到第一排。
        三天的课程平淡无奇,讲的无非是任何一本Java语言速成类的书籍都会讲到的内容。不过,当面对着这么多纷繁复杂的基础知识时候,我还是发现不少的盲点,或许有些错误的认识还很低级的呢,大家见笑了。
        1、数字类型的后缀(如double类型使用d,long类型使用l等)的作用;关于这一点,我们先来看一个变量的定义:int i = 2200000000;这个当然不会编译通过,因为这个数字已经超过了int类型的范围,很自然的,我将int改成了long。大家觉得修改过后是不是可以编译通过了呢?实际上仍然是不行的,不仅不能给int类型的i赋上一个超过int范围的数字,而且2200000000也不能这样孤零零的存在,因为它要告诉编译器:我是一个long类型的数。只有在2200000000后面加上l之后,才是一个真正合法的变量定义;
        2、class的modifier到底可以用哪几个,分别具有怎样的作用;这一点是比较简单,但是问一下,private可以用作class的modifier呢?你是否会犹豫呢?能够用作class的modifier只有几个:final,abstract,public和default modifier;
        3、method和field的accessible modifier中默认modifier(即是没有使用public、protected或者private)的受限制程度是比protected高,还是低呢?对于这个问题,我一直都不是很清晰。正确的答案是高的。默认的accessible modifier使得method和field具有package级别的可访问性,package以外的class是不可以访问这些method和field的,而protected则不然,在package以外,如果是该class的子类则可以访问到protected修饰的method和field,却访问不到默认modifier修饰的method和field;
        4、构造函数是否可以使用final或者abstract的修饰符呢?答案是不行的。构造函数只能使用accessible modifier;
        5、构造函数是不能有返回值的,也就是不能在其函数名前加上返回值的修饰符。那么如果定义了一个与类同名的具有返回值的函数会不会产生编译错误呢?这个问题请看下面的代码:     

class Test {
    
public void Test() {
    }

}

        很明显,我不会这样写,但是这段代码会产生编译错误吗?结果是不会的。因为这只是类Test中的一个返回值为void的方法。使用javac编译是不会有任何提示的。但是,使用jikes则会给出一个warning以告诉programmer:类Test中包含了一个跟构造函数同名的函数。从这里也可以看出jikes作为Java编译器具有比javac更加专业的一面;
        6、synchronized这个关键字,可以用在class的field前面吗?答案是不行的。synchronized只能用在方法上,以及定义同步的block;
        7、当一个父类显式定义了一个非默认的构造函数(也就是带参数的构造函数)的时候,子类是否一定需要自己定义构造函数呢?答案是一定要的。大家先看以下代码:     

Class SuperClass {
    SuperClass(
int i) {}
}

Class SubClass extends SuperClass 
{
}

       在SubClass中,我们是一定要显式定义一个构造函数,然后在构造函数中调用父类的构造函数的,否则就无法编译通过,编译的错误是父类没有定义默认的构造函数。从编译错误的提示中,我们可以找到另外的解决方法,就是在SuperClass当中再定义一个默认的构造函数即可,子类就不用煞有介事的自己去定义一个构造函数去调用父类的构造函数,然后啥也不做了。因此,我觉得应该养成一种习惯,就是需要定义非默认的构造函数的时候,别忘了将默认的构造函数也定义一遍,这样就可以给扩展的子类提供方便了;
        8、在interface中定义的field是static的吗?是final的吗?答案是interface中的field是static和final 的。在interface定义的field是必须初始化的,同时也是可以通过intefaceName.fieldName的方式去访问的;
        9、这个问题是关于abstract的,大家先看以下代码:

abstract class Foo {
    
void test();
}

        这样写有问题吗?我开始是觉得没有问题的,但是实际上这样是会有编译错误的。原因很简单,因为test方法并不是abstract的,需要加上方法体的标志——{};或者说如果一个方法没有方法体,那么必须声明其是abstract的。
        10、最后一个问题是关于instanceof的,大家也先看看以下代码:

class A {}
class B extends A {}
class C extends B {}
class Test {
    
public static void main(String[] args) {
        C c 
= new C();
        System.
out.println(c instanceof A);
    }

}

        print出来的会是true还是false呢? 答案很简单,是true。不过,我一直都以为是false,因为c只是类C的实例,但是我忘了一点,每当使用new关键字去创建一个实例的时候,都会逐个 层次地调用其父类的构造函数,那么这里instanceof返回确实应该是true了。

分享到:
评论

相关推荐

    java 盲点 应该注意的地方

    熟悉这些知识点并能深入理解其工作原理,是成为一名优秀的Java开发者的基础。 这些Java盲点不仅在面试中经常出现,也是日常编程中需要时刻注意的。理解和掌握这些知识点,有助于提高代码质量,优化性能,并防止潜在...

    Java程序设计基础答案

    通过这个“Java程序设计基础习题答案”文档,学习者可以系统地检查自己的学习进度,找出知识盲点,并加深对Java编程的理解。同时,这也可以帮助他们提高解决问题的能力,为更深入的Java学习打下坚实的基础。无论是...

    java基础——————试题库

    这个“java_test”文件很可能是包含了一系列测试题目的集合,涵盖了以上提到的所有Java基础知识点,通过练习这些题目,你可以检验自己的学习成果,发现并弥补知识盲点,进一步巩固Java基础。在学习过程中,不断实践...

    Java语言程序设计第10版基础篇 第四章答案

    通过《Java语言程序设计第10版基础篇 第四章答案》提供的解题参考,学习者可以自我评估,找出知识盲点,进一步巩固学习成果。同时,分享资源的行为也有助于建立编程社区的学习氛围,促进大家共同进步。

    java 语言程序设计 第十版 复习题答案

    例如,在基础语法部分,你需要理解变量、数据类型、运算符、流程控制语句等基础知识;在面向对象部分,类的定义、对象的创建、封装、继承和多态性是重点;接口用于实现完全抽象,异常处理保证了程序的健壮性;集合...

    java外包笔试题两套.zip

    1. **Java基础**:包括类、对象、封装、继承、多态等面向对象概念,以及异常处理、数据类型、运算符、流程控制语句等基础知识。 2. **Java集合框架**:如ArrayList、LinkedList、HashMap、HashSet等容器的使用,...

    更新至2020年12月最全Java 面试全解析:核心知识点与典型面试题.pdf

    在Java基础部分,内容包括String的面试题、Java 8的新特性、包装类的知识盲点、数组与算法。关于类和克隆,主要讨论了克隆的深浅本质。数据结构和队列部分,则不仅深入讲解了集合的使用和关系,还包括队列内容的掌握...

    Java面试笔试题大汇总(最全+详细答案)

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。..."11Java面试笔试题汇总和答案.pdf"这个资源将提供详细的题目和解答,帮助你全面复习并检查自己的知识盲点,为Java求职面试做好充分准备。

    Java习题.rar

    其次,“Java基础习题.doc”文档可能是专门针对Java基础知识的练习题,例如变量、数据类型、运算符、控制结构(如if语句、switch、for循环、while循环)、方法定义和调用等。这些基础习题对于初学者来说至关重要,...

    java培训的资料

    这些练习题则是检验学习效果的重要工具,可以帮助学习者发现知识盲点,及时进行复习和补充。总的来说,这份“java培训的资料”是一套全面而实用的学习资源,对于任何想要深入Java领域的人来说都是宝贵的财富。

    计算机考试二级Java

    【全国计算机考试二级Java】是针对计算机操作与...考生需要扎实掌握Java基础知识,通过做题和实践来提升自己的编程技巧。而提供的压缩包文件“wuziqidjbpc6”作为学习资料,可以帮助考生更好地准备考试,提高通过率。

    java275模拟题

    接着,"SCJP_104.doc"可能是针对SCJP 5.0(也称为SCJP 1.5)的模拟试题,虽然版本稍旧,但仍然涵盖了许多Java的基础知识。这个版本可能包含关于泛型、枚举、注解等新特性的问题。 "java程序员认证模拟题及详细分析....

    java程序员考试模考系统

    Java语言的基础部分,例如变量、运算符、流程控制语句,是SCJP考试中的基础知识点。考生需要理解并能熟练运用它们来解决问题。类与对象是面向对象编程的核心,包括封装、继承和多态性,这些概念在实际编程中至关重要...

    java quiz(基本概念选择题)

    这个"java quiz(基本概念选择题)"资源提供了一种互动的方式来测试和加深你对Java基础知识的理解。下面,我们将深入探讨Java的一些核心概念,这些概念在选择题中可能会出现。 1. **类与对象**:Java中的所有程序都是...

    Java学习笔记适合java初学者使用

    【Java学习笔记】是针对Java初学者的一套全面的学习资源,旨在帮助新手快速掌握Java编程基础知识。这份资料包含了丰富的学习内容,如Java语言的核心概念、语法特性、面向对象编程思想等,同时也融入了实践性的练习,...

    计算机二级JAVA 南开百题 答案

    【计算机二级JAVA】是中国计算机技术与软件专业技术资格(水平)考试中的一个重要部分,主要测试考生对Java编程语言的基础知识和编程能力。这个考试通常包括理论部分和实践操作部分,实践部分即为“南开百题”所指的...

    java课程设计-英汉电子词典

    1. **知识积累**:课程设计加深了对Java基础知识的理解,特别是在数据库操作方面。 2. **实践应用**:通过实际操作,增强了对Java开发环境和平台的熟练度,如JDK和Eclipse的使用。 3. **问题解决**:遇到问题时,...

    Java面试题及答案整理.docx

    这份资源覆盖了Java基础知识、核心概念、高级特性、框架技术、设计模式、并发编程、JVM原理、数据结构与算法等多个维度,旨在帮助求职者系统复习并巩固Java相关知识体系。 通过整理常见的面试问题及其详细解答,这...

    java试题1000道

    1. **Java基础**:Java的基础语法是学习的起点,包括变量、数据类型、运算符、流程控制语句(如if、for、while)等。例如,“Java学习笔记(必看经典).doc”可能会深入讲解这些基本概念。 2. **面向对象编程**:Java...

    JAVA课后题答案(全)

    首先,我们来看第1章,通常这一章会介绍Java的基础知识,如变量、数据类型、运算符、控制流程语句(如if、switch、for、while等)以及方法的定义与调用。第1章参考答案将涵盖这些基础知识的解题实例,帮助学生建立...

Global site tag (gtag.js) - Google Analytics