SCJP学习笔记

来源:互联网 发布:ff14猫女捏脸数据分享 编辑:程序博客网 时间:2024/05/02 02:03

 一.基础知识:
   a.类成员变量会初始化,局部变量必须手工初始化.
   b.main方法,必须是static,而且返回值必须为void,其参数必须为字符串数组.同时该方法可以重载.
   c.注意基本数据类型取值范围.
   d.变量名的取名.如开始必须为_,$和字母.
   f.GC机制.
 
 二.运算符:
   a.逻辑判断中.短路逻辑&&,||,并且其左右必须有为boolean类型.而&,|左右的值可为int,boolean,char.
   b.>>,<<和>>>区别
   c.3/0会抛出异常,而3.0/0则显示NaN,而8.0%2采取是8.0循环相减2.0求余方法.
     同时,NaN是不能相比较的,只能用isNaN方法来比较.
   d.var1+var2++ +" "+var2=?是采用先将(var1+var2)++
   e.==基本类型比较大小,引用类型比较地址(还有时钟问题).equal()方法比较其值.
     注意是StringBuffer并没有重写equal方法,故永远返回为false.这是因为返回表示比较对象的地址.
   f.+=运算符连接字符串中.左边必须为字符串
   g.~可采用取负减1法.即~i=(-i)-1;

 三.Java修饰符:
   a.final,abstract
   b.native,其正确定义方式为public native void test();
   c.方法内局部变量不能为static
   d.非静态方法的调用是运行期决定的.而静态方法的调用是在编辑期决定的.
   e.外部类访问内部类的实例需要外部类:如
       OuterClass.InnerClass inner=new OuterClass().new InnerClass();
   f.synchronized只能修饰方法和代码块.native修饰方法不能有方法体.transient只能修饰变量,表示不可序列化.
   g.static i=100类成员变量,可用this.i访问.

 四.类型转换和造型:
   a.        char-->int-->long-->float-->double
     byte-->short-->
   b.byte x=5;
     byte y=x<<2;
     会编辑出错,因其将x转换为int后<<2后要将其放入byte.故需要强制转换.
   c.float f=1/3.因其1/3结果为1,故以上表达式正确
 
 五.控制程序流程:
   a.break,continue对label
   b.boolean m=true;
     if(m=false)
       System.out.println("结果1");
     else
       System.out.println("结果2");
     由于m是=赋值为false,故执行打印结果2
   c.异常处理
     try{
       throw new Exception()
     }catch(Exception e){
       System.out.println("结果1");
     }finally{
       System.out.println("结果2");
     }
     System.out.println("结果3");

     由于catch与finally没有return.故打印所有结果
  d.标签必须在循环前
  e.线程捕获异常是interruptedEXception
  f.如方法体内有throw异常,但方法体无异常声明,再其调用时加上try/catch仍会编译出错.
 
 六.对象和类:(Overriding 重写 Overloading 重载)
  a.重写方法定义时抛出的异常只能是被重写方法抛出异常的子类或者一样.或者不抛出任何异常.
  b.一个静态方法只能被重载为一个静态方法,而不能被重载为一个非静态方法.同样,非静态方法不可重写静态方法.
  c.内部类不能与外部类同名.同时要注意父类是否有默认构造函数来允许继承.同时定义在方法中的内部类前面不能有修饰符.
  d.构造函数不能有返回值.否则为普通方法.
  e.内部类定义在块中的只能访问它块中的final类型变量.同时内部类定义在类中,则可访问其所在类的所有属性,包括私有属性.
    但定义在一个方法中的内部类.其访问范围仅限制在方法体中.同时,创建其实例还需要外部类.如:
    class A{
      public int x;
      private int y;
      class B{
        protected void method1(){
        }
        class C{
          private void method2(){
          }
        }//end class C
      }//end class B
    }//end Class A
    其method2方法可访问类A中x,y,类B中method1方法.
  f.完全封装类指所有的成员变量定义为private,而将访问这些变量的方法定义为非private类型,这样可在类的外部间接访问这些变量.
  g.重载时方法之间参数列表必须不同,而决定参数列表不同因素是参数的类型个数,顺序.
  h.编译java代码时,如有内部类,则先封装类的名字.然后跟随一个$,再跟随内部类的名字.如是匿名内部类,则编译器会简单生成数字.把
    它们作为内部类标识符使用,然后加上$符和外部类标识符的后面.
  i.静态成员变量初始化优先于其他类成员变量.
  j.class Parent{
 void method1(){
  System.out.println("Parent's method1()");
 }
 
 public void method2(){
  System.out.println("Parent's method2()");
  method1();
 }
    }

    public class Hello extends Parent{
 public void method1(){
  System.out.println("Child's method1()");
 }
 
 public static void main(String [] args){
  Parent p=new Hello();
  p.method2();
 }
    }
    其结果为Parent's method2(),Child's method1();
    但将父类Parent中method1方法改为private void method1().则Parent's method2(),Parent's method1();
  k.接口中定义的变量是final,故不可再以后改变.
 
 七.Java线程:
  a.创建线程两种方式,一种是继承Thread类,另一种是实现Runnable接口.都必须在run()方法中定义具体的线程执行功能.
    而start()方法只是使线程从等待状态变为可运行状态.
  b.线程状态转换,线程从执行状态转为等待状态或撤消状态时可有中断异常导致线程撤销,sleep导致线程转入休眠状态.具有高优先权会使
    当前线程让出CPU使用权,转为等待状态.或调用输入流的read()方法会因为无效数据读取,而导致线程处于堵塞等待状态.
  c.notify()方法和wait()方法存在是为了实现共享锁机制.
  d.线程异常.当线程从执行状态转为等待状态时.wait()方法会抛出InterruptedException异常,当wait中参数timeout参数取值为负数
    或参数nanos取值超出0-999999范围时,会抛出IllegalArgumentException异常;如果当前线程不是对象监视器的所有者,则会抛出
    IllegalMonitorStateException异常.
  e.线程resume()方法,该方法的作用是恢复被挂起的(suspended)线程,该方法首先调用该线程的无参的checkAccess方法,这可能会导致
    在当前线程上抛出SecurityException异常.如果该线程是活的(alive)但是被挂起(suspend),它被恢复并继续它的执行进程.
    sleep()方法使当前线程停止执行,进入休眠状态,stop()方法用于强制当前线程停止执行,但此方法已作废.yield()方法用于临时停止
    当前执行的线程.转而执行其他线程.wait()方法用于使当前线程转入等待状态.notify和notifyAll方法用于唤醒等待的线程.

 八.用户界面组件:
  a.当调用组件repaint方法时,其默认的行为是调用update方法来重新绘制组件.update方法执行的过程为先消除背景.然后调用paint方法
    重新绘制组件.为了避免图像闪烁,可重载update方法,跳过清除操作.
  b.BorderLayout布局管理器把整个界面区域划分为上,下,左,右,中5个区域来容纳指定区域的组件.FlowLayout布局管理器依据添加组件
    的次序,按照从左到右,从上到下的原则来排列组件.GridLayout布局管理器通过指定的行,列数把整个界面区域划分为不同的网格区域,
    依据从左到右,从上到下的顺序在网络中排列组件;CardLayout布局管理器把组件安排在不同的"卡片容器"中,这些卡片容器相互重叠,
    一次只能显示一个,但标题可同时显示出来,以便激活相应的容器;GridBagLayout布局管理器通过与每个组件相联系的GridBagConstraints
    对象来布置组件.
  c.Applet调用getParameter方法可获取指定的参数值,但其返回值总是以字符串作为返回值,因此为了获取正确的参数值,需进行类型转换.
  d.在Java中所有的事件监听器接口中定义的方法,其返回值为void.
  e.在Applet中,如只有一个组件实例,你在init中添加多次add,但只有最后一条添加语句有效.如:
    import java.applet.*;
    import java.awt.*;
 
    public class Test extends Applet{
   Button okButton=new Button("OK");
        public void init(){
          add(okButton);
   add(okButton);
          add(okButton);
          add(okButton);

          add(new Button("Cancel"));
          add(new Button("Cancel"));
          add(new Button("Cancel"));
          add(new Button("Cancel"));

          setSize(300,300);
        }
    }
    屏幕上只会显示出5个Button,4个Cancel,1个OK.

 九.输入和输出:
  a.RandomAccessFile如使用rw(读写)模式,则文件不存在,不会抛出FileNotFoundException异常,而会创建一个新文件.其只有两种访问模式.
    r(只读)模式,rw(读写)模式.
  b.向文件写基本数据类型:
    import java.io.*;
    class Write{
 public static void main(String [] args){
  File file=new File("temp.test");
  FileOutputStream stream=new FileOutputStream(file);
  DataOutputStream filter=new DataOutputStream(stream);
  for(int i=0;i<10;i++)
   filter.writeInt(i);
   }
    }
  c.ServlerSocket,Socket实现基于TCP/IP客户端/服务器端的连接.DatagramPacket,DatagramSocket实现UDP

 十.语言包和实用包:
  a.Collection接口定义了15个方法:add(Object o);addAll(Collection c),clear(),contains(Object o),containsAll(Collection c)
    equals(Object o),hashCode(),isEmpty(),itearator(),remove(Object o),removeAll(Collection c),retainAll(Collection c)
    size(),toArray()和toArray(Object [] a);
  b.Map是一个支持按关键字检索的集合,但关键字必须唯一.Set是一个无顺序,拒绝重复项的集合类,List是一个有顺序且允许重复项的集合类,
    Collection是所有集合类的接口的根接口.Enumeration实现一个按顺序访问元素的集合类.LinkedList集合类.该集合类实现了List接口,
    允许元素从集合中任意位置被添加,删除,还可排序元素.故队列和堆栈可实现此类.
  c.Vector类用来存储对象,不能存储基本类型数据.
  d.在向Set集合添加重复合新项时,则返回值为false,但不会抛出异常来.
  e.封装类是不可变的,即一被创建,其内容不可再改变.
  f.float f4=Integer.MIN_VALUE;//MIN_VALUE=-2147483648
    float f5=Integer.MAX_VALUE;//MAX_VALUE= 2147483647
    float f6=-2147483655f;
    System.out.println(Math.round(f6));
    由于f6小于MIN_VALUE,故返回MIN_VALUE;
  g.Boolean b1=new Boolean("TRUE");
    Boolean b2=new Boolean("true");
    Boolean b3=new Boolean("JUNK");
    System.out.println(""+b1+b2+b3);
    其结果为truetruefalse.如果打印时没有"",则会编译出错.
  h.floating/double值大小为:-infinity-->Negative Numbers/Fractions-->-0.0-->+0.0-->Positive Numbers/Fractions-->infinity


自测题:
 1.以下哪些是正确的标识符?
  a._class;
  b.$value$;
  c.zer@;
  d.¥ngstr;
  e.2muchuq;

 2.以下代码会输出什么?
  public class test{
    public static void main(String [] args){
 String space="";
        String composite=space+"hello"+space+space;
 composite.concat("world");
 String trimmed=composite.trim();
 System.out.println(trimmed.length());
    }
  }
  a.5;b.6;c.7;d.12;e.13

原创粉丝点击