导语
  Java 面试题集2021版

Java基础部分三

  • 37、abstract 的method 是否可同时是static,是否可同时是native,是否可同时是synchronized?
  • 38、什么是内部类?Static Nested Class 和Inner Class 的不同
  • 39、内部类可以引用它的包含类的成员吗?有没有什么限制?
  • 40、Anonymous Inner Class(匿名内部类)是否可以extends(继承)其他类,是否可以implement(实现)interface(接口)?
  • 41、JDK中那些类是不能被继承的?
  • 42、Java中是否有过程和函数?
  • 43、String 是最基本的数据类型吗?
  • 44、String s = "Hello";s = s+"World!";这两行代码执行之后,原始的String对象中的内容到底有没有发生变化?
  • 45、String 类是否可以继承?
  • 46、String s = new String("nihui");创建了几个String Object?二者之间有什么区别?

37、abstract 的method 是否可同时是static,是否可同时是native,是否可同时是synchronized?

  abstract 的Method不可以是static 的,因为抽象的方法是要被子类实现的,而static与子类无关。
  native 方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在这被子类实现的问题,所以它也不能是抽象的,不能与abstract 混合使用。在Java中有有很多这样的方法。
  关于synchronized与abstract 合用的问题,在平时的开发中没有用到过这种情况,因为对于一个抽象类,如果其中有一个方法被加上了synchronized方法那就说明所有继承了这个类的其他子类都会实现这个方法,这个时候就有一个问题,就是在程序执行过程中,所有遇见这个方法的地方,都会被加锁。这回导致的问题就是内存泄漏的问题。另外对于这个锁,应该指的是具体的某个一锁,而不是泛泛的所有锁。

38、什么是内部类?Static Nested Class 和Inner Class 的不同

  内部类就是在一个类的内部定义的类,内部类中不能定义静态成员,内部类可以直接访问外部类中的成员变量,内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中,例如

public class Outer{int out = 0;public void method(){Inner1 inner1 = new Inner1();public class Inner2{public method(){out = 3;}}}public class Inner1{}
}

  在方法体外面定义的内部类的访问类型可以是public,protected,默认的,private等4种类型,这就好像类中定义的成员变量有4中访问类型一样,它们决定了这个内部类的定义对其它类是否可见;对于这种情况,我们可以在外面创建内部类的实例对象,创建内部类的实例对象时,一定要先创建外部类的实例对象,然后用这个外部类的实例对象去创建内部类的实例对象。

  在方法内部定义的内部类不能有访问类型修饰符,就好像方法中定义的局部变量一样,但这种内部类的前面可以使用final或者abstract修饰符。这种内部类对其它类是不可见的其它无法引用这种内部类,这种内部类创建实例对象可以传递给其它访问类,这种内部类必须是先定义,然后在使用,即内部类的定义代码必须出现在使用该类之前,这与方法中的局部变量必须先定义后使用的道理是一样的,这种内部类可以访问方法体中的局部变量,但是,该局部变量前必须加final修饰符

  在方法体内部还可以采用如下的语法来创建一种匿名内部类,即定义某一接口或类的子类的同时,还可以创建该子类的实例对象,无需为该子类定义名称:

public class Outer{public void start(){new Thread(new Runable(){pbulic void run(){}}).start();}
}

  最后,在方法外部定义的内部类前面可以加上static关键字,从而成为Static Nested Class ,它不再具有内部类的特性,所以,从狭义上来讲,它不是内部类。Static Nested Class 与普通类在运行时的行为和功能没有什么区别,只是在编程引用的时候有些区别,它可以定义成public,protected,默认的,private 等多种类型,而普通类只能定义成public和默认的这两种类型,在外面引用Static Nested Class 类的名称为“外部类名.内部类名”。在外部不需要创建外部类的实例对象,就可以直接通过上面这种方式进行对象创建。

  由于Static Nested Class 不依赖于外部类的实例对象,所以Static Nested Class 能访问外部类的非static成员变量。当在外部类中访问Static Nested Class 时,可以直接使用Static Nested Class 的名称,而不需要加上外部类的名字,在Static Nested Class 中也可以直接引用外部类的static 成员变量,不需要加上外部类的名称。

  在静态方法中定义的内部类也是Static Nested Class ,这时候不能在类前面加上static关键字,静态方法中的Static Nested Class 与普通方法中的内部类的应用方式很相似,它除了可以直接访问外部类中的static成员变量,还可以访问静态方法中的局部变量,但是,该局部变量前必须要加上final关键字。

