CoffeeNight
Java Vagrant
posts - 8,comments - 1,trackbacks - 0

      以下内容转载自 Sun关于CLASSPATH设置的中文说明文档:

使用 CLASSPATH 环境变量

一般用户将想要使用 -classpath 命令行选项。下面将介绍如何设置 CLASSPATH 环境变量或清除以前安装遗留下的设置。

设置 CLASSPATH

在 DOS 提示符下,可用 set 命令修改 CLASSPATH 环境变量。其格式为:
   set CLASSPATH=path1;path2 ...
路径应该以指定驱动器的字母开头,例如 C:\...。这样,在偶然切换到不同驱动器时仍可找到类(例如,如果路径项以 \... 开头,并且当前位于驱动器 D: 上,则所需的类将在 D: 而不是 C: 驱动器上找)。

清除 CLASSPATH

如果 CLASSPATH 环境变量被设置成不正确的值,或启动文件或脚本程序设置了不正确路径,则可通过使用下列命令清除 CLASSPATH:
  C:> set CLASSPATH=
该命令仅清除当前会话的 CLASSPATH。要确保在以后的会话中具有正确的 CLASSPATH 设置,则应该删除或修改启动设置。

更改启动设置

如果在系统启动时设置 CLASSPATH 变量,则查找它的位置取决于所使用的操作系统:
 
操作系统方法
Windows 98 和
Windows 95
检查 autoexec.bat 文件中的 set 命令。
Windows xp启动“控制面板”,选择“系统”,单击“环境”选项卡,并在“用户变量”部分中,检查 CLASSPATH 变量。

理解类路径和包名

Java 类被组织成包,而这些包被映射到文件系统中的目录。但是与文件系统不同的是,无论何时指定包名,都应指定完整包名 -- 永远不要仅指定它的一部分。例如,java.awt.Button 的包名总是应指定为 java.awt

例如,假定想要 Java 运行环境在包 utility.myapp 中查找名为 Cool.class 的类。如果该目录的路径为 C:\java\MyClasses\utility\myapp,则应该将类路径设置成包含 C:\java\MyClasses

要运行该应用程序,可使用下述 JVM 命令:

C:>  java -classpath C:\java\MyClasses utility.myapp.Cool
当该应用程序运行时,JVM 使用类路径设置查找在 utility.myapp 包中定义的任何其他类。

注意:应在命令中指定完整包名。例如,设置类路径包含 C:\java\MyClasses\utility 并使用命令 java myapp.Cool 是不可能的,因为这找不到该类。

(您可能想知道用什么定义类的包名。答案是:包名是类的一部分,并且不能修改,除非重新编译该类。)

注意:包规范机制一个有趣的结果是,属于相同包的多个文件实际上可存在于不同的目录中。对于每个类,包名都是相同的,但是每个文件的路径可从类路径中的不同目录开始。

文件夹和归档文件

当类存储在目录(文件夹)中时,例如 c:\java\MyClasses\utility\myapp,则类路径项指向包含包名第一个元素的目录(在这里为 C:\java\MyClasses,因为包名是 utility.myapp)。

但是当类存储在归档文件(.zip 或 .jar 文件)中时,类路径项则是该 .zip 或 .jar 文件的路径。例如,要使用位于 .jar 文件中的类库,则命令应该类似下述形式:

   java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool

多重指定

要在目录 C:\java\MyClassesC:\java\OtherClasses 中查找类文件,则可将类路径设置为:
   java -classpath C:\java\MyClasses;C:\java\OtherClasses ...
注意两个路径之间用分号分隔。

指定次序

指定多个类路径项的次序是相当重要的。Java 解释器将按照目录在类路径变量中的次序在各个目录中查找类。在上例中,Java 解释器首先在目录 C:\java\MyClasses 中查找需要的类。只有当它在该目录中没有找到该类时,解释器才能到 C:\java\OtherClasses 目录中查找。

 以上需要注意的是:我是在j2se1.5的版本上设置的 系统是XP.Pro
     1.在 “我的电脑”下设置成功CLASSPATH后 就不用再在每次运行javac和java命令提示符的时候设置CLASSPATH   除非包路径有所改变
    2.编译成功以后 可以在任何地方执行该.class文件
    3.当运行java命令提示符的时候  务必注明该文件的相对路径
    4.在设置 文件所在包的包名的时候不能跟 java定义的包名字一样 诸如java,javax之类的
