Java 中的变量类型

目录
  • 1、局部变量
  • 2、成员变量(实例变量)
  • 3、类变量

1、局部变量

在方法或语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

  • 局部变量声明在方法、构造方法或者语句块中;
  • 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
  • 访问修饰符不能用于局部变量;
  • 局部变量只在声明它的方法、构造方法或者语句块中可见;
  • 局部变量是在栈上分配的。
  • 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

2、成员变量(实例变量)

成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。

  • 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
  • 当一个对象被实例化之后,每个实例变量的值就跟着确定;
  • 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
  • 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
  • 实例变量可以声明在使用前或者使用后;
  • 访问修饰符可以修饰实例变量;
  • 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
  • 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
  • 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。

3、类变量

类变量也声明在类中,方法体之外,但必须声明为 static 类型。

  • 类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。
  • 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
  • 静态变量除了被声明为常量外很少使用。常量是指声明为 public / private, final static 类型的变量。常量初始化后不可改变。
  • 静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。
  • 静态变量在第一次被访问时创建,在程序结束时销毁。
  • 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。
  • 默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
  • 静态变量可以通过:ClassName.VariableName 的方式访问。
  • 类变量被声明为 public static final 类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public final 类型,其命名方式与实例变量以及局部变量的命名方式一致。

关于 类变量 的说明:

The static keyword in Java is used for memory management mainly. We can apply java static keyword with variables, methods, blocks and nested class. The static keyword belongs to the class than an instance of the class. The static can be: Variable (also known as a class variable) Method (also known as a class method) Block.

(翻译)

Java 中的 static 关键字主要用于 内存管理(就是用了这个会安排出内存空间来,供类的实例之间共享某个量)。我们可以将 java 的 static 关键字施用于变量、方法、语句块和嵌套类。static 定义的对象是属于整个类的, 而不是某个类的实例。

普通的变量属于类的某一个特定的实例,但用 static 关键字修饰的变量将属于一个类。也就是说,我们通过类的某一个实例去修改一个一般的变量值,将只有这个实例中的值被修改,其他实例不受影响;而若是修改一个 static 关键字修饰的类变量,这个类的所有实例的这个值都会被修改。

说起来比较麻烦,可以看一段示例代码:

public class Static {
 public static void main(String[] args) {
  Example foo = new Example();
  Example bar = new Example();

  foo.staticVar = foo.normalVar = "foobar";

  System.out.println(foo.staticVar + "\t" + foo.normalVar);
  System.out.println(bar.staticVar + "\t" + bar.normalVar);
 }
}

class Example {
 static String staticVar = "Example";
 String normalVar = "Example";
}

输出:

foobar foobar
foobar Example

可以看到,我们只改变了 foo 实例的值,但由 static 修饰的类变量 staticVar 的改变在 bar 中也出现了,而普通的成员变量则不然。

利用这种特性,我们可以实现一种可以统计自己的实例个数的类,

例如:

public class CountingClass {
 public static void main(String[] args) {
  Counter a = new Counter();
  Counter b = new Counter();
  Counter c = new Counter();

  System.out.println("Total Counters: " + a.total + " == " + b.total + " == " + c.total);
 }
}

class Counter { // 自计数类
 static int total = 0;

 public Counter() {
  total++;
  System.out.println("第 " + total + " 个 Counter 被构造。");
 }
}

