Java 学习(4):基本数据类型,变量类型
目录
--- 基本数据类型
--- 变量类型
基本数据类型
- 变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
- 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
Java 的两大数据类型:
- 内置数据类型:Java语言提供了八种基本类型。六种数字类型(四个整数型(byte, short, int, long),两个浮点型(float, double)),一种字符类型(char),还有一种布尔型(boolean)。各类数据类型范围查询:
public class PrimitiveTypeTest {
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);
}
}数值类型的基本类型的取值范围
实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。
- 内置数据类型:Java语言提供了八种基本类型。六种数字类型(四个整数型(byte, short, int, long),两个浮点型(float, double)),一种字符类型(char),还有一种布尔型(boolean)。各类数据类型范围查询:
Java 里使用 long 类型的数据一定要在数值后面加上 L,否则将作为整型解析。
- 引用数据类型:在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,eg: Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
对象、数组都是引用数据类型。
所有引用类型的默认值都是null。
一个引用变量可以用来引用与任何与之兼容的类型。
- 引用数据类型:在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,eg: Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
- Java 在程序运行时,常量 是 不会被修改的量( 在 Java 中使用 final 关键字来修饰常量),声明方式和变量类似:
final double PI = 3.1415927; //通常使用大写字母表示常量
byte、int、long、和 short 都可以用 十进制、16进制以及8进制的方式来表示。当使用常量的时候,前缀0表示8进制,而前缀0x代表16进制。例如:
int decimal = ;
int octal = ;
int hexa = 0x64;字符串常量 和 字符常量 都可以包含任何Unicode字符。例如:char a = '\u0001';
符号 字符含义
\n 换行 (0x0a)
\r 回车 (0x0d)
\f 换页符(0x0c)
\b 退格 (0x08)
\s 空格 (0x20)
\t 制表符
\" 双引号
\' 单引号
\\ 反斜杠
\ddd 八进制字符 (ddd)
\uxxxx 16进制Unicode字符 (xxxx)Java语言支持一些特殊的转义字符序列
- 自动类型转换:整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。转换从低级到高级。
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double数据类型转换必须满足如下规则:必须满足转换前的数据类型的位数要低于转换后的数据类型.
1. 不能对 boolean 类型进行类型转换。
2. 不能把对象类型转换成不相关类的对象。
3. 在把 容量大 的类型转换为 容量小 的类型时必须使用 强制类型转换。
/* 强制类型转换
1. 条件是转换的数据类型必须是兼容的。
2. 格式:(type)value type是要强制类型转换后的数据类型 实例: */
int i1 = ;
byte b = (byte)i1; //强制类型转换为byte4. 转换过程中可能导致 溢出 或 损失精度。eg:
int i =;
byte b = (byte)i; //因为byte类型时8位,最大值为127,所以当强制转换为int类型值128时候就会导致溢出。- 5. ****** 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入 *****.eg:
(int)23.7 == ;
(int)-45.89f == - - 6. 强制类型转换: 条件是转换的数据类型必须是兼容的。格式:(type)value, 其中 type 是要强制类型转换后的数据类型,eg:
public class QiangZhiZhuanHuan{
public static void main(String[] args){
int i1 = ;
byte b = (byte)i1;//强制类型转换为byte
System.out.println("int强制类型转换为byte后的值等于"+b); //结果:int强制类型转换为byte后的值等于123
}
} - 7. 隐含强制类型转换
1. 整数的默认类型是 int。
2. 浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f.
变量类型
在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:
type identifier [ = value][, identifier [= value] ...]; //type为数据类型,identifier是变量名
Java语言支持的变量类型有:
public class Variable{
static int allClicks=; // 类变量
String str="hello world"; // 实例变量
public void method(){
int i =; // 局部变量
}
}
- 类变量(静态变量,易用于 常量 定义):独立于方法之外的变量,用 static 修饰。
- 类变量 也称为 静态变量,在类中以 static 关键字声明,但必须在方法构造方法和语句块之外。
- 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
- 静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。
- 静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。
- 静态变量在程序开始时创建,在程序结束时销毁。
- 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。
- 默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
- 静态变量可以通过:ClassName.VariableName的方式访问。
- 类变量被声明为public static final类型时,类变量名称一般建议使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。
import java.io.*; public class Employee {
private static double salary; //类变量salary 是静态的私有变量
public static final String DEPARTMENT = "开发人员"; // 类变量,static final 修饰,变量名一般大写,表明DEPARTMENT是一个常量
public static void main(String args[]){
salary = ;
System.out.println( DEPARTMENT + "平均工资: " + salary);
}
}
注意:如果其他类想要访问该变量,可以这样访问:Employee.DEPARTMENT - 类变量赋值方法
- 无final修饰,可 声明时赋值,构造器中赋值,静态语句块或静态方法赋值;
- 有final修饰,可 声明时赋值,声明与赋值分开可在静态语句块中赋值。
public class StaticTest {
private static int staticInt = ; //类变量,声明时赋值
private int random = ; //成员变量 public StaticTest() {
staticInt++;
random++;
} public static void main(String[] args) {
System.out.println("类变量与对象变量的值变化");
StaticTest test = new StaticTest();
System.out.println(" 实例1:staticInt:" + test.staticInt + "----random:" + test.random);
StaticTest test2 = new StaticTest();
System.out.println(" 实例2:staticInt:" + test.staticInt + "----random:" + test.random);
System.out.println("静态变量赋值");
System.out.println(" 静态语句块起作用:" + A.staticA);
A a = new A();
System.out.println(" 构造器起作用:" + a.staticA);
a.toChange();
System.out.println(" 静态方法1起作用:" + A.staticA);
a.toChange2();
System.out.println(" 静态方法2起作用:" + A.staticA);
System.out.println("常量赋值");
System.out.println(" 静态语句赋值:" + B.staticB);
}
} class A {
public static String staticA ="A" ; static{ staticA ="A1"; } //静态语句块修改值 public A(){ staticA ="A2"; } //构造器修改值 //静态方法起作用
public static void toChange(){ staticA ="A3"; }
public static void toChange2(){ staticA ="A4"; }
} class B {
public static final String staticB ; // 声明与赋值分离
static{ staticB ="B"; } //在静态语句中赋值
}
- 实例变量:独立于方法之外的变量,不过没有 static 修饰:
- 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
- 当一个对象被实例化之后,每个实例变量的值就跟着确定;
- 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
- 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
- 实例变量可以声明在使用前 或 使用后;
- 访问修饰符可以修饰实例变量;
- 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把 实例变量 设为 私有。通过使用访问修饰符可以使实例变量对子类可见;
- 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
- 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
import java.io.*;
public class Employee{
public String name; // 公有 实例变量,对子类可见
private double salary; // 私有 实例变量,仅在该类可见
public Employee (String empName){ //在构造器中对name赋值
name = empName;
}
public void setSalary(double empSal){ //设定salary的值
salary = empSal;
}
public void printEmp(){ // 打印信息
System.out.println("名字 : " + name );
System.out.println("薪水 : " + salary);
}
public static void main(String args[]){ //程序执行入口
Employee empOne = new Employee("RUNOOB"); //创建实例
empOne.setSalary(); //访问
empOne.printEmp();
}
}
- 局部变量:类的方法中的变量
- 局部变量声明在方法、构造方法或者语句块中;
- 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
- 访问修饰符不能用于局部变量;
- 局部变量只在声明它的方法、构造方法或者语句块中可见;
- 局部变量是在栈上分配的。
- 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。示例:
package com.runoob.test; public class Test{
public void pupAge(){
int age = ; // 局部变量
age = age + ;
System.out.println("小狗的年龄是: " + age);
} public static void main(String args[]){
Test test = new Test();
test.pupAge();
}
}
Java 中 静态变量(类变量) 和 实例变量 区别
静态变量属于类,该类在不产生对象时,也可以通过类名就可以调用静态变量。
实例变量属于该类的对象,必须产生该类对象,才能调用实例变量。
在程序运行时的区别:
实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量;
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。 总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用!!
eg: 对于下面的程序,无论创建多少个实例对象,永远都只分配了一个 staticInt 变量,并且每创建一个实例对象,这个 staticInt 就会加 1;但是,每创建一个实例对象,就会分配一个 random,即可能分配多个 random ,并且每个 random 的值都只自加了1次。
public class StaticTest {
private static int staticInt = ;
private int random = ; public StaticTest() {
staticInt++;
random++;
System.out.println("staticInt = "+staticInt+" random = "+random);
} public static void main(String[] args) {
System.out.println(staticInt); //类变量:无需创建类对象(即,无需实例化),就可以直接访问
StaticTest test = new StaticTest();
StaticTest test2 = new StaticTest();
}
} /*输出结果为:
staticInt = 3 random = 3
staticInt = 4 random = 3 */
Pre-article: Java 学习(3):java 对象和类
Next:Java 学习(5):修饰符 运算符
Java 学习(4):基本数据类型,变量类型的更多相关文章
- java学习(二)--- 变量类型
变量声明 type identifier [ = value][, identifier [= value] ...] ; 局部变量: 1.局部变量声明在方法.构造方法.语句块中 2.局部变量在方法. ...
- 1 Java学习之 基本数据类型
1. 基本概念 数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式.接触每种语言的时候,都会存在数据类型的认识,有复杂的.简单的,各种数据类型都需要在学习 ...
- Java入门 - 语言基础 - 06.变量类型
原文地址:http://www.work100.net/training/java-variable-type.html 更多教程:光束云 - 免费课程 变量类型 序号 文内章节 视频 1 概述 2 ...
- Java学习之基本数据类型
基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型.它们是我们编程中使用最频繁的类型.java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为变量的初始化. 1. Java ...
- Java学习6——基本数据类型及其转换
Java常量: Java的常量值用字符串表示,区分不同的数据类型 整型常量123.浮点型常量3.14.字符常量'a'.逻辑常量true.字符串常量"helloworld". ps: ...
- 【原】Java学习笔记003 - 数据类型
package cn.temptation; public class Sample01 { public static void main(String[] args) { System.out.p ...
- [转]Java虚拟机是如何判断变量类型的
[原文]https://www.toutiao.com/i6591766777745637891/ 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java ...
- Java学习之基本数据类型和引用数据类型区别
JAVA中分为基本数据类型和引用数据类型区别一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存 ...
- Java连载76-基础数据类型包装类型及其方法简介
一.java中八种基本数据类型对应的包装类型 基本数据类型 包装类型 byte java.lang.Byte short ...
- Java学习 (七)基础篇 变量
变量 变量顾名思义,就是可以变化的量 Java是一种强类型语言,每个变量都必须声明其类型 Java变量是程序中最基本的存储单位,其要素包括变量名.变量类型和作用域 type varName [=val ...
随机推荐
- 学JAVA第二十四天,Set集合与StringBuilder
下面的内容需要慢慢看,因为,我的语言表达能力不是很好 首先说Set把,Set集合是一个无序且不允许重复的集合,而且查找效率也是快的可怕的. 但是,有些时候,我们必须要用储存多个相同的值时,Set也是可 ...
- 1. UI Tests简介
(1) User Interface Testing UI Testing库主要提供了与App中的UI元素进行查找和交互的能力,这使得我们可以通过验证UI元素的状态来测试App是否正常运行. ...
- UVa OJ 494
Kindergarten Counting Game Everybody sit down in a circle. Ok. Listen to me carefully. ``Woooooo, ...
- linux环境iptables配置
Linux iptables常用规则 设置一个自己用的表, 允许ping 允许ssh 允许 web 允许mysql 允许 ftp 允许dns查询 其他的拒绝.脚本如下 # Firewall confi ...
- 11G RAC环境数据库启动和关闭
一步启动Oracle (1) 启动整个集群 # ./crsctl start cluster -all -all选项启动整个集群. 不加-all选项只能启动本节点的服务. (2) 启动本节点集群 以下 ...
- 解决Homestead yarn , npm run dev, 命令报错问题!
解决Homestead yarn , npm run dev, 命令报错问题! 2018年06月01日 11:50:51 偶尔发发颠 阅读数:1654 版权声明:本文为博主原创,未经博主同意,不 ...
- python基础一 day2 字符串操作
s.capitalize() s.upper() s.lower() s.swapcase() s.title() s.center(20,"#") s.expand ...
- xshell通过xftp传输Windows文件到Linux:在输入put后,再摁 TAB 键,可显示当前文件夹的文件
在输入put后,再摁 TAB 键,可显示当前文件夹的文件 sftp:/home/yan> put $Recycle.Bin\ BluestacksCN\ ...
- jquery点击tr换背景颜色
jquery点击tr换tr的背景颜色,table的id为db-list1jQuery(function() { jQuery("#db-list1 tr").click( func ...
- C# string补位
参考:https://www.cnblogs.com/zhangqs008/archive/2012/02/01/2341078.html //1.1.左补位 "; , 'A'); //1. ...