JavaDay2(上)
Java learning_Day2(上)
本人学习视频用的是马士兵的,也在这里献上
<链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA>
提取码:fobs
内容
- 标识符
- 关键字
- Java基本数据类型
标识符
凡是自己起的名字都算标识符
标识符命名规则:
- 由字母、下划线、美元符号或数字组成。
- 以字母、下划线、美元符号开头。
- 大小写敏感,长度无限制。
- 不能与Java语言的关键字重名。

关键字
- 赋以特定的含义,用作专门的用途的字符串。
大多数编辑器会将关键字用特殊方式标出(如高亮)。 - 所有Java关键字都是小写英文。
- goto和const虽然从未使用,但也作为Java关键字保留。
Java部分常用关键字

Java常量
Java的常量用字符串表示,区分为不同的数据类型。

***注意区分字符常量 '' 和字符串常量 "" ***
另外,常量还可以指那些被 final 修饰的,不可变的变量
Java变量
Java变量是程序中最基本的存储单元,要素包括变量名,变量类型和作用域。
每一个变量都属于特定的数据类型,在使用前必须对其声明,格式如下:
type varName [=value]

注意:上图中语句 double d1, d2, d3 = 0.123 只对d3赋了初值0.123
从本质上讲,变量其实就是内存中的一小块区域,使用变量名来访问这块区域

Java变量的分类
按被声明的的位置划分:
1. 局部变量:方法(包括方法的参数)或语句块内部定义的变量。
2. 成员变量:方法外部、类的内部定义的变量。
注意:类外面不能有变量的声明

按所属的数据类型划分:
1. 基本数据类型变量(4类8种)
- 逻辑型-boolean
- 文本型-char
- 整数型-byte,short,int,long
- 浮点数型-float,double
2. 引用数据类型变量