39、内部类可以引用它的包含类的成员吗?有没有什么限制?

  完全可以。如果不是静态内部类,那就没有什么限制!
  如果你把静态嵌套类当做内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,而只能访问外部类中的静态成员,例如,下面的代码

class Outer{static int x;static class Inner{void test(){syso();}}
}

40、Anonymous Inner Class(匿名内部类)是否可以extends(继承)其他类,是否可以implement(实现)interface(接口)?

   可以继承其他类或实现其他接口,不仅是可以的,而且是必须的!

41、JDK中那些类是不能被继承的?

  不能继承的类是用final关键字修饰的类。一般比较基本的类型或者是为了防止扩展类无意间破坏原来的方法的实现的类型应该都是final的,在JDK中System、String、StringBuffer等这些都是不能被继承的。

42、Java中是否有过程和函数?

  在Java中可以存在过程和函数。在Java中,对于程序的各种功能实现,都是通过方法实现的;而方法在运行的时候 ,就被称为是过程。Java中的函数有main(),时间函数等等。

43、String 是最基本的数据类型吗?

  Java 中包含8种基本数据类型Byte、int、char、long、float、double、boolean和short
  java.lang.String 是一个引用类型,在Java中大的分类还可以分为基本数据类型,和引用类型,所有基本数据类型的封装类都是引用类型。

44、String s = “Hello”;s = s+“World!”;这两行代码执行之后,原始的String对象中的内容到底有没有发生变化?

  没有,原因是String 被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,S原先指向了一个String对象,内容是“Hello”,然后 对S进行了+ 操作,那么S所指向的对象是否发生变化呢?答案是没有,这个时候,S不指向原来那个对象,而是指向了另一个String对象,内容是“HelloWorld!”, 原来那个对象还存在于内存之中,只是S这个引用变量不再指向它了。

  通过上面的说明,可以得到一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String 来代表字符串的话会引起很大的内存开销。因为String 对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。这时,应该考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新对象。并且,这两种类型的对象转换也是十分容易实现的。

  同时,如果要使用内容相同的字符串,不必每次都new一个String。例如

public class Demo{private String s;public Demo{s = "Hello World!"}
}

  而不是每次都调用new String() 方法,每次调用构造器,生成新对象,性能低下且内存消耗大,并且也没啥实际的意义,因为String 对象是不可变的,所以对于内容相同的字符串,只要一个String对象来表示就可以了。也就是说,多次调用上面的构造器创建多个对象,它们的String 类型属性s都指向同一个对象。
  通过上面的分析还可以得出一个结论,对于字符串常量,如果内容相同,Java认为它们代表同一个String对象。而用关键字new 调用构造器,总是会创建一个新的对象,无论内容是否相同。至于为什么要把String类设计成不可变的类,这是因为它的用途决定的。不只是String类型,在Java中还有很多的地方都是不可变的。这个不仅要考虑到性能还要考虑到实用性等问题。

45、String 类是否可以继承?

  String类是final类,不可以被继承。

46、String s = new String(“nihui”);创建了几个String Object?二者之间有什么区别?

  两个或者一个,“nihui” 对应一个对象,这个对象放在字符串常量缓冲区,常量"nihui" 不管出现多少遍,都是缓冲区中的那一个。new String() 每写一遍,就创建一个新对象,它依据那个常量"nihui" 对象的内容来创建出一个新String 对象。如果以前就使用过"nihui",这个代码就不会创建"nihui",直接从缓冲区获取。

