Java变量与数据类型

一、变量

1、变量的引出

例1:编写一个程序,计算半径为5的圆面积。

问题:

  1. 圆面积求法,Area = Π * r2 (Π取3.14)
  2. 程序写法
//文件名:  CicleArea.java (下同)
 public class CicleArea{
  
  public static void main(String[] args){
  
  System.out.println(3.14 * 5 * 5);
  
     }
 }



执行结果:




java 实体类怎样设置返回枚举值 java返回数据类型_java 实体类怎样设置返回枚举值


注释

观察代码发现运行没问题,但是代码不具有可读性,作为一名合格的程序员写代码必不可少的就是注释。

注释:就是对代码的解释和说明。其目的是让人们能够更加轻松地了解代码。为代码添加注释,是十分必须要的,它不影响程序的编译和运行。也就是说注释是不会参与运行的。


java 实体类怎样设置返回枚举值 java返回数据类型_java 数据类型_02


程序员圈有一个笑话 最讨厌在写代码的时候写注释, 最讨厌别人的代码里面不写注释

代码注释是架起程序设计者与程序阅读者之间的通信桥梁,最大限度的提高团队开发合作效率。也是程序代码可维护性的重要环节之一。
原则: 1、注释形式统一 在整个应用程序中,使用具有一致的标点和结构的样式来构造注释。如果在其它项目中发现它们的注释规范与这份文档不同,按照这份规范写代码,不要试图在既成的规范系统中引入新的规范。 2、注释内容准确简洁 内容要简单、明了、含义准确,防止注释的多义性,错误的注释不但无益反而有害。
注释条件:
1、基本注释(必须加) (a) 类(接口)的注释 (b) 构造函数的注释 (c) 方法的注释 (d) 全局变量的注释 (e) 字段/属性的注释 备注:简单的代码做简单注释,注释内容不大于10个字即可,另外,持久化对象或VO对象的getter、setter方法不需加注释。具体的注释格式请参考下面举例。
2、特殊必加注释(必须加) (a) 典型算法必须有注释。 (b) 在代码不明晰处必须有注释。 (c) 在代码修改处加上修改标识的注释。 (d) 在循环和逻辑分支组成的代码中加注释。 (e) 为他人提供的接口必须加详细注释。 备注:此类注释格式暂无举例。具体的注释格式自行定义,要求注释内容准确简洁。
注释格式: 1、单行(single-line)注释: //…… 2、块(block)注释: /*……*/ 3、文档注释: /**……*/ 4、javadoc 注释标签语法 @author 对类的说明标明开发该类模块的作者 @version 对类的说明标明该类模块的版本 @see 对类、属性、方法的说明参考转向,也就是相关主题 @param 对方法的说明对方法中某参数的说明 @return 对方法的说明对方法返回值的说明 @exception 对方法的说明对方法可能抛出的异常进行说明
注:以上对注释的解释来自 https:// zhidao.baidu.com/questi on/226829285.html

问题:

  • 如果此时又需要求半径为10的圆面积呢?
    答:我们需要将 5 改为10,对吧,还挺简单的,只需要改两下,是吧??
  • 那么如果是一个底面半径为10,高为5的圆柱体的体积呢?(V = Π * r2 * h),代码如下:
// CylindricalVolume.java 
 
 //圆柱体体积类
 public class CylindricalVolume{
  
  public static void main(String[] args){
  //打印圆柱体体积
  System.out.println(3.14 * 10 * 10 * 5);
  
     }
 }


  • 现在需要打印圆柱体体积、圆柱体的底面积??怎么做?要如下写吗?
// Cylindrical.java
 
 //圆柱体类
 public class Cylindrical{
  
  public static void main(String[] args){
  //打印圆柱体底面积
  System.out.println(3.14 * 10 * 10);
  //打印圆柱体体积
  System.out.println(3.14 * 10 * 10 * 5);
  
     }
 }


显然这样是不行的,这时我们需要一个用一个东西来存储圆的面积。这就是变量。

2、变量的定义

结论:变量是内存中装载数据的小盒子,你只能用它来存数据和取数据。

变量定义的格式包括三个要素:数据类型变量名数据值 。 格式:


数据类型 变量名 = 数据值;


3、变量名与标识符