基本数据类型的转换
- boolean类型不可以转换为其他的数据类型。
- 整形,字符型,浮点型的数据在混合运算中相互转换,遵循以下原则:
- 容量小的类型自动转换为容量大的数据类型,容量从小到大排序为:
- byte,short,char < int < long <float < double
- byte,short,char之间不会相互转换,三者在计算是首先转换为int类型
- 容量大的数据类型准换为容量小的数据类型时,要加上强制类型转换符,但可能造成精度降低或溢出。
- 多种类型的数据混合运算是,系统首先自动的将所有数据装换为容量最大的数据类型,然后再进行计算。
- 实数常量(如:
1.2)默认为double。 - 整数常量(r如:
123)默认为int。
- 容量小的类型自动转换为容量大的数据类型,容量从小到大排序为:
以下面的代码为例:
public class Convert {
public static void main(String[] args) {
int i1 = 123;
int i2 = 456;
double d1 = (i2+i2)*1.2; //系统将自动转换为double型进行运算
float f1 = (float) ((i1+i2)*1.2) //因为系统会自动转换为double型进行运算,
//所以需要加强制转换符(float)
byte b1 = 1;
byte b2 = 2;
byte b3 = (byte)(b1+b2); //因为系统会自动转换为int型进行运算,
//所以需要加强制转换符(byte)
byte b4 = 67;
byte b5 = 89;
byte b6 = (byte)(b4+b5); //相加后为156,超过byte的上限128。但不会出错,
//结果为-100
double d2 = 1e200; //科学计数法,等于浮点数1.0*10^200,在cmd中输出1.0E200
float f2 = (float)d2; //会产生溢出
float f3 = 1.23f //浮点数默认为double,所以此处必须加f
long l1 = 123;
long l2 = 1234567890000L; //整数默认为int, 此处超出int型范围,
//所以必须加L或l
float f = l1+l2+l3; //float容量比long大,系统将自动转换为float型进行计算
long l = (long)f; //强制转换会舍去小数部分(不是四舍五入)
}
}
对于上述代码中byte b6为什么结果为-100,详见:[Day2_关于byte的溢出问题](file:///F:/github/JavaFile/JavaBasic/JavaSEBasic/Day2_关于byte的溢出问题.md)
通过上面的学习,基本数据类型的转换就基本掌握了,下面是实战练习
public class method { //指出编译时可能产生编译错误或计算溢出的部分
public static void main(String[] args) {
int i = 1, j;
float f1 = 0.1; float f2 = 123;
long l1 = 12345678, l2 = 888888888888;
double d1 = 2e20, d2 = 124;
byte b1 = 1, b2 = 2, b3 = 129;
j = j+10;
i = i/10;
i = i*0.1;
char c1 = 'a', c2 = 125;
byte b = b1-b2;
char c = c1+c2-1;
float f3 = f1+f2;
float f4 = f1+f2*0.1;
double d = d1*i+j;
float f = (float)(d1*5+d2);
}
}
个人的解析
public class method {
public static void main(String[] args) {
int i = 1, j; //正确
float f1 = 0.1; float f2 = 123; //前一句由于0.1默认为double,改为float f1 = 0.1f或者float f1 = (float)0.1;
//后一句由于123默认为int,自动转换为float,故正确
long l1 = 12345678, l2 = 888888888888; //前半句正确,后半句由于默认为int,产生溢出,改为l2 = 888888888888L
double d1 = 2e20, d2 = 124; //正确,前半句2e20默认为double,后半句124默认为int,自动转换为double
byte b1 = 1, b2 = 2, b3 = 129; //最后半句错误,byte的范围为-128~127,默认129为int,转换为byte提示精度损失,改为b3 = (byte)129
j = j+10; //错误,j未赋初值
i = i/10; //正确,舍去计算结果的小数位,最终输出为0
i = i*0.1; //错误,i*0.1自动转换为float,产生精度损失,改为i = (int)(i*0.1)
char c1 = 'a', c2 = 125; //前半句正确,后半句125默认为int,无法与char自动转换,改为c2 = (char)125
byte b = b1-b2; //错误,b1-b2自动转换为int运算,转换为byte产生精度损失,改为b = (byte)(b1-b2)
char c = c1+c2-1; //错误,char与int型无法相互转换,改为char c = (char)(c1+c2-1)
float f3 = f1+f2; //正确
float f4 = f1+f2*0.1; //错误,f1+f2*0.1自动转换为double运算,产生精度损失,改为float f4 = (float)(f1+f2*0.1)
double d = d1*i+j; //正确(假设j有初值)
float f = (float)(d1*5+d2); //正确
}
}
JavaDay2(上)的更多相关文章
- Asp.Net Mvc 使用WebUploader 多图片上传
来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...
- [APUE]进程控制(上)
一.进程标识 进程ID 0是调度进程,常常被称为交换进程(swapper).该进程并不执行任何磁盘上的程序--它是内核的一部分,因此也被称为系统进程.进程ID 1是init进程,在自举(bootstr ...
- 关于解决python线上问题的几种有效技术
工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...
- PHP搭建大文件切割分块上传功能
背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...
- 深入浅出Redis-redis底层数据结构(上)
1.概述 相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-valu ...
- jquery.uploadify文件上传组件
1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...
- 在传统.NET Framework 上运行ASP.NET Core项目
新的项目我们想用ASP.NET Core来开发,但是苦于我们历史的遗产很多,比如<使用 JavaScriptService 在.NET Core 里实现DES加密算法>,我们要估计等到.N ...
- .NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布
众所周知,Red Hat和微软正在努力使.NET Core成为Red Hat企业版Linux (RHEL)系统上的一流开发平台选项.这个团队已经一起工作好几个月了,RHEL对.NET有许多需求.今天在 ...
- Windows 7上执行Cake 报错原因是Powershell 版本问题
在Windows 7 SP1 电脑上执行Cake的的例子 http://cakebuild.net/docs/tutorials/getting-started ,运行./Build.ps1 报下面的 ...
随机推荐
- JMeter接口测试-如何循环使用接口返回的多值?
前言 在用JMeter做接口测试的时候,经常会遇到这样一种情况:一个接口请求返回了多个值,然后下一个接口想循环使用前一个接口的返回值:第二种情况:只想循环请求前一个接口返回值中的随机不定长度的某一些值 ...
- web渗透之XSS基本介绍
想学XSS必须得有基本得JS知识 JS基础BOM XSS漏洞原理 XSS(Cross Site Script),全称跨站脚本攻击.它指的是攻击者往web页面或者url里插入恶意JavaScript脚本 ...
- MS14-068提权和impacket工具包提权
ms14-068提权 工具利用 a)拿下边界机win7,并已经有win7上任意一个账号的密码 -u 用户名@域 -p 用户密码 -s 用户sid -d 域控 ms14-068.exe -u test3 ...
- cesium1.65api版本贴地贴模型标绘工具效果(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- RxHttp 让你眼前一亮的Http请求框架
1.前言 RxHttp在今年4月份一经推出,就受到了广大Android 开发者的喜爱,截止本文发表在github上已有1100+star,为此,我自己也建个RxHttp&RxLife 的群(群 ...
- 关于Redis缓存预热的思考
系统上线时,提前将相关的缓存数据直接加载到缓存系统.避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题. 这里我考虑2个问题: A.哪些数据需要预热? B.如何预热? 关于问题A,根据不同的业 ...
- python 學習深淺拷貝、集合、、作用域、函數
python 學習深淺拷貝.集合..作用域.函數 2020開年新冠肺炎流行大部分人員.工廠.單位無法復工生產,人員隔離每天外出都要戴口罩,在家隔離期間悶壞了感覺把半年的口糧都幹掉了,嚴重考察大家的資本 ...
- Git 学习文档
Study Document for Git Git 基础 Git 文件的三种状态: 已提交(committed).已修改(modified)和已暂存(staged). Git 工作目录的状态: 已跟 ...
- 吴裕雄--天生自然 R语言数据可视化绘图(2)
par(ask=TRUE) opar <- par(no.readonly=TRUE) # save original parameter settings library(vcd) count ...
- 题解【CF1311F Moving Points】
\[ \texttt{Preface} \] 赛时,把 " 任意时刻 " 理解成 " 整数时刻 " 了,看起来一脸不可做的亚子,还各种推式子. 话说我为什么觉得 ...