java学习笔记第02天--java语言基础

关键字
关键字是指在java系统中已经赋予了特殊含义的单词。关键字的特点是 全部都是小写字母。
常用或者常见的关键字见下:
定义数据类型的关键字
class
interface
byte
short
int
long
float
double
char
boolean
void
       
定义流程控制的关键字
if
else
switch
case
default
while
do
for
break
continue
return
       
布尔值
true
false
   
引用类型空值
null
     

标识符
用于给方法、变量、类和接口等命名的字符序列。
组成规则:
1、由26个英文字母大小写和数字、_、$符组成
2、数字不能开头
3、不可以使用关键字或者保留字作为标识符
Java中的名称规范:
•包名:多单词组成时所有字母都小写(以后详讲)
–xxxyyyzzz
•类名,接口名:多单词组成时,所有单词的首字母大写
–XxxYyyZzz
–Test
•变量名,方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写(即驼峰语法) 
–xxxYyyZzz
–main
•final变量名:所有字母都大写,多单词时单词之间用下划线分隔
–XXX_YYY_ZZZ
–MAX_VALUE
•在命名时,为了提高阅读性,要尽量做到见名知意。

常量与变量
java 中的常量大体上分为两种:
1. 字面量常量(字面量表示不能改变的数值(程序中直接出现的值))
2. 自定义常量( 后面讲)
 
  Java中常量(字面量)的分类:
    1,整数常量:直接出现的整数
    2,小数常量:直接出现的小数
    3,布尔(boolean)型常量:只有两个值:true 和 false
    4,字符常量:将一个数字,字母或者符号用单引号('')括起来
    5,字符串常量:将一个或者多个字符用双引号("")括起来
    6,null常量:只有一个数值:null
示例:
public class ConstantDemo{
    public static void main(String[] args){      
       System.out.println(100);//整数常量
       System.out.println(3.14);//浮点数常量
       System.out.println(true);//布尔型常量
       System.out.println(false);//布尔型常量
       System.out.println('a');//字符常量
       System.out.println('中');//字符常量
       // System.out.println('');//字符常量不能为空
       //System.out.println('ab');//字符常量只能出现一个字符
       System.out.println('@');//ok
       System.out.println(' ');//ok
       System.out.println("");//字符串常量
       System.out.println("H");//字符串常量
       System.out.println(" ");//字符串常量
    }
}

进制介绍及转换
对于整数,有四种表现形式:
二进制:由0,1组成 ,满2进1.用0b/0B开头表示,只能表示0,1两种状态
八进制:由0-7组成 ,满8进1. 用0开头表示
十进制:由0-9组成 ,满10进1.
十六进制:由0-9,A-F组成,满16进1. 用0x/0X开头表示

进制的基本转换
–十进制  二进制 互转
•十进制转成二进制  除以2取余数,将余数倒排
•二进制转成十进制  乘以2的幂数,将结果相加
–十进制 八进制 互转
–十进制 十六进制 互转
二进制和八进制,十六进制互转(8421法则)

八进制和十六进制出现的原因:简化书写和记忆
java学习笔记第02天--java语言基础_第1张图片
十进制数转换到其他进制数,除以进制数,直到商为0,并将余数进行倒排。
例如:十进制转二进制
java学习笔记第02天--java语言基础_第2张图片

例如:十进制转八进制

java学习笔记第02天--java语言基础_第3张图片
例如:十进制转十六进制
java学习笔记第02天--java语言基础_第4张图片

其他进制数转换为十进制,是用每一位的系数乘以进制的n次幂(从右向左,从0开始),再进行求和。
例如:二进制转换为十进制:
java学习笔记第02天--java语言基础_第5张图片

例如:八进制转换为十进制
java学习笔记第02天--java语言基础_第6张图片

例如:十六进制转换为十进制
java学习笔记第02天--java语言基础_第7张图片

二进制常用的进制转换,除了转换为十进制外,还会转八进制和十六进制。
例如:二进制转八进制的实现过程:三位一组,计算对应的十进制,并结合即可
java学习笔记第02天--java语言基础_第8张图片

例如:二进制转十六进制的实现过程:四位一组

从上面多个例子中,我们可以不难发现有种规律,这个规律就叫做8421法则
二进制和十进制互相转化是,将常用的四位二进制数表示的十进制数变成规律,方便计算.
例如:有如下二进制位,那么它们分别代表了8421,基数为1,表示在结果中加上对应的数,如果基数为0,则在最终的结果中不用加它对应的数.
以1 1 1 1为例:
各个位上代表的数分别为8421,并且每位上的数都是1,说明在结果中都加上,所以总的结果是8+4+2+1 = 15
 1 0 0 1
    表示结果中有:8 和 1,并没有4和2 ,所以总的结果是8+1=9

8421法则在二进制转换成八进制:
       111 001
        7   1   --> 071
8421法则在二进制转换为十六进制: 
    1001   1010
    9      a       --> 0X9A
在八进制转二进制,或者十六进制转二进制时同样适用.