变量名:变量的名字。

标识符:是指在程序中,我们自己定义内容。比如类的名字、方法的名字和变量的名字等等,都是标识符。

java中变量的命名需要满足标识符的规则与规范。

  1. 标识符的规则
  • 变量名首字母必须为字母(a-z A-Z),下划线(_),或者美元符号($)开始;
  • 变量名只能是字母(a-z A-Z),数字(0-9),下划线(_)的组合,并且之间不能包含空格,数字不能放在变量名首位;
  • 变量名不能使用编程语言的关键字或保留字;
  • 标识符是严格区分大小写的。

标识符的规范

  • 类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。如:HelloWorld
  • 方法名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。如:stuNum
  • 变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。
  • 常量名规范:全部大写,单词之间用下划线(_)。如:MAX_SIZE
  • 所有命名最后可以见名知意。如:用age 表示年龄

4、数据类型

数据类型分类

Java的数据类型分为两大类:

  • 基本数据类型:包括 整数浮点数字符布尔
  • 引用数据类型:包括 数组接口Lambda

基本数据类型

四类八种基本数据类型:


java 实体类怎样设置返回枚举值 java返回数据类型_java 数据类型_03


注意事项:
1.字符串类型是引用数据类型,不是基本数据类型 2.Java中的默认类型:整数类型是 int 、浮点类型是 double 。 3.小数是一个无限趋近的数,并非精确值 4.数据范围不一定是字节越大范围越大

5、变量的分类

局部变量、成员变量、静态变量的区别:


java 实体类怎样设置返回枚举值 java返回数据类型_java 万能打印模块_04


6、使用变量

练习

定义所有基本数据类型的变量,代码如下:


public class Variable {
     public static void main(String[] args){
         // 定义字节型变量
         byte b = 127;
         System.out.println(b);
         // 定义短整型变量
         short s = 100;
         System.out.println(s);
         // 定义整型变量
         int i = 123456;
         System.out.println(i);
         // 定义长整型变量
         long l = 1234567890L;
         System.out.println(l);
         // 定义单精度浮点型变量
         float f = 5.5F;
         System.out.println(f);
         // 定义双精度浮点型变量
         double d = 10.5;
         System.out.println(d);
         // 定义布尔型变量
         boolean bool = true;
         System.out.println(bool);
         // 定义字符型变量
         char c = 'A';
         System.out.println(c);
     }
 }


回到问题3(现在需要打印圆柱体体积、圆柱体的底面积??怎么做?),此时可以将代码编写如下:


// Cylindrical.java
 
 //圆柱体类
 public class Cylindrical{
     
     public static void main(String[] args){
         //圆柱体底面圆的半径
         double radius = 10.0;
         //圆柱体的高
         double height = 5.0;
         //圆柱体的底面积
         double area = 3.14 * radius * radius;
         //圆柱体的体积
         double volume = area * height;
         //打印圆柱体底面积
         System.out.println(area);
         //打印圆柱体体积
         System.out.println(volume); 
     }
 }


观察发现,比以前还多了几条语句,可能想说,这不是变复杂了吗??真的是这样吗?不是的,此时程序的扩展性极强,如果条件(半径、高)再发生改变,只需相应修改radius(半径)、height(高)的值即可。而不需要替换所有的数据,如果在替换所有数值时,漏改、写错都会得不到我们想要的结果。并且以后代码远远不会就这么几行解决,10处以内的修改还好,那么50处,100处呢?

此时还有一个问题:

  1. 如果此时要将圆周率设为3.1415926,怎么写?同样如果Π要多次引用,每次都写这么长的值?
    答:可以用变量pi表示吗?感觉是可以,实际测试后发现也可以。但是变量有什么点?变量是在程序运行过程中,其值可以发生改变的量,那么如果pi的值被改变,那么结果还有效吗?这时我们需要一个变量来存储pi,又不希望它可以被改变,那就用常量。

二、常量

常量:是指在Java程序中固定不变的数据。

1、分类

字面值常量:


java 实体类怎样设置返回枚举值 java返回数据类型_bool类型返回值_05


自定义常量: 被final修饰的变量为常量

再次修改后的代码:


