-switch语句能作用在byte上,能否作用在long上,能否作用在String上?

-在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量,整数表达式可以是int基本类型或Integer包装类型,由于byte,short,char都可以隐式转换为int,所以这些类型以及这些类型的包装类型也是可以的。

显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,素以,它们不能作用于switch语句中。

-short s = 1; s = s + 1; 有什么错? short s = 1; s += 1; 有什么错?

-对于前者,由于s + 1运算时会自动提升表达式的类型,所以结果是int类型,再赋值给short类型s时,编译器将报告需要强制转换类型的错误。

对于后者,由于+=是Java语言规定的运算符,Java编译器会对它进行特殊处理,因此可以正确编译。

-char型变量中能不能存储一个中文汉字?为什么?

-char型变量是用来存储Unicode编码字符的,unicode编码字符集中包含了汉子,所以char型变量当然可以存储汉字啦。不过,如果某个特殊的汉字没有包含在unicode编码字符集中,那么char型变量就不能存储。补充说明:unicode编码占用两个字节,char类型变量也是两个字节。

-使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

-使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。

例如,对于:

final StringBuffer a = new StringBuffer("hahaha");

执行如下语句将报告编译器错误:

a = new StringBuffer("hehe");

但是,执行如下语句则可以通过编译:

a.append("broken");

有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:

public void method(final StringBuffer param)

{

}

实际上这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:

param.append("a");

-请说出作用域public,private,protected,以及不写时的区别。

-如果在修饰的元素上面没有写任何访问修饰符,则表示friendly。

作用域    当前类    同一Package    子孙类    其他Package

public    yes      yes        yes      yes

protected  yes      yes        yes      no

friendly    yes      yes        no      no

private    yes      no        no       no

-线程如何同步和通讯

-只有多个synchronized代码块使用的是同一个监视器对象,这些synchronized代码块之间才具有线程互斥的效果,假如a代码块用obj1作为监视器对象,b代码块用obj2作为监视器对象,那么两个并发的线程可以同时进入这两个代码块中。

对于同步方法的分析,所用的是同步监视器对象this。

对于静态同步方法的分析,所用的同步监视器对象是类的Class对象。

-ClassLoader如何加载class?

-jvm里有多个类加载,每个类加载可以负责加载特定位置的类。

例如,bootstrap类加载负责加载jre/lib/rt.jar中的类,我们平时用的jdk中的类都位于rt.jar中。