到此这篇关于Java 中的变量类型的文章就介绍到这了,更多相关Java 变量类型内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java中String类型变量的赋值问题介绍

    运行下面这段代码,其结果是什么? package com.test; public class Example { String str = new String("good"); char[] ch = { 'a', 'b', 'c' }; public static void main(String[] args) { Example ex = new Example(); ex.change(ex.str, ex.ch); System.out.println(ex.str);

  • Java 变量类型及其实例

    在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifier [ = value][, identifier [= value] ...] ; 格式说明:type为Java数据类型.identifier是变量名.可以使用逗号隔开来声明多个同类型变量. 以下列出了一些变量的声明实例.注意有些包含了初始化过程. int a, b, c; // 声明三个int型整数:a. b.c. int d = 3, e, f = 5; // d声明三个整数并赋予初值. b

  • 深入解析Java中的数据类型与变量

    Java数据类型转换(自动转换和强制转换) 数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中"悄然"进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换:强制类型转换则必须在代码中声明,转换顺序不受限制. 自动数据类型转换 自动转换按从低到高的顺序转换.不同类型数据间的优先关系如下:     低--------------------------------------------->高     byte,short,char-> int

  • Java基本知识点之变量和数据类型

    Java中的变量和基本数据类型: 写完第一个java程序之后,我们对Java也有了初步的了解,现在我们再来继续认识一下Java中的基本知识点--变量和数据类型. 那么我们该怎样来认识变量和数据类型呢,在这里,我们首先来认识一下内存,我们日常生活中的计算机体系中内存主要分为内存储器和外存储器,比如说我们平常看我们电脑配置的时候,都会看到8G+256G这样的标志,其中的8G就是所说的内存储器(RAM),而256G也就是外存储器,诸如磁盘,u盘,光盘等,这里我们就不详细的研究了.我们定义的变量占用的就

  • 一篇文章带你入门java变量与类型

    目录 整型变量 基本语法格式 代码示例 长整型变量 基本语法格式 代码示例 双精度浮点型变量 基本语法格式 代码示例 单精度浮点型变量 基本语法格式 代码示例 字符类型变量 基本语法格式 代码示例 字节类型变量 基本语法格式 代码示例 短整型变量 基本语法格式 代码示例 布尔类型变量 基本语法格式 代码示例 简单/内置类型小结 字符串类型变量 基本语法格式 代码示例 转义字符 字符串拼接 变量作用域 变量的命名规则 常量 字面值常量 final 关键字修饰的常量 总结 整型变量 基本语法格式 i

  • 全面解析Java支持的数据类型及Java的常量和变量类型

    基本数据类型 变量就是用来储存值而保留的内存位置.这就意味着当你创建一个变量时就会在内存中占用一定的空间. 基于变量的数据类型,操作系统会进行内存分配并且决定什么将被储存在保留内存中.因此,通过给变量分配不同的数据类型,你可以在这些变量中存储整数,小数或者字字母. Java 中有两种有效地数据类型: 原始数据类型 引用数据类型 原始数据类型 Java 支持 8 种原始数据类型.原始数据类型是由该语言预先定义的并用关键词命名的.下面让我们深入学习一下这 8 种数据类型. 字节型(byte) 字节型

  • Java 10 局部变量类型推断浅析

    前言 java 10 引进一种新的闪闪发光的特性叫做局部变量类型推断.听起来很高大上吧?它是什么呢? 下面的两个情景是我们作为 Java 开发者认为 Java 比较难使用的地方. 上下文:陈词滥调和代码可读性 也许日复一日,你希望不再需要重复做一些事情.例如在下面的代码(使用 Java 9 的集合工厂),左边的类型也许会感觉到冗余和平淡. import static java.util.Map.entry; List<String> cities = List.of("Brussel

  • 简单了解JAVA变量类型及代码实例

    这篇文章主要介绍了简单了解JAVA变量类型及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在Java语言中,有类变量.实例变量.局部变量,所有的变量在使用前必须声明.声明普通变量如下: public int a,b,c; //整型变量 public float f = 3.14f: //单精度浮点型变量,并赋值 public double d; //双精度浮点型变量 public byte b =22: //整型变量 public S

  • Java 中的变量类型

    目录 1.局部变量 2.成员变量(实例变量) 3.类变量 1.局部变量 在方法或语句块中定义的变量被称为局部变量.变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁. 局部变量声明在方法.构造方法或者语句块中: 局部变量在方法.构造方法.或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁: 访问修饰符不能用于局部变量: 局部变量只在声明它的方法.构造方法或者语句块中可见: 局部变量是在栈上分配的. 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用. 2.成员

  • 深入理解Java中的字符串类型

    1.Java内置对字符串的支持: 所谓的内置支持,即不用像C语言通过char指针实现字符串类型,并且Java的字符串编码是符合Unicode编码标准,这也意味着不用像C++那样通过使用string和wstring类实现与C语言兼容和Unicode标准.Java内部通过String类实现对字符串类型的支持.这意味着:我们可以直接对字符串常量调用和String对象同样的方法: //可以再"abc"上直接调用String对象的所有方法 int length="abc".l

  • 深入理解java中的null“类型”

    本文研究的主要是java中的null"类型"的相关实例,具体介绍如下. 先给出一道简单的null相关的题目,引发我们对null的探讨,后面会根据官方语言手册对null"类型"进行解读. 题目:下面程序能正确运行吗? 解析: 输出应该为 :haha 因为null 是可以强转为任何类类型的,所以前面((NULL)null)是合法的,但是null强转以后是无效对象,其返回值为null,(后面会作解释) 而haha方法是静态方法,静态方法使用静态绑定,不会抛出空指针异常.

  • java中的Reference类型用法说明

    本文简要总结java中的Reference类型. 最近在研读jdk并发框架,其中AQS是重点,由于我打破砂锅问到底的轻微强迫症,google了AQS作者Doug Lea的论文原文[The java.util.concurrent Synchronizer Framework],有兴趣的同学可以自行下载.其中谈到设计同步框架的核心是选择一个严格意义上的FIFO队列,作为阻塞线程队列并对其进行维护. 对此主要由两种选择,一个是MCS锁,另一个时CLH锁.因为CLH锁比MCS对取消和超时的处理更方便,

  • 基于java中的null类型---有关null的9件事

    目录 关于null的9件事 1.首先,null是java中的关键字,像public.static.final 2.就像每种原始类型都有默认值一样 3.要澄清一些误解 4.null可以赋值给引用变量 5.任何含有null值的包装类 6.如果使用了带有null值的引用类型的变量,instanceof操作会返回false 7.可以使用静态方法来使用一个值为null的引用类型变量 8.可以将null传递给方法使用 9.可以使用== 或者 != 操作来比较null值 Java: null是什么?? nul

  • js中判断变量类型函数typeof的用法总结

    1.作用: typeof 运算符返回一个用来表示表达式的数据类型的字符串. 可能的字符串有:"number"."string"."boolean"."object"."function" 和 "undefined". 2.常用返回值说明 表达式 返回值 typeof undefined 'undefined' typeof null 'object' typeof true 'boole

  • java中成员变量与局部变量区别分析

    本文实例分析了java中成员变量与局部变量区别.分享给大家供大家参考.具体分析如下: 成员变量:在这个类里定义的私有变量,属于这个类. 创建以及使用成员变量 复制代码 代码如下: public class Person {     String name;     String Sex;     int age;     double Height;         public static void main(String arges[])     {         Person p=ne

  • 详解java中的byte类型

    介绍 byte,即字节,由8位的二进制组成.在Java中,byte类型的数据是8位带符号的二进制数. 在计算机中,8位带符号二进制数的取值范围是[-128, 127],所以在Java中,byte类型的取值范围也是[-128, 127]. 取值范围分析 一直在想为什么不是 -128 到 128呢?今天分析了一下这个问题. 首先我们得明白一件事情,那就是运算规则: ####################################################################

  • 将java中的 string 类型转成 数组案例

    这个要看你的具体需求了.如果是有分隔符的那种例如"a,b,c";就直接分割就行了. String string = "a,b,c"; String [] stringArr= string.split(","); //注意分隔符是需要转译滴... 如果是"abc"这种字符串,就直接 String string = "abc" ; char [] stringArr = string.toCharArray(

  • 深入了解Java中成员变量与局部变量的使用与区别

    目录 一.成员变量和局部变量的区别 二.封装 private关键字 private的使用 this关键字 一.成员变量和局部变量的区别 类中位置不同:成员变量(类中方法外)局部变量(方法内部或方法声明上) 内存中位置不同:成员变量(堆内存)局部变量(栈内存) 生命周期不同:成员变量(随着对象的存在而存在,随着对象的消失而消失)局部变量(随着方法的调用而存在,醉着方法的调用完毕而消失) 初始化值不同:成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用) 二.封装 1..

随机推荐