java语言基础大闯关

一、查错

前言

此类型题目,一般都会给出错误的代码,以及相应的正确代码,如有必要,还会给出简短的提示。

需要思考的点主要有两个:

  1. 为什么错误代码是错的?
  2. 相比错误代码,正确代码为什么是对的

题目

  1. wrong:

    char c1 = 'd';
    c1 = c1 + 1;

    correct:

    char c1 = 'd';
    c1 += 1;
    c1++;

    hint:运算符自动类型转化

  2. wrong:

    int i = 120;
    c = i;

    correct:

    char c = 120;

    hint:编译优化

  3. wrong:

    int method(int num) {
       if(num > 0) return 1;
       else if (num == 0) return 0;
       else if(num < 0) return -1;
    }
  4. wrong:

    public class ErrorDefGenerics {
       public static void main(String[] args) {
           Dog d = new Dog();
           Cat c = new Cat();
           speak(d);
           speak(c);
       }
       static<T> void speak(T speaker) {
           speaker.talk();
       }
    }
    class Dog {
       void talk(){}
    }
    class Cat {
       void talk(){}
    }

    correct:

    public class ErrorDefGenerics {
       public static void main(String[] args) {
           Dog d = new Dog();
           Cat c = new Cat();
           speak(d);
           speak(c);
       }
       static<T extends Speaks> void speak(T speaker) {
           speaker.talk();
       }
    }
    
    interface Speaks {
       void talk();
    }
    
    class Dog implements Speaks{
       public void talk(){}
    }
    
    class Cat implements Speaks{
       public void talk(){}
    }

    hint:java泛型实现方式-擦拭

二、代码运行结果

  1. 21 % -5.2 = ?
    -21 % -5.2 = ?
  2. public class Test {
    static void method(int num) {
        System.out.println(System.identityHashCode(num));
        num = 20;
        System.out.println(System.identityHashCode(20));
        System.out.println(System.identityHashCode(num));
    }
    public static void main(String[] args) {
        int num = 10;
        System.out.println(System.identityHashCode(num));
        method(num);
    }
    }

三、知识点

  1. java语言中,只有值传递一种传递方式

  2. java存储机制

  3. java中中的每个类,如果没有显示指定,就隐含继承于java.lang.Object

  4. volatile

  5. java泛型 - 通配符

  6. java泛型的局限性:

    1. 基本数据类型不能用做类型实参
    2. 类型参数不能用于创建对象
    3. 类型参数和泛型类型不能用于instanceof运算
    4. 不能创建泛型数组(程序编译时,所有类型参数的具体类型信息都会被擦除,因此,类型参数不能用于任何运行时需要知道确切类型信息的操作中)。
  7. java1.0以及java1.1中提供了Vector、Stack等集合,java1.2保留了这些集合,并对他们进行了改进。但由于先天设计的原因,他们在使用安全、运行效率等方面都存在或多或少的问题,例如,使用类vector和hashtable创建的集合,用于单线程编程时,运行效率就存在问题;类stack继承于vector,除存在运行效率问题,它还让堆栈可以进行Vector定义的不属于堆栈的操作。因此,java集合架构为这些遗留的集合类型都提供了替代类型,例如:

    • ArrayLisyt 替代 Vector
    • 接口Deque及其实现类替代Stack
    • HashMap替代HashTable
    • EnumSet在大部分情况下可以替代BitSet

    除部分情况还需使用BitSet之外,其他遗留集合都已经过时,不应当使用。

  8. 多线程:

    1. 线程优先级
    2. 守护线程、用户线程
    3. 线程池(指定数量的线程池,不指定数量的线程池)
    4. 所有异常不能在线程间传播
    5. 除long和double型外,基本数据类型变量的赋值和读取操作都是原子性的,这些类型通常称作原子类型。
    6. java线程同步机制(临界区的概念):
      • 使用关键字synchronized(隐式使用)或java SE5引入的类java.util.concurrent.locks.ReentrantLock(显式使用)
      • 线程的状态:新生状态、可运行状态、阻塞状态、等待状态、计时等待状态、终止状态
      • 多线程编程时,最好使用包java.util.concurrent中定义的集合类,不仅性能通常优于concurrent包装来的集合,而且在迭代时是线程安全的(包装的在迭代时不是线程安全的)
阅读更多
文章标签: java
个人分类: java
上一篇项目流程
想对作者说点什么? 我来说一句

java横版过关类游戏源代码

2012年05月10日 569KB 下载

没有更多推荐了,返回首页

关闭
关闭