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 报下面的 ...
随机推荐
- 前端开发中的一些tips(持续更新)
本文记录分享一些在日常开发中经常遇到的一些问题的解决方案及常用小技巧,如有错误之处还请批评指正.CSS相关:1.如何修改chrome记住密码后自动填充表单的黄色背景? input:-webkit-au ...
- Linux运维---1.Ceph分布式存储架构及工作原理
Ceph理论 Ceph 简介 Ceph 是一个开源项目,它提供软件定义的.统一的存储解决方案 .Ceph 是一个具有高性能.高度可伸缩性.可大规模扩展并且无单点故障的分布式存储系统 . Ceph 是软 ...
- 我不知道的js(一)作用域与闭包
作用域与闭包 作用域 什么是作用域 作用域就是一套规则,它负责解决(1)将变量存在哪儿?(2)如何找到变量?的问题 作用域工作的前提 谁赋予了作用域的权利?--js引擎 传统编译语言编译的过程 分词/ ...
- 最新咕咆+鲁班+图灵+享学+蚂蚁+硅谷+源码 Java架构师资料《Java架构师VIP课程》
最新的Java架构师完整资料,完整视频+源码+文档. 每一套都是一百多个G的资料,无密. JAVA架构师全套课程 咕泡学院互联网架构师第一期 咕泡学院互联网架构师第二期 咕泡学院互联网架构师第三期 博 ...
- 第一天,初学Markdown
Markdown学习 二级标题 三级标题 字体 hello,world hello,world hello,world hello,world 引用 飞冲 分割线 图片 超链接 跳转到安徽科技学院 列 ...
- Html介绍,标签的语法
1.标签由英文"<"和">"括起来组成,如<html>就是一个标签2.html中的标签一般都是成对成对出现的,分为开始标签和结束标签.结 ...
- 0.5 Linux的联通性命令汇总
linux下网络端口连通性测试命令汇总 一.telnet ip port 1.1 安装: 安装telnet服务 [centos.ubuntu]安装telnet命令的方法.] yum list teln ...
- Mac 下如何判断 WIFI 的极限传输速度还有信号强度?
每当你加入一个无线网络后,按住Option键并点击屏幕右上角的Wi-Fi图标,就会发现除了平常的各种网络外,还出现了关于网络连接技术细节的列表. 比如说,如果想知道信号强度的信息,则需要尤其关注列表中 ...
- idea将普通项目转换为maven项目
方式一 1.在项目根目录下,新建文件 pom.xml,并填写好内容. 2.在pom.xml文件上,右键 Add as Maven Project 或 在项目上,右键 Add Framework Sup ...
- Linux /etc/network/interfaces
Linux下/etc/network/interfaces文件用来配置网络接口. 1. 使用动态IP地址 auto eth0 iface eth0 inet dhcp 2. 使用静态IP地址 auto ...