posted @ 2006-10-19 10:57 CoffeeNight 阅读(21213) | 评论 (1)编辑 收藏
public   class  PrimeNumber {
         
      
public   static   void  main(String args[])
 
{
       
for ( int  i = 1 ;i <= 50 ;i ++ )
         
{
           
boolean  k = true ;  
                  
for ( int  j = 2 ;j < i;j ++ )
      
{
          
if (i % j == 0 )
     
{
             k
= false ;
             
break ;
}

       }

//
if ( ! k)
 //System.out.print(i
+ "   " );
    if(k)
      System.out.print(i+" ");     

}

}


}
 
     if(k)是打印出质数       if(!k)是打印出合数
 打印出质数也可以用标签的想法:
public class PrimeNumber{
         
      
public static void main(String args[])
 
{
      label: 
for(int i=1;i<=50;i++)
         
{

                  
for(int j=2;j<i;j++)
      
{
          
if(i%j==0)
          
continue label;
      }

   System.out.print(i
+" ");
         

}

}


}

 但是想了一下 好像不可以打印出合数^_^
还有个问题就是:不知道质数包括1不?
posted @ 2006-09-24 15:16 CoffeeNight 阅读(366) | 评论 (0)编辑 收藏
              第5章 隐藏实现细目
  
     1.jar.exe用法:
       将bin目录下的test1.class,test2.class 2个文件打包成example.jar文件
           jar cvf  example.jar  test1.class test2.class
     
     2.4种访问权限:
        public  protected  friendly(default) private
       
 
     private
  除了变量所在的类,其它任何类都不可以访问这个成员
  
  无访问修饰符
  所谓的包访问权限,同一个包内的其它类可以访问这个成员
  
  Protected
  与无访问修饰符具有权限外,还允许子类访问这个成员
  
  Public
  具有全局可视性,任何其它类都可以访问这个成员
 
      访问权限表:*表示可以访问
 
                             同一个类        同一个包           不同包的子类          不同包非子类
 
    private                   *
   
    default                   *                 *
  
    protected                *                 *                       *
 
    public                     *                 *                       *                        *

                                           TO BE CONTINUED......

                                                                MACINTER
                                 
posted @ 2006-07-31 14:01 CoffeeNight 阅读(278) | 评论 (0)编辑 收藏

          第1部分上传完毕   !

           单击下载:

            
http://www.orbitfiles.com/download/macinter   

                         陆续更新中......
            

posted @ 2006-07-29 16:42 CoffeeNight 阅读(349) | 评论 (0)编辑 收藏

             第4章 初始化和清理
        
         1.构造函数
      是与类名字相同的一种特殊函数  
      提供构造函数,可以确保对象的初始化动作一定会被执行
      <构造函数是不会返回任何东西的>
      没有自定义任何构造函数 编译器会调用默认的构造器
      如果定义了构造器(有或者无参数) 编译器就不会为你分配构造器
       
         2.关键字this
      仅用于函数之内 能够唤起此函数所在的那个类的引用
      以下引用Sun的JLS关于this关键字的说明:

      The keyword this may be used only in the body of an instance method,
      instance initializer or constructor, or in the initializer of an instance variable of a class.
      If it appears anywhere else, a compile-time error occurs.        
     
      When used as a primary expression, the keyword this denotes a value that is a reference
      to the object for which the instance method was invoked ,
      or to the object being constructed. The type of this is the class C within which the keyword this occurs.
      At run time, the class of the actual object referred to may be the class C or any subclass of C.


      翻译一下就是:
      <E文太烂>
      关键字this应该仅仅被用在实例化方法,实例初始化(??)或者构造器,又或者在类的实例化变量的初始化时(??)<像是下面Flower(String s, int petals)构造器中s的赋值??>

    如果它出现在其他地方,将会在编译时发生错误.
     
      当被使用在主表达式时,关键字this表示的是一个指向在实例化方法中调用的类或者是正在被构造的类的引用.
      This在关键字发生类C的内部.在运行的时候,事实上指向的是类C或者类C的子类 .

    一段来自Think in java 2中有关构造函数以及this的代码:

 1   public   class  Flower  {
 2
      
 3           int  petalCount  =   0
;
 4          String s  =   new  String( " null "
);
 5
         
 6          Flower( int
 petals)
 7           
{
 8              petalCount  =
 petals;
 9              System.out.println( " Constructor w/ int arg only, petalCount=  " +
 petalCount);
10            }

11            
12
        Flower(String ss) 
13         
{
14             System.out.println( " Constructor w/ String arg only, s= "   +
 ss);
15             s  =
 ss;
16         }

17         
18         Flower(String s,  int
 petals) 
19         
{
20             this
(petals); 
21           // this(s);  //  Can't call two!

22            this .s  =  s;  //  Another use of "this"
23            System.out.println( " String & int args " );
24         }

25         
26
       Flower() 
27        
{
28             this ( " hi " 47
);
29            System.out.println( " default constructor (no args) "
);
30        }

31        
32       void
 print() 
33      
{
34         // !    this(11);  //  Not inside non-constructor!

35        System.out.println(  " petalCount =  "   +  petalCount  +   "  s =  " +  s);
36      }

37      
38    public   static   void
 main(String[] args) 
39      
{
40         Flower x  =   new
 Flower();
41
        x.print();
42      }
 
43
  
44
  
45 }
 

 运行结果是:
    
