Java学习日记——基础篇(二)基本语法
变量
变量和常量是程序处理的两种基本数据对象,变量是程序的基本组成单位
变量的目的就是确定目标并提供存放空间
public class Hello
{
public static void main(String args[])
{
int a=10; //定义一个变量,并赋值
int b=20;
int result=a+b; //变量之间的运算
System.out.println("结果是"+result);
}
}
运行结果:
D:\myJavaDemo>javac -encoding UTF-8 Hello.java D:\myJavaDemo>java Hello
结果是30
基本数据类型
补码
程序在运行的时候都是用补码运行的,同样计算出的结果也是补码,
- 0的原码和补码都是0,
- 正数的补码是其本身的二进制形式,
- 负数的补码需要先将其绝对值按位取反(取得的结果叫做反码),再 +1。
比如 - 3 ,就是先将 1000 0011 按位取反(除了符号位),得到 1111 1100 ,在 +1 得到 1111 1101
java有四大基本数据类型:整数类型,浮点类型,布尔类型,字符类型
整数类型
整数类型可以表示一个整数,常用的整数类型有:byte,short,int,long
计算机中的信息存储单位:
- 最小是bit,也就是位——表示0/1
- 1 字节(Byte / B) == 8 位(bit)
- 1 KB == 1024字节(B) == 2^10B
- 1 MB == 1024KB == 1024 * 1024字节 == 2^20B
- 1 GB == 1024MB == 2^30B
他们之间的区别主要是大小
- byte 一个字节————(-128-127)
- short 两个字节————(-32768-32767)
- int 四个字节————(........)
- long 八个字节————(........)
数字的范围是如何计算出来的呢?
计算公式:
最高位是符号位(0表示正数,1表示负数),所以一个字节中的8位只有7位可以用,最大的数为
- 0111 1111 —— 2^7 - 1 == 127
- 1111 1111 —— - (2^7 - 1) == -127
但是最小为什么是 -128 呢?这就体现出印度人的聪明来了,因为是印度人发明的
- 0000 0000 —— 表示的是 0
- 1000 0000 —— 表示的是 -0
这不就浪费了一个数了吗,所以人们就把 - 0 看成 -128,
- [-128] 原码 = 1000 0000 —— 发生了溢出(二进制形式是1000 0000,恰巧和符号位一样都是1不要误解),反码1000 0000是省略了最前面的1,因为溢出
- [-128] 反码 = 1111 1111 —— 最高位是符号位所以不会改变,其余取反
- [-128] 补码 = 1000 0000 —— 反码 + 1,符号位不会受到影响
1 + 3 的计算过程(运算结果也为补码)
- 原码为:0000 0001 + 0000 0011
- 补码为:0000 0001 + 0000 0011 = 0000 0100
- 运算结果也是补码,但是符号位是0,一个正数,原码就是它本身0000 0100 ==
1 + -3 的计算过程
- 原码为:0000 0001 + 1000 0011
- 补码为: 0000 0001 + (1111 1100 + 1) = 0000 0001 + 1111 1101 = 1111 1110
- 符号位为1说明是一个负数,转换为原码得(1111 1110 - 1,再取反)1000 0010 == -2
1 + (-128) 计算机的计算过程为
- 原码:0000 0001 + 1000 0000
- 转换为补码: 0000 0001 + 1000 0000 == 1000 0001
- 1000 0001 的符号位为1,是负数,转换成原码为(1000 0001 - 1,再取反)1111 1111 == -127
- -127的原码为 1111 1111 , 补码为 1000 0000 + 1 = 1000 0001
- 127的原码为 0111 1111 ,补码为 0111 1111
神奇的事情就是,把-0在取反码进行计算后,结果就是用128进行计算的值!!!
用程序验证byte型的大小
public class Hello
{
public static void main(String args[])
{
byte bytel = 127;
}
} //程序可以正常运行 public class Hello
{
public static void main(String args[])
{
byte bytel = 128;
}
} //报错会损失精度
D:\myJavaDemo>javac -encoding UTF-8 Hello.java
Hello.java:6: 错误: 不兼容的类型: 从int转换到byte可能会有损失
byte bytel = 128;
^
1 个错误
现有的数据结构不够大的时候,可以用链表,字符数组,字符串来解决这样的问题
浮点类型
浮点类型可以表示一个小数,常用的浮点类型有:float,double(单精度,双精度),他们的区别主要是数据大小范围
布尔类型
布尔类型可以表示,真或者假,类型是boolean
boolean spBool = true;
字符类型
字符类型可以表示 单个字符,字符类型是char
多个字符称之为字符串,在java中用String(还真是大写)这种数据类型表示,但是String不是基本数据类型,而是类,类是复合数据类型(之后会学习到)
java中字符的加减法
字符类型是一个特殊的整形
public class Hello
{
public static void main(String args[])
{
int test1 = 'a' + 'b'; //把a和b对应的ascii码的数相加,赋值给test1
char test2 = 'a' + 'b';
char test3 = '中'; //java中一个char占用两个字节,所以可以存放汉字
char char1 = 'q';
int char2 = '中'; //中文是用unicode号存放的
System.out.println(test1);
System.out.println(test2);
System.out.println(test3);
System.out.println(char1);
System.out.println(char2); }
} 运行结果:
D:\myJavaDemo>java Hello
195
?
中
q
20013 注:中对应的unicode码为\u4e2d,为20013的16进制形式
结论:在java中,对char进行运算的时候,直接当做 ascii码对应的整数 对待
java基本语法——定义变量、初始化、赋值
什么是定义变量?
int a1;
//这就是定义了一个变量,表示定义了一个整数,名字叫做a1
初始化变量
int a = 45;
//这就是初始化变量,在定义变量的时候就给值
给变量赋值
int tt;
tt = 7780; int a=25;
a = 45; //两者都是给变量赋值
数据类型的转换
例1
public class Hello
{
public static void main(String args[])
{
int a = 1.2;
}
} 只要损失精度就会报错: D:\myJavaDemo>javac -encoding UTF-8 Hello.java
Hello.java:6: 错误: 不兼容的类型: 从double转换到int可能会有损失
int a = 1.2;
^
1 个错误
精度排行:byte < short < int < long < float < double
例2
public class Hello
{
public static void main(String args[])
{
int b = 10;
System.out.println(b);
}
} 输出结果:
10
结论:数据可以从高精度转到低精度
例3
public class Hello
{
public static void main(String args[])
{
float a = 3.4;
}
} 报错:
D:\myJavaDemo>javac -encoding UTF-8 Hello.java
Hello.java:6: 错误: 不兼容的类型: 从double转换到float可能会有损失
float a = 3.4;
^
1 个错误
因为在java中,小数的默认类型是double
float a = 3.4;
表示我要把一个double类型交给float类型,损失精度,报错
例4
public class Hello
{
public static void main(String args[])
{
float a = 3.4f; //加上f就明确表示用float类型,就可以通过编译了
}
}
将高精度强制转换为低精度
例5
public class Hello
{
public static void main(String args[])
{
float a = 3.4f;
int b = (int)a;
int c = (int)1.9;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
} 输出结果:
D:\myJavaDemo>java Hello
3.4
3
1
可以看出(int)1.9的结果为1,强制转换会直接省略掉后面的
例6
public class Hello
{
public static void main(String args[])
{
float a = 3.4f;
int b = a;
System.out.println(a);
System.out.println(b);
}
} 报错:
D:\myJavaDemo>javac -encoding UTF-8 Hello.java
Hello.java:7: 错误: 不兼容的类型: 从float转换到int可能会有损失
int b = a;
^
1 个错误
只要造成精度损失就会报错
例7
public class Hello
{
public static void main(String args[])
{
float a = 3;
int b = a + 3.4;
System.out.println(a);
System.out.println(b);
}
} 报错:
D:\myJavaDemo>javac -encoding UTF-8 Hello.java
Hello.java:7: 错误: 不兼容的类型: 从double转换到int可能会有损失
int b = a + 3.4;
^
1 个错误
a + 3.4的结果会自动往高精度转换,就造成了a+3.4的结果是个double类型的,而b是个int类型,损失精度报错
注: 1 + 3.4f + 6.2的结果是double类型的
Java学习日记——基础篇(二)基本语法的更多相关文章
- Java学习日记——基础篇(三-上)基本语法之运算符和流程控制
运算符 算术运算符 听其名而知其意,就是用于计算的,java中常用的是: + 加 - 减 * 乘 / 除 % 取模,取余——%可以用来得到两个数相除的余数 小练习——写一个ja ...
- Java学习日记基础篇(六)—— 抽象类、接口、final
抽象类 为什么要有抽象类? 因为父类方法有不确定性,我们在Animal中定义了一个方法,但是它会被子类的方法覆盖掉,我们就不知道这个方法原本是做什么的 public class test1 { pub ...
- Java学习日记基础篇(七) —— 数组、排序
数组 为什么要有数组? 案例:一个养鸡场有六只鸡,他们的体重分别为3kg,5kg,1kg,3.4kg,2kg,50kg.请问这六只鸡的总体重和平均体重是多少? public class test5 { ...
- Java学习日记基础篇(四)——类,对象之成员变量,成员方法,构造方法
面向对象(Object Oriented) 一.面向对象杂谈 面向对象(Object Oriented),我的翻译是以物体为目标的,就是说编程的时候是建立一个物体,然后对这个物体进行操作. Java语 ...
- Java学习日记基础篇(三-下)——流程控制之循环控制
循环控制 for循环 语法: for(循环初值;循环条件;步长) { 语句; //循环体 } 例子: import java.io.*; public class Demo4 { public sta ...
- Java学习日记——基础篇(一)常识
JAVA简介 Java的标准 Java是一种语言,一个平台包含JavaSE.JavaEE.JavaME三个版本 JavaSE标准版(属于Java的基础部分,可以开发C/S构架的桌面应用程序) Java ...
- Java学习日记基础篇(九) —— 集合框架,泛型,异常
集合框架 有事我们会需要一个能够动态的调整大小的数组,比如说要添加新员工但是数组已经满了,并且数组的大小是在定义的时候定死的,所以我们就需要一个能够动态调整大小的数组或者用链表解决,而java中提供了 ...
- Java学习日记基础篇(八) —— 二进制、位运算、位移运算
二进制 二进制是逢2进位的进位置,0,1是基本算符 原码反码补码 在基本数据类型那里,有详细解释 二进制的最高位数是符号位:0表示整数,1表示负数 正数的原码,反码,补码都一样 负数的反码 = 它的原 ...
- java学习笔记-JavaWeb篇二
JavaWEB篇二 45 HttpSession概述46 HttpSession的生命周期 47 HttpSession常用方法示例48 HttpSessionURL重写 49 HttpSession ...
随机推荐
- 编写Postgres扩展之二:类型和运算符
原文:http://big-elephants.com/2015-10/writing-postgres-extensions-part-ii/ 编译:Tacey Wong 在上一篇关于编写Postg ...
- 每周分享五个 PyCharm 使用技巧(三)
文章首发于 微信公众号:Python编程时光 PyCharm 是大多数 Python 开发者的首选 IDE,每天我们都在上面敲着熟悉的代码,写出一个又一个奇妙的功能. 一个每天都在使用的工具,如果能掌 ...
- Extjs 兼容IE8常见问题及解决方法
1. 在IE8中整个页面都打不开,一般情况是: 页面组件中最后一个属性出现了逗号 没有多余的逗号,就很有可能是组件中没有设置renderTo:Ext.getBody(); 2. 页面按钮颜色失效 自定 ...
- js防抖节流
防抖(debounce) 所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间. 防抖函数分为非立即执行版和立即执行版. 非立即执行版: 第一 ...
- 记一次渗透某XX站
0X00 前言 团队A师傅发来个站,问我有没有得搞 正好在搞其他的站,卡住了,开干换个思路. 0x01 信息收集 开burp抓了下包,目标设置了url重写,开了报错,我们随意输入一个控制器就直接报错. ...
- 【appium】踩过的坑
1.appium(v1.9.1),在模拟器(蓝叠)上启动app时,软件闪退. 在命令行使用dump aapt dump badging查看包时 name=com.imooc.component.imo ...
- 利用EasyUI 数据网格(DataGrid)的loader属性实现后端分页
该属性在easyui官方文档中并没有详细阐述,通过简单的资料查询和摸索,实现了easyUI数据网格的后端分页功能. 在官网文档中这样阐述loader属性: 定义如何从远程服务器加载数据.返回false ...
- 【DRF框架】视图组件
基于mixins视图类 from rest_framework import mixins # 创建视图 class CreateModelMixin(object) def create(self, ...
- awk初级教程
参考:sed & awk 概述 sed & awk指令组成 与sed区别 尽管awk指令与sed指令的结构相同,都由模式和过程两部分组成,但过程本身有很大不同. awk看上去不像编辑器 ...
- 【OF框架】配置信息Config添加配置和代码调用api
一.配置规范 配置信息全部写在OF.WebShell项目文件config.json中 配置键使用OF.开头,配置格式如下: { "OF.IgnoredUrl": "log ...