Java learning_Day2(上)

本人学习视频用的是马士兵的,也在这里献上

<链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA>

提取码:fobs

内容

  • 标识符
  • 关键字
  • Java基本数据类型

标识符

凡是自己起的名字都算标识符

标识符命名规则:

  1. 由字母、下划线、美元符号或数字组成。
  2. 以字母、下划线、美元符号开头。
  3. 大小写敏感,长度无限制。
  4. 不能与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(上)的更多相关文章

  1. Asp.Net Mvc 使用WebUploader 多图片上传

    来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...

  2. [APUE]进程控制(上)

    一.进程标识 进程ID 0是调度进程,常常被称为交换进程(swapper).该进程并不执行任何磁盘上的程序--它是内核的一部分,因此也被称为系统进程.进程ID 1是init进程,在自举(bootstr ...

  3. 关于解决python线上问题的几种有效技术

    工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...

  4. PHP搭建大文件切割分块上传功能

    背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...

  5. 深入浅出Redis-redis底层数据结构(上)

    1.概述 相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-valu ...

  6. jquery.uploadify文件上传组件

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

  7. 在传统.NET Framework 上运行ASP.NET Core项目

    新的项目我们想用ASP.NET Core来开发,但是苦于我们历史的遗产很多,比如<使用 JavaScriptService 在.NET Core 里实现DES加密算法>,我们要估计等到.N ...

  8. .NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布

    众所周知,Red Hat和微软正在努力使.NET Core成为Red Hat企业版Linux (RHEL)系统上的一流开发平台选项.这个团队已经一起工作好几个月了,RHEL对.NET有许多需求.今天在 ...

  9. Windows 7上执行Cake 报错原因是Powershell 版本问题

    在Windows 7 SP1 电脑上执行Cake的的例子 http://cakebuild.net/docs/tutorials/getting-started ,运行./Build.ps1 报下面的 ...

随机推荐

  1. sublime text3 安装详解+前端插件

    1,下载sublime 3,地址:http://www.sublimetext.com/ 2,注册码:(在网上找的,感谢前辈)打开sublime3, help----add license---复制下 ...

  2. 10分钟快速搭建可用的springboot-web项目

    搭建步骤 工具准备 1. IntelliJ IDEA(开发工具,简称idea) 2. JDK1.8+ 3. MAVEN 4. mysql(数据库) 5. redis(session储存) 创建步骤 S ...

  3. C++ Primer抄书笔记(二)——变量和基本类型(下)

    四.const限定符[引用/指针/顶层/常量表达式] const对象值不变,必须初始化,能完成此type的大部分operation. 一般,多文件独立变量,编译初始化仅文件内有效: 除非,(条件:初值 ...

  4. 5.Android-电话拨号器详解

    之前学习了3.Android-ADT之helloworld项目结构介绍后,本章便来写个简单的电话拨号器程序. 实现的步骤如下所示: 1.创建项目 2.写layout/activity_main.xml ...

  5. DK1.5-JDK11各个新特性

    摘要: 参考文献: https://blog.csdn.net/lsxf_xin/article/details/79712537 JDK各个版本的新特性 要了解一门语言,最好的方式就是要能从基础的版 ...

  6. 【转载】structlog4j介绍

    源文章:structlog4j介绍 结构化日志对于日志的收集的作用挺大的,根据自身的业务场景,基于SLF4J实现了structlog4j. 相关引用 Gradle // 基础包 compile 'te ...

  7. python随用随学20200221-生成器中的send(),throw()和close()方法

    send()方法 文档定义 generator.send(value) Resumes the execution and "sends" a value into the gen ...

  8. .NET CORE(C#) WPF 抽屉式菜单

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. .NET CORE(C#) WPF 抽屉式菜单 阅读导航 本文背景 代码实现 本文参考 源码 ...

  9. vue中报错Do not use built-in or reserved HTML elements as component id details

    原因是定义了一个叫做details的comonent 跟现有的html网页中的标签重合 export default { name: 'details', data () { return { equ ...

  10. 折腾vue--vue自定义组件(三)

    1.创建组件  demo.vue,内容如下: <template> <div> <input type="button" :value="n ...