全局变量的使用和声明

2016-07-08

Java和C、C++

   对于变量声明、参数传递、操作符、流控制等,Java使用了和C、C++相同的传统,使得熟悉C、C++的程序员能很方便地进行编程。同时,Java为了实现其简单、鲁棒、安全等特性,也摒弃了C和C++中许多不合理的内容。

0.Java中如何定义一个常量?建议一个package中需要的常量集中到一个XyzConstants之类的interface里声明,就像普通的field那样声明就行了。
public interface SomeConstants {
   public int PORT = 80;
   public String IP = "166.111.166.111";
   public boolean test = true;
}

就可以。用到常量的类implements这个接口..简单情况这样就行乐。更formal的做法是写一个类维护所有的常量,负责从配置文件读取所有的常量的值。可以在一个static {} 块里从配置文件中初始化所有static的变量。这样有利于提高软件的可配置性。改些东东不用动代码,比较好。最好要有config Tool负责写配置文件。

1.全局变量:Java程序中,不能在所有类之外定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个全局变量。例如:ClassGlobalVar{public static global_var;}在类GlobalVar中定义变量global_var为public static,使得其它类可以访问和修改该变量。Java对全局变量进行了更好的封装。而在C和C++中,依赖于不加封装的全局变量常常造成系统的崩溃。

做一个类用静态属性保存它:
public class Global{
  public static int status;
}
调用:
if(isSuccess)    Global.status = 1;
else             Global.status = -1;
定义一个公开类,在里面加static 变量。
public class infos{
  private infos(){
  }
   public static int PORT = 80;
   public static String IP = "166.111.166.111";
   public static boolean test = true;
   public static finale String MYNAME="zzz"; //定义中用了finale,就是不能改变指的。
}
在别的class中调用这些变量就是: infos.PORT,infos.IP,infos.test,infos.MYNAME
多个class交互时可以通过改变这些变量的值来传递信息。比如 infos.test被别的class改成了false,可能表示某一件事已经失败或已经做过,其它class就可以提前知道这些信息。
不知道我说的是不是你要问的东西。

如果是在class中定义一个全局变量,那就直接在class中写 public 变量类型 变量名;就可以定义一个全局变量了吧?
2.Goto:Java不支持C、C++中的goto语句,而是通过例外处理语句try,Catch,final等来代替C、C++中用goto来处理遇到错误时跳转的情况,使程序更可读且更结构化。

3.指针:指针是C、C++中最灵活,也是最容易产生错误的数据类型。由指针所进行的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C++中的私有成员,从而破坏安全性,造成系统的崩溃。而Java对指针进行完全的控制,程序员不能直接进行任何指针操作,例如把整数转化为指针,或者通过指针释放某一内存地址等。同时,数组作为类在Java中实现,良好地解决了数组访问越界这一C、C++中不作检查的错误。

4.内存管理:在C中,程序员通过库函数malloc()和free()来分配和释放内存,C++中则通过运算符new和delete来分配和释放内存。再次释放已释放的内存块或未被分配的内存块,会造成系统的崩溃;同样,忘记释放不再使用的内存块也会逐渐耗尽系统资源。而在Java中,所有的数据结构都是对象,通过运算符new为它们分配内存堆。通过new得到对象的处理权,而实际分配给对象的内存可能随程序运行而改变,Java对此自动地进行管理并且进行垃圾收集,有效防止了由于程序员的误操作而导致的错误,并且更好地利用了系统资源。

5.数据类型的支持:在C、C++中,对于不同的平台,编译器对于简单数据类型如int,float等分别分配不同长度的字节数,例如:int在IBMPC中为16位,在VAX-11中为32位,这导致了代码的不可移植性,但在Java中,对于这些数据类型总是分配固定长度的位数,如对int型,它总占32位,这就保证了Java的平台无关性。

6.类型转换:在C、C++中,可以通过指针进行任意的类型转换,常常带来不安全性,而Java中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的转换。

7.头文件:C、C++中用头文件来声明类的原型以及全局变量、库函数等,在大的系统中,维护这些头文件是很困难的。而Java不支持头文件,类成员的类型和访问权限都封装在一个类中,运行时系统对访问进行控制,防止对私有成员的操作。同时,Java中用import语句来与其它类进行通讯,以便使用它们的方法。8.结构和联合:C、C++中的结构和联合中所有成员均为公有,这就带来了安全性问题。Java中不包含结构和联合,所有的内容都封装在类中。

9.预处理:C、C++中用宏定义来实现的代码给程序的可读性带来了困难。在Java中,不支持宏,它通过关键字final来声明一个常量,以实现宏定义中广泛使用的常量定义。