// Cylindrical.java
 
 //圆柱体类
 public class Cylindrical{
     
     public static void main(String[] args){
         //圆周率PI
         final double PI = 3.1415926;
         //圆柱体底面圆的半径
         double radius = 10.0;
         //圆柱体的高
         double height = 5.0;
         //圆柱体的底面积
         double area = 3.14 * radius * radius;
         //圆柱体的体积
         double volume = area * height;
         //打印圆柱体底面积
         System.out.println(area);
         //打印圆柱体体积
         System.out.println(volume); 
     }
 }


2、练习

需求:输出各种类型的常量。


public class ConstantDemo {
     public static void main(String[] args){
         // 输出整数常量
         System.out.println(1);
         // 输出小数常量
         System.out.println(0.1);
         // 输出字符常量
         System.out.println('A');
         // 输出布尔常量
         System.out.println(false);
         // 输出字符串常量
         System.out.println("Hello Java!!!");
     }
 }


三、数据类型转换

1、定义

boolean类型不参与类型转换

2、自动转换

一个byte 类型变量赋给一个int类型变量, 结果会是什么数据类型?


byte b1=121;
 //自动类型提升
 int i1=b1;


运算结果,变量的类型将是int 类型,这就是出现了数据类型的自动类型转换现象。

自动转换:将取值范围小的类型自动提升为取值范围大的类型

  • 从小到大
  • byte,short,char --> int long float double
  • byte,short,char之间是平级的,不相互转换,直接转成int类型参与运算。
public static void main(String[] args) {
     int i = 1;
     byte b = 2;
     // byte x = b + i; // 报错
     //int类型和byte类型运算,结果是int类型
     int j = b + i;
     System.out.println(j);
 }


3、强制转换

i (120) 赋值到short 类型变量会发生什么?产生编译失败,肯定无法赋值。


public static void main(String[] args) {
     int i = 120;
     short s = i; // 报错
     System.out.println(s);
 }


java 实体类怎样设置返回枚举值 java返回数据类型_java 数据类型_06


这是为什么?120short的取值范围内,为什么报错?因为数据类型,i是一个整型变量(注意,变量是在程序运行过程中可以改变的,此时i = 120,后面有没有可能是1000或者10000,这时i的值远大于short的取值范围)内存4个字节,而short是短整型内存2个字节,可以理解为int 是4升的水壶,short 是2升的水壶,不能把大水壶中的水直接放进小水壶去。想要赋值成功,只有通过强制类型转换,将int 类型强制转换成short 类型才能赋值。

转换格式:


数据类型 变量名 = (数据类型)被转数据值;


public static void main(String[] args) {
     int i = 120;
     short s = (short)i;
     System.out.println(s);
 }


java 实体类怎样设置返回枚举值 java返回数据类型_bool类型返回值_07


注意:强制转换可能会损失精度。如下:


public static void main(String[] args) {
         double d=5.99;
         int i=(int)d;
         System.out.println(i);
     }


java 实体类怎样设置返回枚举值 java返回数据类型_java 实体类怎样设置返回枚举值_08


观察结果发现,有精度的损失。但是它有一个取整的效果。

四、赋值问题

byte、short、char赋值注意事项:

只要在其范围内的常量就能成功赋值。赋值需要满足两个条件:

  1. 在其(byte、short、char)取值范围内
  2. 常量

继续研究将i (120) 赋值到short 类型变量会发生什么?产生编译失败,肯定无法赋值。


public static void main(String[] args) {
     int i = 120;
     short s = i; // 报错
     System.out.println(s);
 }


条件一:满足short的取值范围吗?满足

条件二:满足常量吗?不满足,赋值失败,报错。

将代码修改如下:


public static void main(String[] args) {
     //int i = 120;
     short s = 120;
     System.out.println(s);
 }


java 实体类怎样设置返回枚举值 java返回数据类型_bool类型返回值_09


没有任何的问题,字面值常量可以,那么自定义常量可以吗?我们试一下。


java 实体类怎样设置返回枚举值 java返回数据类型_java 实体类怎样设置返回枚举值_10


编译运行,如图所示:


java 实体类怎样设置返回枚举值 java返回数据类型_bool类型返回值_07


完全可以,这表示byte、short、char赋值:只要在其范围内的 常量 就能成功赋值。