Constructor w /   int  arg only, petalCount =   47
String 
&   int  args
default
 constructor (no args)
petalCount 
=   47  s  =
 hi

    代码28行this("hi",47)调用构造器Flower(String s, int petals)
   在构造器Flower(String s, int petals)里的 this.s=s   是将参数s值赋给类变量s
    因而才会在最后打印出 s=hi
   要是注释掉此行 结果是 s=null
   编译器不允许你构造在函数之外的任何函数内调用构造函数

             3.成员初始化
   class的数据成员属于基本数据类型时,可以不用给予初始化
   编译器会默认给予初始值
   不论变量的位置如何 变量一定会在任何一个函数(甚至构造函数)被调用之前完成初始化
          一段书上的代码:
  class  Tag  {
  Tag(
int  marker) 
{
    System.out.println(
" Tag( "   +  marker  +   " ) "
);
    }

   }


class  Card  {
  Tag t1 
=   new  Tag( 1 );  //  Before constructor

  Card()  {
    
//  Indicate we're in the constructor:

    System.out.println( " Card() " );
    t3 
=   new  Tag( 33 );  //  Reinitialize t3

  }

  Tag t2 
=   new  Tag( 2 );  //  After constructor
   void  f()  {
    System.out.println(
" f() "
);
  }

  Tag t3 
=   new  Tag( 3 );  //  At end
}


public   class  OrderOfInitialization  {
  
public   static   void  main(String[] args) 
{
    Card t 
=   new  Card();   // 程序入手点

    t.f();  //  Shows that construction is done
  }

}
 
      
     results:
    
Tag( 1 )
Tag(
2
)
Tag(
3
)
Card()
Tag(
33
)
f()

          在调用Card()构造器之前 先要对类Card里的成员变量初始化           
            Tag t1 = new Tag(1);
            Tag t2 = new Tag(2);
            Tag t3 = new Tag(3);
        初始化一个就调用Tag(int maker)构造器一次
        所以才会打印出      Tag(1)   Tag(2)  Tag(3)          
        初始化完成以后 才调用Card()构造器
       
        static变量的初始化都只占用一份空间 因而也就是说static一经初始化以后
        static变量将不再被初始化
        初始化时 static变量初始化顺序先于non-static
       
       4.对象生成过程:摘自原书
       <务必清楚这个过程>
      
       以一个名为Dog的class为例:
       1.当Dog对象首次被产生出来,Java直译器必须查找环境变量所在的位置,找出Dog.class
       2.Dog.class被装载,它所有的static初始化动作将执行,而且仅会执行1次,就在class首次被装载的时候
       3.当new Dog()时,构建过程会为Dog对象在heap上分配足够的空间
       4.存储空间会先被清为零,并自动将Dog对象所有基本数据类型的数据设置为初始值,将引用设为null
       5.执行所有出现于数据定义处的初始化动作
       6.执行构造函数
      
       5.数组初始化
       数组是一连串对象或者一连串基本数据 它们都必须是同型的
       将某个数组指派给另外个数组 所操作的仅仅是数组的引用而已
       换句话说就是说被赋值的一方改变数组值的同时 赋值一方也会随着改变           

                    TO BE CONTINUED ......
  
                             MACINTER.
posted @ 2006-07-29 16:22 CoffeeNight 阅读(295) | 评论 (0)编辑 收藏
Think in java 2 EN html 

   
http://www.orbitfiles.com/download/id555473116

Think in java 2 Code

  
http://www.orbitfiles.com/download/id555475067

Think in java 2书后解答

  
http://www.orbitfiles.com/download/id555477502
posted @ 2006-07-29 11:48 CoffeeNight 阅读(364) | 评论 (0)编辑 收藏