Java校招笔试题-Java基础部分(四)相关推荐

  1. Java校招笔试题-Java基础部分(三)

    导语   Java 面试题集2021版 Java基础部分三 26.说说has a 与is a的区别 27.一个房间里有一把椅子,椅子有四条腿,房子和椅子是什么关系,椅子和椅子腿是什么关系? 28.什么 ...

  2. Java校招笔试题-Java基础部分(七)

    导语   Java 面试题集2021版 Java基础部分七 73.Set 和List的区别? 74.集合框架中Collection 和Arrays 类的作用 75.TreeSet 里面放对象,如果同时 ...

  3. Java校招笔试题-Java基础部分(六)

    导语   Java 面试题集2021版 Java基础部分六 62.ArrayList和LinkedList 有什么异同之处? 63.HashMap和HashTable的区别 64.List和Map的区 ...

  4. Java校招笔试题-Java基础部分(五)

    导语   Java 面试题集2021版 Java基础部分五 47.String 和String Buffer的区别 48.StringBuffer和StringBuilder的区别 49.数组有没有l ...

  5. Java校招笔试题-Java基础部分(二)

    导语   Java面试题集2021版 Java基础部分二 14.hashCode方法的作用? 15.写clone()方法时,通常都有一行代码,这行代码是什么? 16.静态变量和实例变量的区别? 17. ...

  6. Java校招笔试题-Java基础部分(一)

    导语   Java面试题集2021版 Java基础部分 1.一个.java 源文件中是否可以包括多个类(不是内部类)?有什么限制? 2.Java中有没有goto? 3.说说& 和 && ...

  7. java校招笔试题目_Java校招笔试题

    2020校招笔试题答案及评分标准 满分100分 时间1小时 一.简答题: (5分)写出你用过的linux命令,举例说明其中几个的具体用法. 答案:略.评分标准:正确五个,1分一个. (5分)写出TCP ...

  8. Java工程师笔试题整理[校招篇]

    Java工程师笔试题整理[校招篇] 阿里巴巴 2016 阿里巴巴2016研发工程师笔试题(四) 阿里巴巴2016研发工程师笔试题(三) 阿里巴巴2016研发工程师笔试题(二) 2015 阿里巴巴201 ...

  9. 蘑菇街2015校招 Java研发笔试题 详解,2015java

    蘑菇街2015校招 Java研发笔试题 详解,2015java 1. 对进程和线程描述正确的是( ) A.  父进程里的所有线程共享相同的地址空间,父进程的所有子进程共享相同的地址空间. B.  改变 ...

最新文章

  1. ---------很简单的 一道 堆栈问题-------
  2. Linux运维 第三阶段 (二) DHCP
  3. pycharm-连接mysql设置
  4. [大学回忆录]桂X大学大二(上)学期总结
  5. zabbix监控mysql内存_zabbix通过自定义脚本监控nginx,php-fpm和mysql占用内存数和进程的个数...
  6. PHP数字格式化,每三位逗号分隔数字,可以保留小数
  7. lambda表达式学习使用实例
  8. 基于SSM的个人博客系统
  9. 基于阿里云的一般性系统安全措施介绍
  10. 女性意识觉醒,内衣是为了舒适还是性感?
  11. NVIDIA 图像显卡参数列表
  12. 以太网没有有效的IP配置
  13. 流行和声(2)Major6和弦
  14. 边拆边聊——简单了解DLP投影结构与成像原理
  15. 微信接入服务器源码,经典论坛程序Discuz! Q 1.0 发布:完全开放源码,原生接入微信...
  16. cadence 16.60破解方式及文件下载地址
  17. 如何用python编写问卷调查_如何通过Python实现自动填写调查问卷
  18. 【Unity3D日常BUG记录】Unity打包运行出现:PlatformNotSupportedException该平台不支持此操作的解决记录
  19. 玩转Luat 基础篇⑦——GPIO输入输出的应用实例 以及Air724特殊引脚无法使用
  20. 《树莓派项目实战》第八节 使用光敏电阻传感器检测环境中是否有光照

热门文章

  1. aop 获取方法入参出参_ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称及入参和出参结果并记录方法耗时...
  2. java分页插件PageHelper的内置list数据操作失败
  3. 算法与数据结构1800题 之 栈和队列
  4. 生产环境下,oracle不同用户间的数据迁移。第三部分
  5. OSChina 周三乱弹——真相往往令人内牛满面
  6. [Angularjs]国际化
  7. swift学习笔记之一——初见swift
  8. Java语言程序设计基础篇 循环(四)练习
  9. IIS6.0不支持ASP的解决办法
  10. 选择题:JAVA的类和对象