Java 全局变量 声明与定义

JAVA全局变量(或称成员变量)可分两种,一种是静态变量,另一种是实例变量,即在类体中定义的变量,有三点得注意:
一、成员变量不能在类体中先声明(定义)后赋值,但静态变量可以先在类体中声明,然后在方法中赋值(当然实例变量是不行的);

1)如以下程序会出问题:
1
public class Test {

  static int a; //在类体中声明整型静态变量a。

  int b; //在类体中声明整型实体变量b。

  a=3; //在类体中对静态变量a赋初值。

  b=5; //在类体中对实体变量b赋初值。

  public static void main(String[] args) {

    System.out.println("a+b="+(a+b));

  }

}
java中全局变量为什么不能先声明再赋值?

public class Test{
  int b;
  b=5;
}
为什么这种先声明后赋值是错误?什么机制导致的?
那是因为 i=3这是赋值语句,不能单独出现在方法或{}以外的地方
改成

public class Test{
  int i;
  {i = 3;} //写在{}里就可以了(这种代码块优先于构造方法执行)
}
2)以下程序可以运行:
public class Test {

  static int a; //在类体中声明整型静态变量a。

  public static void main(String[] args) {

    a=3; //在方法中对静态变量a赋值。

    System.out.println("a="+a);

  }

}
3)以下程序也不可以运行,会报错:
public class hello {

  int a; //在类体中声明整型实体变量a。

  public static void main(String[] args) {

    a=3; //在方法中对实体变量a赋值。

    System.out.println("a="+a);

  }

}
二、成员变量可以在类体中声明同时进行赋值,如 静态变量:static int a=3; 实例变量:int b=5;
如:

public class Test {

  static int a=3; //在类体中声明整型静态变量a并赋初值。

  int b=5; //在类体中声明整型实体变量b并赋初值。

  public static void main(String[] args) {

    System.out.println("a+b="+(a+b));

  }

}
三、所有变量(包括成员变量)均不能以这种形式声明并赋值变量(无论在类体中还是在方法

int a=b=3;
1
译系统认为 b 没有被声明何种数据类型。

还有,在数据类型转换上,有隐式转换和显式转换(即强制类型转换),隐式转换只能从高字节的数据类型向低字节的数据类型转换,这样不会丢失原有数据的精确度,如果要将变量从低字节的数据类型转换成高字节的数据类型,只能使用显式转换。如下:

short a=3;
int b=65537;
a=b;
则程序会报错。

而这样:a=(short)b

就不会报错了。但有时会失去数据原有的精确性。如上,则a=1; 因为a被b以低16位的位值赋值了。

原文地址:https://www.cnblogs.com/xuelin1221/p/10335990.html

时间: 2024-08-28 01:58:34

Java 全局变量 声明与定义的相关文章

java类声明定义与c++的区别

java类定义有有访问关键字以及修饰符,而c++没有这样的关键字: 例如java: public class a{ int a: double b: } c++: class a{ int a: double: }: 看起来java复杂了累的声明与定义,它减去了c++的多态继承,很大程多上简化了他的特性.

C++全局变量的声明和定义

(1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作: 第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件: 第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件. 那么,错误可能在两个地方产生: 一个,编译时的错误,这个主要是语法错误: 一个,链接时的错误,主要是重复定义变量等. 编译单元指在编译阶段生成的每个obj文件. 一个obj文件就是一个编译单元. 一个.cpp(.c)和它相应的.h文件共同组成了一个编译单元.

C++中全局变量的声明和定义

原文链接:http://blog.csdn.net/candyliuxj/article/details/7853938 (1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作: 第一步:将每个.cpp和相应的.h文件编译成obj文件: 第二步:将工程所有的obj文件进行Link,生成最终的.exe文件. 这样,错误可能在两个地方产生: 一个是在编译的时候发生的错误,主要是语法错误: 一个是在链接的时候的错误,主要是重复定义变量等. 编译单元指在编

Android NDK开发篇(四):Java与原生代码通信(原生方法声明与定义与数据类型)

Java与原生代码通信涉及到原生方法声明与定义.数据类型.引用数据类型操作.NIO操作.訪问域.异常处理.原生线程 1.原生方法声明与定义 关于原生方法的声明与定义在上一篇已经讲一点了,这次具体分析一下.依据javah自己主动生成的头文件.能够看出原生方法的声明和定义,比如: JNIEXPORT jstring JNICALL Java_com_shamoo_helljni_HelloJni_stringFromJNI(JNIEnv *, jobject); 虽然Java上的原生方法没有不论什么

Java——全局变量与局部变量的区别

在Java程序中,会根据变量的有效范围将变量分为成员变量和局部变量,通常类的属性成为累的全局变量(成员变量),成员变量在整个类中都有效,在类的方法体中定义的变量称为局部变量,局部变量只在当前代码体中有效不能用于类的其他方法中.成员变量可与局部变量的名字相同,此时成员变量将被隐藏,即这个成员变量在此方法中暂时失效,只取局部变量的值.举个例子: 1 public class Man{ 2 static int age=20; 3 public static void main(String[] ar

C语言,函数的声明与定义

函数声明与定义 变量: 在讲变量前,先讲一下变量的声明和定义这两个概念. 声明一个变量,意味着向编译器描述变量的类型,但不为变量分配存储空间. 定义一个变量,意味着在声明变量的同时还要为变量分配存储空间,在定义变量的同时为变量初始化. 局部变量:通常只定义不声明. 全局变量:通常在源文件中定义,在头文件中声明. 在一个函数内部定义的变量成为局部变量,它在本函数内有效. 函数中的局部变量,如果不定义类型,其缺省是自动变量auto, 例如:int a,b=2; 其等价于auto int a,b =

java中接口的定义与实现

1.定义接口 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,当中接口体由常量定义和方法定义两部分组成.定义接口的基本格式例如以下: [修饰符] interface 接口名 [extends 父接口名列表]{ [public] [static] [final] 常量; [public] [abstract] 方法; } 修饰符:可选,用于指定接口的訪问权限,可选值为public.假设省略则使用默认的訪问权限. 接口名:必选參数,用于指定接口的名称,接口名

声明和定义的区别

声明部分的作用是对有关的标识符(如变量?函数?结构体?共用体等)的属性进行说明.对于函数,声明和定义的区别是明显的,函数的声明是函数的原型,而函数的定义是函数功能的确立.对函数的声明是可以放在声明部分中的,而函数的定义显然不在函数的声明部分范围内,它是一个文件中的独立模块. 在声明部分出现的变量有两种情况:一种是需要建立存储空间的(如int a;):另一种是不需要建立存储空间的(如extern int a;).前者称为定义性声明(defining declaration),或简称为定义(defi

内存四域,变量声明和定义,寄存器,c内嵌汇编,auto,堆栈,常量,静态变量

 1.内存四大区域 2.在程序中,变量的声明可以有多份,定义只能有一份 3.寄存器在cpu里面,没有地址 4.c语言内嵌汇编语言 5.auto变量 自动分配内存,自动释放内存. 6.栈的大小由编译器决定 修改栈的方式,右击项目à属性à配置属性à链接器à系统à堆栈保留大小 7.卡死cpu,卡死内存的程序 8.在堆上申请空间后赋值后,不可以释放内容.要通过free方法进行释放对空间. 9.常量字符串在代码区.代码区是智能读的. 10.常量本质 10.静态变量,全局变量的差别 A全局变量可以跨文件