Java基础02:类型转换、变量、常量
1.Java入门——介绍及安装2.Java基础01:注释、标识符、数据类型
3.Java基础02:类型转换、变量、常量
4.Java基础03:基本运算符5.Java基础04:包机制、JavaDoc生成文档6.Java流程控制01:Scanner对象7.Java流程控制02:顺序结构和选择结构8.Java流程控制03:循环结构9.Java方法10.Java数组01:数组的定义、声明、创建、初始化和内存分析11.Java数组02:数组使用、多维数组、冒泡排序和稀疏数组12.Java面向对象01:类与对象的关系、创建和初始化对象13.Java面向对象02:封装和继承14.Java面向对象03:抽象类、接口和内部类15.Java异常16.SpringBoot和微服务架构17.SpringBoot基础01:创建项目和编写HTTP接口18.SpringBoot基础02:自动装配原理、yaml语法和JSR-303数据校验19.SpringBoot基础03:静态资源和首页定制20.Java多线程01:什么是线程和线程的创建21.Java多线程02:静态代理模式和Lambda表达式22.Java多线程03:线程的五大状态23.Java多线程04:线程优先级、守护线程和线程同步24.Java多线程05:死锁、LOCK和线程协作25.网络编程基础01:网络编程概述、IP和端口26.网络编程基础02:TCP实现聊天和文件上传27.Java注解和反射01:注解28.Java注解和反射02:反射基本概述和获得Class类的几种方式29.Java注解和反射03:类加载30.Java注解和反射04:Class对象的使用Java基础02:类型转换、变量、常量
类型转换
由于Java是强类型语言,所以要进行有些运算的时候需要用到类型转换,运算中不同类型的数据先转化为同一类型,然后进行运算。
优先级从低到高排序:
byte->short->char->int->long->float->double
转换类型分为强制转换和自动转换
-
强制转换 :高优先级转换为低优先级时类型需要进行强制转换:(类型)变量名 优先级高->低
int i = 10; byte b = byte(i);
-
自动转换 :低优先级转换为高优先级时类型自动转换:优先级低->高
int i = 10; double c = i;
-
注意点
-
不能对布尔值进行转换
-
不能把对象类型转换为不相干的类型
-
在把高优先级转换为低优先级的时候需要进行强制转换
-
转换的时候可能存在内存溢出的问题或者精度问题
int i = 128; //int转byte类型强制转换 (类型)变量名 优先级高->低 byte b = (byte)i; //int转double类型自动转换 优先级低->高 double c = i; System.out.println(i);//输出128,正常输出 System.out.println(b);//输出-128,原因内存溢出 System.out.println(c);//输出128.0,正常输出 System.out.println((int)27.6);//double转int输出27,原因精度存在问题 System.out.println((int)-24.3f);//float转int输出-24,原因精度存在问题
-
操作比较大的数 时注意溢出的问题
int money = 10_0000_0000;//JDK7新特性,数字直接可以用下划线分割,不影响输出 int years = 20; int total = money*years; System.out.println(total);//输出-1474836480,溢出了 long total2 = money*years; System.out.println(total2);//输出-1474836480,自动转换之前数据已经存在问题了 long total3 = money*((long)years);//先把一个数转换为long System.out.println(total3);//正常输出20000000000
-
变量
-
变量是什么:可变化的量
-
Java是一种强类型语言,每个变量都必须声明其类型
-
Java变量是程序中最基本的储存单元,其要素包括变量名,变量类型和作用域
type varName [=value] [{,varName[=value]}]; //数据类型 变量名 = 值; 可以使用逗号隔开来声明多个同类型变量,建议别一次性声明多个同类型变量以提高程序可读性
注意事项
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型
- 变量名必须是合法的标识符
- 变量声明是一条完整的语句,因此每一个声明都必须以分号结束
变量作用域
变量作用域分为三种:
- 类变量:static关键字开头的变量,从属于当前类,建议前期定义变量和方法都加上static关键字方便调用
- 实例变量:从属于对象;如果不进行初始化,数值类型默认值为0,布尔类型默认值为false,除了基本类型,其余类的默认值都是null
- 局部变量:方法内部定义的变量,必须声明和初始化值
- 声明是向编译器介绍名字-标识符。它告诉编译器这个函数或变量在某处可以找到,它的模样像什么。而定义是说:“在这里建立变量”或“在这里建立函数”。它为名字分配存储空间。无论定义的是函数还是变量,编译器都要为他们在定义点分配存储空间。对于变量,编译器确定变量的大小,然后在内存中开辟空间来保存数据,对于函数,编译器会生产代码,这些代码最终也要占用一定的内存。基本类型变量的声明和定义(初始化)是同时产生的;而对于对象来说,声明和定义是分开的。
- 所谓定义就是(编译器)创建一个对象,为这个对象分配一块内存,并给他取上一个名字,这个名字就是我们常说的变量名或对象名。所谓声明就是告诉编译器,这个名字已经匹配到一块内存上,下面的代码用到变量或者对象是在别的地方定义的。声明可以出现多次。告诉编译器,这个名字已经被预定,别的地方再也不能用它来作为变量名或者对象名。
public class Variable{
static int allClicks = 0;//类变量,需要加static关键词
String str = "Hello World";//实例变量
public void method(){
int i = 0;//局部变量,必须初始化
}
}
常量
常量(Constant):初始化(initialize)后不能再改变的值!不会变动的值。可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。常量名一般使用大写字符。
final 常量名 = 值;
final double PI=3.14;
//static,final修饰符,不存在先后顺序
static final double PI = 3.14;
final static double PI1 = 3.15;
System.out.println(PI);//输出3.14
System.out.println(PI1);//输出3.15
实例变量、类变量、常量都属于成员变量;局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量
-
成员变量和局部变量的区别
-
定义的位置不一样
-
局部变量:在方法的内部
成员变量:在方法的外部,直接写在类当中
-
-
作用的范围不一样
- 局部变量:只有方法当中才可以使用,出了方法就不能再用了
成员变量:整个类都可以通用
- 局部变量:只有方法当中才可以使用,出了方法就不能再用了
-
默认值不一样
- 局部变量:没有默认值,如果要想使用,必须手动进行赋值
成员变量:如果没有赋值,会有默认值,规则和数组一样
- 局部变量:没有默认值,如果要想使用,必须手动进行赋值
-
内存位置不一样
- 局部变量:位于栈内存
成员变量:位于堆内存
- 局部变量:位于栈内存
-
生命周期不一样
- 局部变量:随着方法进栈而诞生,随着方法出栈而消失
成员变量:随着对象的创建而诞生,随着对象被垃而消失
- 局部变量:随着方法进栈而诞生,随着方法出栈而消失
-
变量命名规范
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则:monthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man,GoodMan
- 方法名:首字母小写和驼峰原则:run(),runRun()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通