疯狂JAVA面试题

所需积分/C币:2 2018-04-15 18:11:28 300KB PDF

疯狂JAVA讲义常用面试题讲解,JAVA求职者的必备工具,很实用,内容讲的很详细。
达式运算,因此使用起来十分方便 另外, 提供了多个与整数相关的操作方法,例如,将一个字符申转换成整数, 中还定义了表示整数的最大值和最小值的常量。 有没有 是中的保留字,程序的标识符不允许使用但也不支持使用 进行跳转。 和 的区别 提供了: 和 ,它们都是 的实现类, 都可以作为字符串使用 代表了字符序列不可变的字符串;而 都代表了字符序 列可变的字符串 的区别是 是线程安全的、性能略低,而 是线程不安全的,适合单线程环境使用,性能较好。 和 的区别。 是集合类( )的根接冂。 是针对集合类的一个工具类,它提供一系列静态方法实现对各种集合的搜 索、排序、线程安全化等操作 、说说和的区别。 和都可以用作逻辑与的运算符,当运算符两边的衣达式的结果都为时,整个 运算结果才为,否则,只要有一方为,则结果为 还具有短路的功能,即如果第一个表达式为,则不再计算第二个表达式,例如, 对于 ,当小于等」时,由」之前的表达式L经为了,因此 之后的表达式根本不会执行 再例如 表达式,当为时,后面的表达式不会执行, 因此不会出现 如果将改为,则可能抛出 异常 再例如 与 ,当小于等于时,前一个表达式中的值 会增长;后…个表达式中的值不会增加。 除此之外,还可以用作位运算符,当操作符两边的表达式不是 类型时, 表示按位与操作,通常使用米与一个整数进行运算,来获取该整数的最低个位 例如, 的结果为 和 的区别。 的方法是否 可以改变返回值的类型 是方法的重载 是方法的重写,也叫覆盖。 婁求两个方法只有方法名相同、形参列表不同的要求,返回值类型不能作为重 载的条件 要求了类方法与父类方法具有“两同两小·大”的要求。两同指:即父类方法、 子类方法的方法名相同、形参列表相同;两小指:子类方法返回值类型要么是父类方法返回 值类型的子类、要么与父类方法返回值类型相同;子类方法声明抛出的异常类型要么是父类 方法声明抛出的异常类型的子类、要么与父类声明抛出的异常类型相同:一大指:子类方法 的访问权限要么与父类方法的访问权限相同,要么比父类方法的访问权限更大 的方法是可以改变返回值的类型。 如何跳出当前的多重嵌套循环? 在中,要想跳出多重循环,可以在外面的循坏语句前定义一个标号,然后在里层 循环体的代码中使用带有标号的语句,即π跳出外层循环。例如, 语句能否作用在上,能否作用在上 能否作用在 在 以前,在 ()中,只能是一个整数表达式(但不包括 和)或者枚举常量,整数表达式可以是基本类型或 包装类型, 都可以自动转换为,它们都可作为表达式。 从 开始, 表达式的可以使用 创建了几个 两个。一个是直接量的字符串对象,该字符串将会被缓存在字符串常量池中,以 便以后复用这个字符串;另一个是通过 构造器创建出来的对象,这个 对象保存在堆内存中。 通常来说,应该尽量使用直接量的对象,这样具有更好的性能。 数组有没有 这个方法 有没有 这 个方法? 数组没有 这个方法,有 属性。 有 方法。 有什么错 有什么错 对于 由于运算时会自动提升衣达式的类型,所以结果是 型,再赋值给类型时,编译器将报告需要强制转换类型的错误。 对于 由于运算符里已经包括了一个隐式的强制类型转换,因此 会把 计算后的结果进行隐式的强制类型转换,因此它不会有任何错误。 型变量中能不能存储一个中文字符为什么 型变量是用来存储 编码的字符的, 编码字符集中包含了汉字,因 此型变量中可以存储汉字。不过,如果某个特殊的汉字没有被包含在 编码字 符集中,那么,这个型变量中就不能存储这个特殊汉字。 类型的变量占两个字节,而 编码中每个字符也占两个字节,因此类 型类型的变量可以存储任何一个 字符 用最有效率的方法算出乘以等于几 因为将一个数左移位,就相当于乘以了的次方,那么,一个数乘以只要将其左 移位即可,而位运算直接支持的,效率最高,所以,乘以等于几的最效率的方 法是 但需要注意的是,如果这个数字本身已经很大,比如本身已经是的次方了,此时 再用这种位移运算就可能导致“溢出”,这样就得不到正确结果了。 、使用 关键字修饰一个变量时,是引用不能变,还 是引用的对象不能变? 使用关键字修饰个变量吋,是指引用变量不能变,引用变量所指向的对象中的 内容还是可以改变的。例如,对于如下语句: 执行如卜语句将报告编译错误: 但如下语句则是完全正确的 有人希望在定义方法的形参时,通过修饰符来阻止方法内部修改传进来的实参 实际上这没有用,在该方法内韶仍然可以增加如下代码来修改实参对象: 和 方法究竟有什么区别? 操作符的作用有两种 如果的两边都是基本类型变量、包装类对象所组成的表达式,用于比较两边的 表达式的值是否相等—一只要两边的表达式的值相等,即使数据类不冋,该运算符也会返冋 。例如 将会返回 .如果的两边是引用类型的变量,用于判断这两个引用类型的变量是否引用同 块内存,只有当它们引用同一块内存时,才会返回 而 则是一个 类的一个方法,因此任何对象都可调用该方法 与其他对象进行比较。 类的方法的实现代码如下 从上面代码可以看出,如果一个类没有重写 的 方法时,此时 方法的比较结果与的比较结果是相同的。 但允许任何类重写 方法,重写该方法就是让程序员来自己决定两个对象相 等的标准一一极端的情况下,我们完全可以设计出对象与对象 比较返回 的情况一一当然一般不会这么设计 实际上重写 方法时通常会按如下格式 上面重写 方法用于判断两个 对象是否“相等”,程序只要两个 对 象的 相等,程序就可以把这两个对象当成相等一一这是系统业务决定的 如果业务需要,我们也可以增加更多的参与判断的,当然也可以只根据进行判断 一只要两个的相等,就认为两个相等,这都是由系统的业务决定。 总结起来就是一句话:开发者重写 方法就可以根据业务要求来决定两个对象是 否“相等” 静态变量和实例变量的区别? 在语法定义上的区别:静态变量前要加关键字,而实例变量前则不加 在程序运行时的区别:实例变量属于一个对象,必须先创建实例对象,它的实例变量才 会被分配空间,才能使用这个实例变量。静态变量则属于类,所以也称为类变量,只要程序 加载了类的字节码,不用创建仼何实例对象,静态变量就会被分配空冋,静态变量就可以被 使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接 使用类名来引用。 例如,对于下血的程序: 上面程序中的 变量随 类初始化而分配内存、执行初始化的,以后无论 创建多少个实例对象,不会再分配 变量,因此用永远只有一个 变量。 但 变量则是随着 对象初始化而分配内存、执行初始化的,因此每创 建一个实例对象,就会分配一个 ,即可以分配多个 。因此上面程序中 每创建一个 对象, 的值就会自加一,但创建每个 对象的 都只自加 是否可以从一个方法内部调用非方法? 不可以。静态成员不能调用非静态成员。 非方法属于对象,必须创建一个对象后,才可以在通过该对象来调用方法。 而 方法调用时不需要创建对象,通过类就可以调用该方法。也就是说,当一个 方法被调用时,可能还没有创建任何实例对象,如果允许从一个 方法中调用非 方法的调用,那个非方法是没有调用对象的。因此不允许方法内部调用非 方法 等於多少 等於多 少 类中提供了三个与取整有关的方法: 、,这些方法的作用与 它们的英文名称的含义相对应,例如,的英文意义是天花板,该方法就表示向上取整, 所以, 的结果为 的结果是 的英文意义是地板,该 方法就表示向下取整,所以, 的结果为 的结果是:最 难掌握的是方法,它表示“四舍五入”,算法为 ,即将原来的数字加 后再向下取整,所以, 的结果为, 的结果为 请说出作用域 ,以及不写时 的区别 这匹个作用域的可见范围如下表所示。 作用域当前类同一 子类全局 × × 说明:如果在修饰的元素上面没有写任何访问修饰符,则表小 只要记住访问权限由小到大依次是 ,然后再记 住存在的个访问范围,就很容易画出上面的表格了。 外部类能用 修饰吗?内部类可以用 修饰吗? 外部类不能用 修饰不能。内部类能用 修饰 外部类的上一级程序单位是包,因此它只有两个使用范围:包内和包外,因此它只能用 (表小可以在仝局位置使用)和默认修饰符(,袤小以能被冋一个包的其他类 使用)修饰 内部类的上级程序单位是类,因此它有个使用范围:当前类,同个包内、当前类 的子类中、仝局范围,因此可以使用 默认修饰符、 的任意一个修 饰符修饰 一个类定义多个重载方法,参数分别是 和 ,然后将 传递进去,会选择哪个方法? 选择参数类型为 的方法。 说说与的区别。 是典型的“一般到特殊”的关系,也就是典型的继承关系。例如 那么 是一种特殊的,也就是说 继承了 是典垩的“组合”关系。比如 也就是组合成了 需要指出的是:由于继承会造成了对父类的破坏,因此有时候可以通过组合来代替的继 承。使用继承的好处:程序语义更好理解。坏处是:子类可能重写父类方法,不利于父类封 装;使用组合则造成语义的混淆,但组合类不会重写被组合类的方法,因此更利于被复合类 的封装。 如何加载 甲有多个类加载,每个关加载可以负责加载特定位置的类,例如, 类加 载(根类加载器)负责加载它负责加载的核心类( 中的类), 常用的 等类都位于 类加载器负责加载 中的类,应用类加载器( 负责 指定的目录或 包中的类。除了 之外,其他的类加载器本身也都是类,它们的父类是 类加载器(根类加载器)非常特殊,它并不是 的子类, 而是由身实现的 是什么为什么要有 是垃圾收集的意思( ),内存处理是编程人员容易出现问题的地方, 忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,提供的功能可以自 动监测对象是否超过作用域从而达到自动回收内存的日的。 的 类和 类都提供了“通知”程序进行垃圾回收的方法,例如如下 代码: 或 但这两个方法只是“通知”进行垃圾回收,但实际上何时进行垃圾回收,还 是由自凵决定。 垃圾回收的优点和原理。并考虑种回收机制。 传统的 等绵程语言,需要程序员负责回收已经分配的内存。显式进行垃圾回收是 一件比较困难的事情,因为程序员并不总是知道内存应该何时被释放。如果一些分配出去的 内存得不到及时回收,就会引起系统运行速度卜降,甚至导致程序瘫痪,这种现象被称为内 存泄漏。总体而言,显式进行垃圾回收主要有如下两个缺点: 程序心记及时回收无用内存,从而导致内存泄漏,降低系统性能 程序错误地回收程序核心类厍的内存,从而导致系统崩溃。 与 程序不同,语言不需要程序员直接控制内存回收,程序的内存分配和 回收都是由在后台自动进行的。会负责回收那些不再使用的内存,这种札制被称 为垃圾回收( ,也被称为)。通常会提供一条后台线程来进行检 测和控制,一般都是在空闲或内存不足时自动进行垃圾回收,而程序员无法精确控制 垃圾回收的时间和顺序等 实际上,垃圾回收机制不可能实时检测到每个对象的状态,当一个对象失去引用 后,它也不会被立即回收,只有等接下来垃圾回收器运行吋才会被回收。 对于一个垃圾回收器的设计算法来说,大致有如下可供选择的设计: 串行回收()和并行回收():串行回收就是不管系统有多少个, 始终只用一个来执行垃圾回收操作;而并行回收就是把整个回收工作拆分成多部分, 每个部分由一个负责,从而让多个并行回收,并行回收的执行效率很高,但复杂 度增加,另外也有其他些副作用,比如内存悴片会增加。 并发执行( )和应用程序停止( 的垃圾 回收方式在执行垃圾回收的同时会导致应用程序的暂停。并发执行的垃圾回收虽然不会导致 应用程序的暂停,但由」并发执行垃圾回收需要解决和应用程序的执行冲突(应用程序可能 会在垃圾回收的过称中修改对象),因此并发执行垃圾回收的系统开销比 好,而且执行时也需要更多的堆内存。 压缩( )和不压缩( )和复制( ):为了减少内 存碎片,支持压缩的垃圾冋收器会把所有的活对象搬迁到一起,然后将之前占用的内存全部 回收。不压缩式的垃圾回收器只是回收内存,这样回收回来的内存不可能是连续的,因此将 会有较多的内存碎片。较之压缩式的垃圾回收,不压缩式的垃圾回收回收内存快了,而分配 内存时就会更慢,而且无法解决内存碎片的问题。复制式的垃圾回收会将所有可达对象复制

...展开详情

评论 下载该资源后可以进行评论 1

muzhiben_ying 大佬好,我用积分下载了你的"SSH网上商城2018"那个项目,结果里面没有数据库文件,你能发给我一下吗?我的邮箱是1430220037@qq.com,麻烦大佬了
2019-03-29
回复
上传资源赚积分,得勋章
相关内容推荐