extclassloader负责加载jar/lib/ext/*.jar中的类,appclassloader负责classpath指定的目录或jar中的类。

除了bootstrap,其他的类加载本身也都是java类,他们的父类是ClassLoader。

-ArrayList如何实现插入的数据按自定义的方式有序存放?

-代码如下:

class MyBean implements Comparable{

int age;

@Override

public int compareTo(Object o) {

// TODO Auto-generated method stub

if(!(o instanceof MyBean))

throw new ClassCastException();

MyBean other = (MyBean) o;

return age > other.age ? 1 : age == other.age ? 0 : -1;

}

}

class MyTreeSet{

private ArrayList datas = new ArrayList();

public void add(Object o){

for(int i = 0; i < datas.size();i++){

if(((MyBean) o).compareTo(datas.get(i))!= 1){

datas.add(i,o);

}

}

}

}

-StringBuffer与StringBuilder的区别

-因为StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在防范里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer。

-构造器Constructor是否可被override?

-构造器Constructor不能被继承,因此不能写Override,但可以被重载Overload。

-接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?抽象类是否可以有静态的main方法?

-接口可以继承接口。抽象类可以实现接口,抽象类可以继承具体类。抽象类中可以有静态main方法。

备注:只要明白了接口和抽象类的本质和作用,这些问题都很好回答,你想想,如果你是java语言的设计者,你是否会提供这样的支持,如果不提供的话,有什么理由?如果您i没有道理不提供,那答案就是肯定的了。

只要记住抽象类与普通类唯一区别就是不能创建实例对象和允许有abstract方法。

-java中实现多态的机制是什么?

-靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例变量,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

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

-静态内部类不能访问外部类的普通成员,只能访问外部类中的静态成员。如果不是静态内部类,则没什么限制,可以访问。

-Anonymous Inner Class(匿名内部类)是否可以继承其他类,是否可以implements 接口?

-不仅是可以,而是必须!

-String s = new String(xyz)创建了几个String对象,二者之间有什么区别?

-两个或一个。"xyz"对应一个对象,这个对象放在字符串常量缓冲区,常量"xyz"不管出现多少遍,都是缓冲区中的那一个。new String每写一遍,就创建一个新的对象,他依据那个常量"xyz"对象的内容来创建出一个新的String对象。如果以前就用过"xyz",就不会创建“xyz”自己了,直接从缓冲区拿。

-数组有没有length()这个方法,String有没有length()这个方法?

-数组没有length这个方法,有length属性。String有length()这个方法。

Java宝典(一)的更多相关文章

  1. Java宝典

    本人最近参加了几家公司的面试,在其中发现了不少笔试题,虽然是平常再简单不过的,但一不小心还是会出错.今天特意找时间写下来和大家分享. 1.访问控制符权限问题.   同一个包中 同一个类中 不同包的子类 ...

  2. Java宝典(四)------Java中也存在内存泄露。

    --Java中会存在内存泄露吗? --如果你想当然的以为Java里有了垃圾回收机制就不会存在内存泄露,那你就错了. Java里也会存在内存泄露! 我们慢慢来分析. 所谓内存泄露就是指一个不再被程序使用 ...

  3. Java宝典(三)

    --说说ArrayList,Vector,LinkedList的存储性能和特性. --ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,他们都 ...

  4. java宝典笔记(一)

    第四章java基础知识 4.1基本概念 一.java优点 1.面向对象(封装.继承.多态) 2.可移植性.平台无关,一次编译,到处运行.Windows,Linux,macos等.java为解释性语言, ...

  5. Java宝典(二)

    --String s = "a" + "b" + "c" + "d"; 一共创建了多少个对象? --对于如下代码: St ...

  6. 给JAVA初学者的50个忠告

    摘自: http://wenku.baidu.com/link?url=p5vDKt5bKzUXxG_hAsB9XopHJRROeovOGGh4jnXGZXiUedR-fNOLO7zb6ddENo5U ...

  7. java笔记--关于线程通信

    关于线程通信 使用多线程编程的一个重要原因就是线程间通信的代价比较小 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3897773.h ...

  8. java基础回忆、复习(一)

    一:浅拷贝与深拷贝: 对于基本数据类型,直接进行拷贝,String类型,有两种拷贝方式: 1:直接将原对象中的name的引用值拷贝给新对象的name字段.<浅拷贝> 2:根据原对象中的na ...

  9. ajax异步提交的两种方法

    第一种是原始的ajax,第二种是在jQuery中使用ajax.这是我为测试两种提交方法而写的一段代码. 1.struts.xml <package name="json" e ...

随机推荐

  1. spring简单入门示例

    1 控制反转IOC\依赖注入DI,因为翻译的不同,因此有两个名字.       控制反转意思就是说,当我们调用一个方法或者类时,不再有我们主动去创建这个类的对象,控制权交给别人(spring). 依赖 ...

  2. yaml 1.6 操作

    /** * Copyright (c) 2008, http://www.snakeyaml.org * * Licensed under the Apache License, Version 2. ...

  3. git 技巧

    将某个文件回退到某个版本 git co d359624286d9c1f022b8b3b6f2d3fe3b6524188b build.sh 查看某个文件在某个版本时的内容 git show d3596 ...

  4. jQuery插件开发 格式与解析

    jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...

  5. hdu1978How many ways (记忆化搜索+DFS)

    Problem Description 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 1.机器人一开始在棋盘的起始点并有起始点所标 ...

  6. DDMS files not found: tools\hprof-conv.exe

    最近在Eclipse下每次更新ADT和SDK后都报一些错误,比如 DDMS files not found: D:\android-sdk-windows-1.6_r1\android-sdk-win ...

  7. Composer 基本指令操作使用

    Composer 基本指令操作使用 註: 若 composer.phar 改名為 composer, 請自行將 "php composer.phar" 替換成 "comp ...

  8. [Redux] Extracting Presentational Components -- AddTodo

    The code to be refactored: let nextTodoId = 0; class TodoApp extends Component { render() { const { ...

  9. DataBindings 与 INotifyPropertyChanged 实现自动刷新 WinForm 界面

    --首发于博客园, 转载请保留此链接  博客原文地址 业务逻辑与界面的分离对于维护与迁移是非常重要的,在界面上给某属性赋值,后台要检测到其已经发生变化 问题: 输入某物品 单价 Price, 数量Am ...

  10. IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素

    IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素. attachEvent(type,listener); listener函数中的 ...