原码、反码及补码
正数的原码,反码,补码:都一样
+7对应的二进制是: 0000 0111 ,既是+7的原码,也是它的反码和补码.

负数:和正数的存储方式不同,负数都是以 补码形式 存储的.
而负数的补码计算的过程是:
    把负数的原码除了符号位取反之后再+1.
但是,观察求-7,-12的补码的过程
+7         0      000 0111
-7          1       111 1001
 
+12        0      000 1100
-12        1      111 0100
发现规律如下:
求一个负数的表示形式 :
    先求其对应正数的表示形式 , 然后 , 从右往左 , 遇到第一个 1, 从这个 1 开始 , 包含这个 1, 右边保持不变 , 左边全取反 , 就是这个负数的表示形式 .
练习:
-20 的存储形式: 先求出对应正数的二进制形式, 再利用规律即可得到负数的表示形式.
+20   0001 0100    
-20   1110 1100
总结的规律可以反过来使用:
从一个负数的补码,也可以直接得到对应的正数的二进制形式. 

练习:
给定一个二进制数, 求其对应的十进制数.
思路:
    先判断符号位, 如果是0, 直接使用位权展开法求.
    如果是1, 先利用规律求出对应的正数的表示形式, 再利用位权展开法求出正数对应十进制数, 然后取相反数.
练习:
给定二进制位, 求其对应的十进制数是多少?
1000 1100    -116
根据规律算出的正数的二进制数:
0111 0100
= 64 + 32+ 16 + 4 =  96+20 = 116
练习:
1111 1111         -1
0000 0001         1
总结:
    1 表示的数是-1.
练习:
1000 0000                   -128
1000 0000         用位权展开法计算结果是:128

变量
内存
内存就是程序运行的地方,存放着数据和指令,不同的数据存储在不同的空间,互不影响,内存空间使用之前必须先申请。如果一个数据已经存储到内存中了,怎么找到它呢?
只要在申请空间的时候,给这个空间起一个名字就可以了,使用变量的时候,通过变量名就可以找到变量的值了。
变量的概念:
1、内存中的一块存储区域
2、该区域有自己的名称(变量名)和类型(数据类型)
3、定义变量就是为了使用内存空间。
变量的三个要素:
类型(数据类型:能存放的数据类型)
变量名(标识符:通过标识符可以访问内存空间的值)
值(需要存储的内容)
定义变量的格式:
格式一:
数据类型 变量名 = 初始值;
格式二:
数据类型 变量名;
变量名 = 初始值;
变量的作用域:
变量定义的{}就是变量的作用域,变量只能在自己的作用域内有效,出了定义变量的作用域就不能再使用了。

基本数据类型介绍
java学习笔记第02天--java语言基础_第9张图片

基本数据类型:四类八种
引用数据类型:类、接口和数组
整数默认类型:int 小数默认类型:double
字符串是类:String,是引用数据类型

基本数据类型的类型转换:
1、隐式转换:从小范围到大范围的转换
long lon = 120;
2、显示转换:从大范围到小范围的转换
byte b = (byte)120L;
基本数据类型隐式转换图:
java学习笔记第02天--java语言基础_第10张图片

 boolean类型不参与类型的转换和算术的运算。

问题思考:
1、 System.out.println('a')与System.out.println('a'+1) 的区别
System.out.println('a')是直接打印字符a
System.out.println('a'+1)是将ASCII码中的'a'对应的值与1进行相加。

2、 byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢?
b=b1+b2;//会失败,错误: 不兼容的类型: 从int转换到byte可能会有损失
更准确的解释是: 凡是byte类型的数 一旦参与算术运算会自动转换为int型 ,所以系统会提示从int转换到byte可能会有损失,
这个地方需要扩展下,比如float类型的数一旦参与算术运算会自动转换为double类型,这个需要明确。

3、 double d = 3.14;
int i = (int)d;
System.out.println(d);// 强转之后的 d 值是?
强转之后的d值还是3.14.
原因为:虽然d强制转换为int类型,,转换之后变为了3,并将值3存入到变量i中了,但是需要打印的是d,即还是原来的3.14,如果打印i,则i值为3,可以测试下:

4、 面试题
byte b = 130;
以上语句是否正确?
如果想让赋值语句变得正确,如何更改?
赋值之后的结果又是多少呢?
以上语句不正确,130超出了byte类型的范围,其范围是-128~127,如果让赋值语句变得正确,需要对其进行强转,byte b = (byte)130,结果为:-126
结果是这样得出来的:
130 二进制表示: 1000 0010 (可以看出最高位是1,表示是一个负数)
求一个负数的表示形式 :
    先求其对应正数的表示形式 , 然后 , 从右往左 , 遇到第一个 1, 从这个 1 开始 , 包含这个 1, 右边保持不变 , 左边全取反 , 就是这个负数的表示形式 .
那么结果为:二进制表示0111 1110 (这是正数的表示结果:126)
所以原来的数则为-126



你可能感兴趣的:(java篇)