Think in Java(4th Edition)学习笔记 2009.03.23

adsfInteger (Java 2 Platform SE 5.0) Integer (Java 2 Platform SE 5.0) Integer (Java 2 Platform SE 5.0) P41 Random的使用

Java实用工具类库中的类java.util.Random提供了产生各种类型随机数的方法。它可以产生int、long、float、double以及Goussian等类型的随机数。这也是它与java.lang.Math中的方法Random()最大的不同之处,后者只产生double型的随机数。

 类Random中的方法十分简单,它只有两个构造方法和六个普通方法。
构造方法:
(1)public Random()

  (2)public  Random(long  seed)

 

Java产生随机数需要有一个基值seed,在第一种方法中基值缺省,则将系统时间作为seed。

貌似不能自动生成一连串的不同的随机数,看来还要手工写代码来保证随机数的不同。

 

P48

Integer类的几个方法还是挺好用的:

 

toBinaryString

public static String toBinaryString(int i)
以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。

如果参数为负,该无符号整数值为参数加上 232;否则等于该参数。将该值转换为二进制(基数 2)形式的无前导 0 的 ASCII 数字字符串。如果无符号数的大小为零,则用一个零字符 '0' (’"u0030’) 表示它;否则,无符号数大小的表示形式中的第一个字符将不是零字符。字符 '0' ('"u0030') 和 '1' ('"u0031') 被用作二进制数字。


参数:
i - 要转换为字符串的整数。
返回:
用二进制(基数 2)参数表示的无符号整数值的字符串表示形式。
从以下版本开始:
JDK1.0.2

 

 

toHexString

public static String toHexString(int i)
以十六进制的无符号整数形式返回一个整数参数的字符串表示形式。

如果参数为负,那么无符号整数值为参数加上 232;否则等于该参数。将该值转换为十六进制(基数 16)的无前导 0 的 ASCII 数字字符串。如果无符号数的大小值为零,则用一个零字符 '0' (’"u0030’) 表示它;否则,无符号数大小的表示形式中的第一个字符将不是零字符。用以下字符作为十六进制数字:

 0123456789abcdef 
这些字符的范围是从 '"u0030''"u0039' 和从 '"u0061''"u0066'。如果希望得到大写字母,可以在结果上调用 String.toUpperCase() 方法:
 Integer.toHexString(n).toUpperCase() 

参数:
i - 要转换成字符串的整数。
返回:
用十六进制(基数 16)参数表示的无符号整数值的字符串表示形式。
从以下版本开始:

JDK1.0.2

 


decode

public static Integer decode(String nm) throws NumberFormatException
String 解码为 Integer。接受通过以下语法给出的十进制、十六进制和八进制数字:
DecodableString:
Signopt DecimalNumeral
Signopt 0x HexDigits
Signopt 0X HexDigits
Signopt # HexDigits
Signopt 0 OctalDigits
Sign:
-
Java Language Specification》的第 §3.10.1 节中有 DecimalNumeralHexDigitsOctalDigits 的定义。

跟在(可选)负号和/或基数说明符(“0x”、“0X”、“#”或前导零)后面的字符序列是使用指示的基数(10、16 或 8)通过 Integer.parseInt 方法分析的。字符序列必须表示一个正值,否则会抛出 NumberFormatException。如果指定的 String 的第一个字符是减号,则对结果求反。String 中不允许出现空白字符。


参数:
nm - 要解码的 String
返回:
保持 nm 所表示的 int 值的 Integer 对象。
抛出:
NumberFormatException - 如果 String 不包含可分析整数。
从以下版本开始:
1.2
另请参见:

parseInt(java.lang.String, int)

 

 

 Character类里面也有一些关于字符的处理函数,也挺好用得。

P68

Java中的foreach语法,和C#中的还是有些区别的,用惯了C#的,看Java猛然有点不习惯。

1  public   class  ForEachString {
2       public   static   void  main(String[] args)
3      {
4           for ( char  c :  " This is a test of foreach " .toCharArray())
5              System.out .print(c  +   "   " );
6      }
7  }
8 

 

 P79

 参数的顺序不同可以区分两个不同的方法,但是不推荐,代码难以维护。

public   class  OverloadingOrder {
    
static   void  f(String s,  int  i)
    {
        System.out.println(
" String:  "   +  s  +   " , int:  "   +  i);
    }
    
static   void  f( int  i ,String s)
    {
        System.out.println(
" int:  "   +  i  +   " , String:  "   +  s);
    }
    
    
public   static   void  main(String[] args)
    {
        f(
" String first " , 11 );
        f(
99 " Int first " );
    }

}

 

P85

Java中可以在构造函数中调用构造函数,但是不能再非构造函数中调用构造函数

public   class  Flower {
    
int  petalCount  =   0 ;
    String s 
=   " initial value " ;
    Flower(
int  petals)
    {
        petalCount 
=  petals;
        System.out.println(
" Constructor w/ int arg only, petalCount=  "   +  petalCount);
    }
    
    Flower(String ss)
    {
        System.out.println(
" Constructor w/ String arg only, s=  "   +  ss);
        s 
= ss;
    }
    
    Flower(String s,
int  petals)
    {
        
this (petals);          // 在构造函数中调用构造函数
         this .s  =  s;
        System.out.println(
" String & int args " );
    }
    
    Flower()
    {
        
this ( " hi " , 47 );          // 在构造函数中调用构造函数
        System.out.println( " Default constructor (no args) " );
    }
    
    
void  printPetalCount()
    {
        
// this(11);            // 不能在非构造函数中调用构造函数
        System.out.println( " petalCount =  "   + petalCount  +   "  s =  "   +  s);
    }
    
/**
     * 
@param  args
     
*/
    
public   static   void  main(String[] args) {
        
//  TODO Auto-generated method stub
        Flower x  =   new  Flower();
        x.printPetalCount();
    }
}

 

 P87

关于finalize()方法,下面这篇文章写得浅显易懂,还不错!

 

http://blog.csdn.net/dongliheng/archive/2007/07/12/1686258.aspx

 

P94

初始化顺序:在类的内部,变量定义的先后顺序决定了变量之间的初始化顺序,即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。

package  Chapter5;

class  Window
{
    Window(
int  marker)
    {
        System.out.println(
" Window( "   +  marker  +   " ) " );
    }
}

class  House
{
    Window w1 
=   new  Window( 1 );
    House()
    {
        System.out.println(
" House() " );
        w3 
=   new  Window( 33 );
    }
    Window w2 
=   new  Window( 2 );
    
void  f()
    {
        System.out.println(
" f() " );
    }
    Window w3 
=   new  Window( 3 );
}



public   class  OrderOfInitialization {

    
/**
     * 
@param  args
     
*/
    
public   static   void  main(String[] args) {
        
//  TODO Auto-generated method stub
        House h  =   new  House();
        h.f();

    }

}

 

 

 

 

 

 

 

 

 


你可能感兴趣的:(java)