-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. hdu 5410 CRB and His Birthday(混合背包)

    Problem Description Today is CRB's birthday. His mom decided to buy many presents for her lovely son ...

  2. 如何在 Android 手机上实现抓包?

    如何在 Android 手机上实现抓包? http://www.zhihu.com/question/20467503 我想知道某个应用究竟在数据提交到哪里,提交了什么.网上的教程太复杂,不想麻烦.有 ...

  3. IIS 问题解决

    一.网站发布后 报500错误 解决办法:重新向iis注册framwork: 二.试图加载格式不正确的程序.(Exception from HRESULT: 0x8007000B) 解决办法:对应应用程 ...

  4. pyqt例子搜索文本

    #!/usr/bin/env python #-*- coding:utf-8 -*- import sip sip.setapi('QString', 2) sip.setapi('QVariant ...

  5. 基于akka实现简单的主从框架

    ========================Master============================== package com.scala.akka.rpc.demo2 import ...

  6. _js day10

  7. mysql常用操作(转自阿铭linux)

    在前面两个章节中已经介绍过MySQL的安装了,但是光会安装还不够,您还需要会一些基本的相关操作.当然了,关于MySQL的内容也是非常多的,只不过对于linux系统管理员来讲,一些基本的操作已经可以应付 ...

  8. 报错要跟到底就很更快更准确的发现问题所在一直in进去(其实都知道的哈)

    问题-查看详细信息-innerexception-innerexception

  9. 点击<a>标签,禁止页面自动跳到顶部的解决办法

       最近在开发一个小web的时候想给一个按钮增加一个弹出dialog功能,但是发现点击按钮后页面总是自动滚动至顶部,这点从用户体验上来讲是极其不爽的,于是开始跳进google大池寻求解决办法.网上的 ...

  10. rsync数据同步配置

    环境配置 操作系统:centos6.4_64bit A服务器IP:192.168.6.128 B服务器IP:192.168.6.129 以A服务器为基准,将A服务器文件同步到B服务器. 步骤如下: 开 ...