【Java】Java学习笔记-变量和数据类型

本文详细介绍了Java中的变量概念,包括局部变量、实例变量和静态变量的特点及使用方法,并深入探讨了Java的基本数据类型及其特性。

Java 变量

变量是在内存中分配的保留区域的名称。换句话说,它是内存位置的名称。这意味着它的值可以改变。

在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:
type identifier [ = value][, identifier [= value] ...] ;
格式说明:type为Java数据类型。identifier是变量名。可以使用逗号隔开来声明多个同类型变量。
int a=5;    // 这里 a就是一个变量。
一、变量类型
java中有三种类型的变量:

1. 局部变量(Local):在方法内声明的变量称为局部变量。
2. 实例变量(Instance):在类中声明但在方法外部的变量称为实例变量。但它不被声明为静态(未加static修辞符)。
3. 静态变量(Static):被声明为static的变量(加static修辞符)称为静态变量。它不能是局部的。
class A{  
    int a=5;//实例变量
    static int m=10;// 静态变量
    void method(){  
        int n=9;//局部变量
    }  
}

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

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

四、静态变量

静态变量也称类变量,在类中以static关键字声明,但必须在方法、构造方法和语句块之外。

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

Java 基本数据类型

变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。

数据类型表示要存储在变量中的不同类型的值。 在Java中,有两种类型的数据类型:
1. **内置数据类型**
2. **引用数据类型**
一、内置数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

数据类型默认值默认长度
booleanfalse1 bit
char‘\u0000’2 byte
byte01 byte
short02 byte
int04 byte
long0L8 byte
float0.0f4 byte
double0.0d8 byte
(一) byte:
byte数据类型是8位、有符号的,以二进制补码表示的整数;
  - 最小值是-128(-2^7);
  - 最大值是127(2^7-1);
  - 默认值是0;
  - byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一;
(二) short:
short数据类型是16位、有符号的以二进制补码表示的整数
最小值是-32768(-2^15);
最大值是32767(2^15 - 1);
Short数据类型也可以像byte那样节省空间。一个short变量是int型变量所占空间的二分之一;
默认值是0;
(三) int:
int数据类型是32位、有符号的以二进制补码表示的整数;
最小值是-2,147,483,648(-2^31);
最大值是2,147,483,647(2^31 - 1);
一般地整型变量默认为int类型;
默认值是0;
(四) long:
long数据类型是64位、有符号的以二进制补码表示的整数;
最小值是-9,223,372,036,854,775,808(-2^63);
最大值是9,223,372,036,854,775,807(2^63 -1);
这种类型主要使用在需要比较大整数的系统上;
默认值是0L;
exp: `long a = 100000L,long b = -200000L。`
(五) float:
float数据类型是单精度、32位、符合IEEE 754标准的浮点数;
float在储存大型浮点数组的时候可节省内存空间;
默认值是0.0f;
浮点数不能用来表示精确的值,如货币;
(六) double:
double数据类型是双精度、64位、符合IEEE 754标准的浮点数;
浮点数的默认类型为double类型;
double类型同样不能表示精确的值,如货币;
默认值是0.0d;
(七) boolean:
boolean数据类型表示一位的信息;
只有两个取值:true和false;
这种类型只作为一种标志来记录true/false情况;
默认值是false;
(八) char:
char类型是一个单一的16位Unicode字符;
最小值是’\u0000’(即为0);
最大值是’\uffff’(即为65,535);
char数据类型可以储存任何字符;

注:为什么char在java中使用2个字节以及什么是\u0000 ?

这是因为java使用Unicode系统而非ASCII码系统编码。 \u0000是Unicode系统的最低范围。

案例
//测试原始数据类型
public class PrimitiveType{
    public static void main(String[] args) {
        // byte
        System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
        System.out.println("包装类:java.lang.Byte");
        System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
        System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
        System.out.println();
        // short
        System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
        System.out.println("包装类:java.lang.Short");
        System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
        System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
        System.out.println();
        // int
        System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
        System.out.println("包装类:java.lang.Integer");
        System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
        System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
        System.out.println();
        // long
        System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
        System.out.println("包装类:java.lang.Long");
        System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
        System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
        System.out.println();
        // float
        System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
        System.out.println("包装类:java.lang.Float");
        System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
        System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
        System.out.println();

        // double
        System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
        System.out.println("包装类:java.lang.Double");
        System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
        System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
        System.out.println();

        // char
        System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
        System.out.println("包装类:java.lang.Character");
        // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
        System.out.println("最小值:Character.MIN_VALUE="
            + (int) Character.MIN_VALUE);
        // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
        System.out.println("最大值:Character.MAX_VALUE="
            + (int) Character.MAX_VALUE);
    }
}  
//溢出
public class AddExample{  
    public static void main(String[] args){  
        int a=130;  
        byte b=(byte)a;  
        System.out.println(a);  //a=130
        System.out.println(b);  //b=-126
    }
}
//较低类型相加
public class AddExample{  
    public static void main(String[] args){  
        byte a=10;  
        byte b=10;  
        //byte c=a+b;
        //Compile Time Error: 因为a+b=20将会变成int类型 
        //错误: 不兼容的类型: 从int转换到byte可能会有损失
        byte c=(byte)(a+b);  
        System.out.println(c);  
    }
}

实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。

二、引用类型
  • 引用类型变量由类的构造函数创建,可以使用它们访问所引用的对象。这些变量在声明时被指定为一个特定的类型,比如Employee、Pubby等。变量一旦声明后,类型就不能被改变了。
  • 对象、数组都是引用数据类型。
  • 所有引用类型的默认值都是null。
  • 一个引用变量可以用来引用与任何与之兼容的类型。
//例子:
Boy boy = new Boy(“Tom”);

Java常量

常量就是一个固定值。它们不需要计算,直接代表相应的值。
//常量指不能改变的量。 在Java中用final标志,声明方式和变量类似:
final double PI = 3.1415927;
虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量。
//字面量可以赋给任何内置类型的变量。例如:
byte a = 68;
char a = 'A'
byte、int、long、和short都可以用十进制、16进制以及8进制的方式来表示。
//当使用常量的时候,前缀0表明是8进制,而前缀0x代表16进制。例如:
int decimal = 100;
int octal = 0144;
int hexa =  0x64;
和其他语言一样,Java的字符串常量也是包含在两个引号之间的字符序列。
//下面是字符串型字面量的例子:
"Hello World"
"two\nlines"
"\"This is in quotes\""
字符串常量和字符常量都可以包含任何Unicode字符。
char a = '\u0001';
String a = "\u0001";
Java语言支持一些特殊的转义字符序列。
符号字符含义
\n换行 (0x0a)
\r回车 (0x0d)
\f换页符(0x0c)
\b退格 (0x08)
\s空格 (0x20)
\t制表符
\”双引号
\’单引号
\反斜杠
\ddd八进制字符 (ddd)
\uxxxx16进制Unicode字符 (xxxx)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿周周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值