变量

变量(variable)可以理解为一个“有名称的容器”,用于装各种不同类型的数据。编程人员通过对变量的访问和修改,操作内存中的数据。

对变量的理解:https://www.cnblogs.com/tigerlion/p/10665321.html

Java是一种强类型(strongly typed)的语言,在编译时有严格的语法检查,需要为变量指定类型。

基本类型 整 型 byte 1byte
(基本类型) (整型) short 2byte
(基本类型) (整型) int 4byte
(基本类型) (整型) long 8byte
(基本类型) 浮点型 float 4byte
(基本类型) (浮点型) double 8byte
(基本类型) 字符型 char -
(基本类型) 布尔型 boolean -
引用类型 数 组 - -
(引用类型) 接 口 - -
(引用类型) - -

*byte类型的范围是-128127,即-2^72^7-1

*char类型相当于无符号整数类型,一般认为是2字节(Unicode),但此说法有争议。

*字符串不是基本类型,字符串是类,属于引用类型。

*引用类型变量就是指针,只是Java不使用指针的说法。

标识符

用于程序变量、类、方法命名的符号。

|-包括字母、0-9、_、$(美元符号)组成

|-字母包括A-Z、a-z、中文、日文等

|-数字不打头

|-不能含有空格和特殊字符(@、#等)

|-不能和关键字重复

※关于​$符号作为变量名

int $n=1;

Java 8 VS2012(C#.Net Framework 4.5) Dev C++(5.11@2015)
OK(有的Eclipse不支持) Err OK

命名规范

Java的命名一般遵循“驼峰标识”:每个单词首字母大写,另外——

|-类:首字符大写

|-变量:首字母小写

|-方法:首字母小写

命名要求:见名知意

整型和字符型

public class Test整型 {
public static void main(String[] args) {
// -------------------------------------------------
// ---进 制-------------------------------------------
// -------------------------------------------------
int n2 = 0B10;// 0B二进制(binary)(JAVA 7新增)
System.out.println("n1=" + n2);
int n8 = 010;// 0八进制(octal)
System.out.println("n8=" + n8);
int n10 = 10;
System.out.println("n10=" + n10);
int n16 = 0XF;// 0X十六进制(hexadecimal)
System.out.println("n16=" + n16);
// -------------------------------------------------
// ---真正的长整形,需要加L-------------------------------
// -------------------------------------------------
// 即使声明long类型,系统也是转换为int类型
// int类型的最大值是2147483647,当超过这个值时,系统不会自动转换,编译无法通过。
// 需要在数字末尾加L,以示其为long类型
long lo1 = 2147483648L;
System.out.println("lo1=" + lo1);
// -------------------------------------------------
long lo2 = 10_0000_0000L;// Java7开始,数值可以加下划线以看清位数
System.out.println("lo2=" + lo2);
// -------------------------------------------------
// ---字符类型-------------------------------------------
// -------------------------------------------------
char c1 = 97;// 可直接赋值ASCII码对应的数值
System.out.println("c1 = " + c1);
char c2 = '字';// 字符用单引号,不分中英文
System.out.println("c2 = " + c2);
char c3 = '\'';// 单引号、双引号、反斜线(\)等特殊符号前面加转移符【\】
System.out.println("c3 = " + c3);
}
}

n1=2

n8=8

n10=10

n16=15

lo1=2147483648

lo2=1000000000

c1 = a

c2 = 字

c3 = '

浮点数

public class TestVar {
public static void main(String[] args) {
// ------------------------------------------------------------------
double d1 = 100.1;// double是默认浮点类型
float f1 = 100.1F;// float就必须加F
// ------------------------------------------------------------------
double d2 = .123;// 整数位可以不写
System.out.println(d2);
double d3 = 321E2;// 科学计数法形式(只有浮点数可以使用)
System.out.println(d3);
// ------------------------------------------------------------------
// 浮点数遵循IEEE 754标准,并不能精确表示一个数
double d4 = 19.9;
System.out.println(d4 * 3);
// 一般算钱的时候可以转为整数再算,或者使用BigDecimal类型计算
int n4 = (int) (d4 * 100);
int calc = n4 * 3;
double d5 = calc / 100;
System.out.println(d5);
// ------------------------------------------------------------------
System.out.println("浮点数可以除0:" + 10_0000.0 / 0);// Infinity:无穷大
System.out.println("整数不行:" + 10_0000 / 0);
}
}

0.123

32100.0

59.699999999999996

59.0

浮点数可以除0:Infinity

Exception in thread "main" java.lang.ArithmeticException: / by zero

at TestVar.main(TestVar.java:22)


类型转换

自动转换

转换条件

|--类型兼容

|--目标类型大于源类型

byte→ short→ int→ long→ float→ double
↑char

下图是合法的数据类型之间的转换,

6个实心箭头代表无损转换,3个虚线代表有可能丢失精度

public class 自动转换 {
public static void main(String[] args) {
byte _byte = 1;
char _char = 2;
short _short = _byte;
int _int = _short;
_int = _char;
long _long = _int;
float _float = _long;
double _double = _float;
}
}

强制类型转换:目标类型加括号,可能造成数据丢失,称为“缩小转换”。

		double d = 9.9;
int n = (int)d;

编译器自动强转:

对于byte/short/char三种类型,如果等号右侧数值没有超过范围,编译器自动补上(xxx)。

int及更长的类型无需转换,因为右值默认是int型。

public class 编译器优化 {
public static void main(String[] args) {
System.out.println(" = " + System.getenv("JAVA_HOME"));
byte b1 = 127;// 右侧整数没有超过左侧类型范围,编译通过
byte b2 = 128;// 超过范围,编译失败:cannot convert from int to byte
byte b3 = 128 - 1;// 编译通过
byte b4 = b1 - 1;// 如果变量参与计算,编译器拒绝优化:cannot convert from int to byte
}
}

Java基础教程——变量的更多相关文章

  1. Java基础教程(5)--变量

    一.变量 1.变量的定义   正如上一篇教程<Java基础教程(4)--面向对象概念>中介绍的那样,对象将它的状态存在域中.但是你可能仍然有一些疑问,例如:命名一个域的规则和惯例是什么?除 ...

  2. Java基础教程(18)--继承

    一.继承的概念   继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...

  3. Java基础教程(12)--深入理解类

    一.方法的返回值   当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...

  4. Java基础教程:注解

    Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...

  5. Java基础教程:泛型基础

    Java基础教程:泛型基础 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚 ...

  6. Java基础教程:多线程基础(1)——基础操作

    Java:多线程基础(1) 实现多线程的两种方式 1.继承Thread类 public class myThread extends Thread { /** * 继承Thread类,重写RUN方法. ...

  7. Java基础教程:反射基础

    Java基础教程:反射基础 引入反射 反射是什么 能够动态分析类能力的程序称为反射. 反射是一种很强大且复杂的机制. Class类 在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时 ...

  8. Java基础教程:面向对象编程[2]

    Java基础教程:面向对象编程[2] 内容大纲 访问修饰符 四种访问修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default ...

  9. Java基础教程:面向对象编程[1]

    Java基础教程:面向对象编程 内容大纲 Java语言概述 Java语言特点 1.Java为纯面向对象的语言,它能够直接反映现实生活中的对象.总之,Everything is object! 2.平台 ...

随机推荐

  1. D. Tavas and Malekas 解析(字串匹配)

    Codeforce 535 D. Tavas and Malekas 解析(字串匹配) 今天我們來看看CF535D 題目連結 題目 給你一個字串$p$和一些$index$代表字串$p$在哪些位置會和長 ...

  2. ZooKeeper CentOS7上安装

    下载http://www.apache.org/dyn/closer.cgi/zookeeper(我下的是zookeeper-3.4.14) 1.创建 /usr/local/services/zook ...

  3. 将java的jar包,打包为rpm 安装包

    一.rpm包 介绍 RPM Package Manager (RPM) 是一个强大的命令行驱动的软件包管理工具,用来安装.卸载.校验.查询和更新 Linux 系统上的软件包 二.环境安装 一台cent ...

  4. K近邻算法:机器学习萌新必学算法

    摘要:K近邻(k-NearestNeighbor,K-NN)算法是一个有监督的机器学习算法,也被称为K-NN算法,由Cover和Hart于1968年提出,可以用于解决分类问题和回归问题. 1. 为什么 ...

  5. Luogu P6815 [PA2009]Cakes

    题意 给定一个 \(n\) 个点 \(m\) 条边的图,点 \(i\) 有权值 \(a_i\),一个三元环 \((i,j,k)\) 的贡献为 \(\max(a_i,a_j,a_k)\),求所有三元环的 ...

  6. Redis还可以做哪些事?

    在上一篇文章中,讲到了redis五大基本数据类型的使用场景,除了string,hash,list,set,zset之外,redis还提供了一些其他的数据结构(当然,严格意义上也不算数据结构),一起来看 ...

  7. Kubernetes YAML最佳实践和策略

    Kubernetes工作负载最常用YAML格式的文件来定义. YAML的问题之一就是很难描述清单文件之间的约束或关系. 如果你希望检查是否已从受信任的注册表中提取部署到群集中的所有映像,该怎么办? 如 ...

  8. 深入理解golang:内存分配原理

    一.Linux系统内存 在说明golang内存分配之前,先了解下Linux系统内存相关的基础知识,有助于理解golang内存分配原理. 1.1 虚拟内存技术 在早期内存管理中,如果程序太大,超过了空闲 ...

  9. python的高阶函数(map,filter,sorted,reduce)

    高阶函数 关注公众号"轻松学编程"了解更多. 1.MapReduce MapReduce主要应用于分布式中. 大数据实际上是在15年下半年开始火起来的. 分布式思想:将一个连续的字 ...

  10. JavaWeb项目问题记录

    模板 [遇到的问题] [时间] [原因] [解决方案] [排查思路及方式] 思路: 1) 2) [遇到的问题] 品优购项目中运营商页面查询广告信息是,无法正常查询,错误如下: Failed to lo ...