课堂笔记

1.标识符

​ 什么是标识符

就是给类,接口,方法,变量等起名字时使用的字符序列 

​ 标识符的组成规则

 英文大小写字母
 数字字符
 $和_ 

​ 标识符注意事项

   不能使用关键字
   不能数字开头 

​ 标识符常见命名规则规范:

  • 见名知意
  • A:包
    • 最好是域名倒过来,要求所有的字母小写
  • B:类或者接口
    • 如果是一个单词首字母大写
    • 如果是多个单词每个单词首字母大写(驼峰标识)
  • C:方法或者变量
    • 如果是一个单词全部小写
    • 如果是多个单词,从第二个单词首字母大写
  • D:常量
    • 如果是一个单词,所有字母大写
    • 如果是多个单词,所有的单词大写,用下划线区分每个单词

2.关键字

什么是关键字
	被Java语言赋予特定含义的单词
关键字的特点
   组成关键字的字母全部小写 
常见关键字
  public static void class
保留字
goto 和const作为保留字存在,目前并不使用
类似VIM这样的高级记事本,针对关键字有特殊的颜色标记,非常直观 

​ [外链图片转存失败(img-Rneg2Zzm-1564488314466)(.\image\1564150561686.png)]

3.常量

什么是常量
在程序执行的过程中其值不可以发生改变 
Java中常量的分类
  • 字面值常量
  • 自定义常量(面向对象章节讲)
字面值常量的分类
  • 字符串常量 用双引号括起来的内容
  • 整数常量 所有整数
  • 小数常量 所有小数
  • 字符常量 用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号
  • 布尔常量 较为特殊,只有true和false
  • 空常量 null(数组章节再讲)

4.进制(了解)

什么是进制
  • 进制:就是进位制,是人们规定的一种进位方法。 对于任何一种进制–X进制,就表示某一位置上的数运算时是逢X进一位。二进制就是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。
  • 例如一周有七天,七进制,一年有十二个月,十二进制
十进制的由来
  • 十进制的由来是因为人类有十个手指
二进制的由来
  • 其实二进制来源与中国,请看史料记载

    18世纪德国数理哲学大师莱布尼兹从他的传教士朋友鲍威特寄给他的拉丁文译本《易经》中,读到了八卦的组成结构,惊奇地发现其基本素数(0)(1),即《易经》的阴爻yao- -和__阳爻,其进位制就是二进制,并认为这是世界上数学进制中最先进的。20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,其运算模式正是二进制。它不但证明了莱布尼兹的原理是正确的,同时也证明了《易经》数理学是很了不起的。

八进制的由来
  • 任何数据在计算机中都是以二进制的形式存在的。二进制早期由电信号开关演变而来。一个整数在内存中一样也是二进制的,但是使用一大串的1或者0组成的数值进行使用很麻烦。
  • 所以就想把一大串缩短点,将二进制中的三位用一位表示。这三位可以取到的最大值就是7.超过7就进位了,这就是八进制。
十六进制的由来
  • 但是对于过长的二进制变成八进制还是较长,所以出现的用4个二进制位表示一位的情况,四个二进制位最大是15,这就是十六进制。
不同进制表现同一个数据的形式特点
  • 进制越大,表现形式越短

5.不同进制数据的表现形式(掌握)

二进制的数据表现形式
  • 由0,1组成。以0b(b可以大写也可以小写)开头(JDK1.7版本以后可以表示二进制了)
八进制的数据表现形式
  • 由0,1,…7组成。以0开头
十进制的数据表现形式
  • 由0,1,…9组成。整数默认是十进制的
十六进制的数据表现形式
  • 由0,1,…9,a,b,c,d,e,f(大小写均可)。以0x开头
练习
  • 输出不同进制表现100的数据。
  • 0b100
  • 0100
  • 100
  • 0x100
6.任意进制转十进制
任意进制到十进制的转换原理
  • 系数:就是每一位上的数据。
  • 基数:X进制,基数就是X。
  • 权:在右边,从0开始编号,对应位上的编号即为该位的权。
  • 结果:把系数*基数的权次幂相加即可。
练习
  • 二进制–十进制
  • 八进制–十进制
  • 十六进制–十进制
7.十进制转任意进制
十进制到任意进制的转换原理
  • 除积倒取余
画图练习
  • 十进制–二进制
  • 十进制–八进制
  • 十进制–十六进制
8.原码,反码,补码

​ 为什么要学习原码反码补码?

​ 后面要学习强制类型转换,如果不知道有原反补会看不懂结果

​ 根据冯~诺依曼提出的经典计算机体系结构框架。一台计算机由运算器,控制器,存储器,输入和输出设备组成。其中运算器,只有加法运算器,没有减法运算器

​ 所以,计算机中的没法直接做减法的,它的减法是通过加法来实现的。的减法也可以当成加法的,减去一个数,可以看作加上这个数的相反数。当然没错,但是前提是要先有负数的概念。这就为什么不得不引入一个该死的符号位。

从硬件的角度上看,只有正数加负数才算减法。
正数与正数相加,负数与负数相加,其实都可以通过加法器直接相加	
原码,反码,补码的产生过程,就是为了解决,计算机做减法和引入符号位(正号和负号)的问题。
8.1.原码
原码:是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。

​ 若以带符号位的四位二进值数为例

1010  : 
	  最高位为‘1’,表示这是一个负数,其他三位为‘010’,
      即(0*2^2)+(1*2^1)+(0*2^0)=2
      所以1010表示十进制数(-2)

下图给出部份正负数数的二进制原码表示法

​ [外链图片转存失败(img-I0sT3XUy-1564488314475)(.\image\2018072421123442.png)]

OK,原码表示法很简单有没有,虽然出现了+0和-0,但是直观易懂。
于是,我们高兴的开始运算

0001 + 0010 = 0011    (1 + 2 = 3)OK
0000 + 1000 = 1000    (+ 0 +-0)= -0)
0001 + 1001 = 1010    (1 +-1)= -2)

于是我们可以看到其实正数之间的加法通常是不会出错的,因为它就是一个很简单的二进制加法。

而正数与负数相加,或负数与负数相加,就要引起莫名其妙的结果,这都是该死的符号位引起的。0分为+0和-0也是因他而起。

所以原码,虽然直观易懂,易于正值转换。但用来实现加减法的话,运算规则总归是太复杂。于是反码来了。

8.2 反码

​ 我们知道,原码最大的问题就在于一个数加上他的相反数不等于零。

​ 例如:

0001 + 1001 = 1010 (1 + (-1) = -2)
0010 + 1010 = 1100 (2 + (-2) = -4)

于是反码的设计思想就是冲着解决这一点,既然一个负数是一个正数的相反数,那我们干脆用一个正数按位取反来表示负数试试

反码:
	正数的反码还是等于原码
	负数的反码就是他的原码除符号位外,按位取反。

若以带符号位的四位二进制数为例:

3 是正数,反码与原码相同,则可以表示为 0011
-3的原码是 1011,符号位保持不变,低三位(011)按位取反得(100)
所以-3的反码为 1100

[外链图片转存失败(img-Yjr5EAYQ-1564488314477)(.\image\20180724211333947.png)]

对着上图,我们再试着用反码的方式解决一下原码的问题:

0001 + 1110 = 1111 ( 1 +-1)= - 0)

互为相反数相加等于0,解决。虽然是得到的结果是 1111也就是 -0

1110(-1)+ 1101(-2)= 1011(-4)
1110(-1)+ 1100(-3)= 1010(-5)

确实是巧合,看来相反数问题是解决了,但是却让两个负数相加的出错了。

但是实际上,两个负数相加出错其实问题不大。我们回头想想我们的目的是什么?是解决做减法的问题,把减法当成加法来算

两个正数相加和两个负数相加,其实都是一个加法问题,只是有无符号位罢了。而正数+负数才是真正的减法问题

也就是说只要正数+负数不会出错,那么就没问题了。负数加负数出错没关系的,负数的本质就是正数加上一个符号位而已

在原码表示法中两个负数相加,其实在溢出的情况下结果就只有符号位出错而已

1001 + 1010 = 0011

反码的负数相加出错,其实问题不大。我们只需要加实现两个负数加法时,将两个负数反码包括符号位全部按位取反相加,然后再给他的**符号位强行置‘1’**就可以了

-1 + (-2) = -(1 + 2)
相当于
反码:1110(-1)+ 1101(-2)= 1011(-4)
原码:0001(1)  + 0010(2) = 0011(3)
符号位强行置‘1’:1011(-3)

8.3 补码
正数补码与原码一样
负数补码与反码末位+1
8.变量的概述及格式

​ 什么是变量

​ 在程序执行的过程中,在某个范围内其值可以发生改变的量

​ 变量的定义格式

​ 数据类型 变量名 = 变量值;

​ 为什么要定义变量

​ 用来不断的存放同一类型的常量,并可以重复使用

9.数据类型概述与分类

​ 为什么有数据类型

​ Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间

Java中数据类型的分类

​ 基本数据类型

​ 引用数据类型 面向对象部分讲解

基本数据类型分类(4类8种)

  • 整数型

    • byte 占一个字节 -128到127
    • short 占两个字 -215~215-1
    • int 占四个字节 -231~231-1
    • long 占八个字节 -263~263-1
  • 浮点型

    • float 占四个字节 -3.403E38~3.403E38 单精度
    • double 占八个字节-1.798E308~1.798E308 双精度
  • 字符型

    • char 占两个字节 0~65535
  • 布尔型

    • boolean
      • boolean理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小

    [外链图片转存失败(img-xa0kOH8z-1564488314479)(.\image\1564154924011.png)]

    10.定义不同数据类型的变量
    • 练习
      • 定义不同基本数据类型的变量,并输出
      • 赋值时候注意float类型,long类型
    11.使用变量的注意事项
    • A:案例演示
      • a:作用域问题
        • 同一个区域不能使用相同的变量名
      • b:初始化值问题
        • 局部变量在使用之前必须赋值(可以先声明后赋值,也可以定义的同时赋值)
      • c:一条语句可以定义几个变量
        • int a,b,c…;
    12.数据类型转换之隐式转换
    • A:案例演示
      • a:int + int
      • b:byte + int
    • B:Java中的默认转换规则
      • 取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算
    • C:画图解释byte+int类型的问题
    13.数据类型转换之强制转换
    • A:强制转换问题
      • int a = 10;
      • byte b = 20;
      • b = a + b;
    • B:强制转换的格式
      • b = (byte)(a + b);
    • C:强制转换的注意事项
      • 如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同
    14.面试题之变量相加和常量相加的区别
    • A:案例演示
      • 面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
      • byte b1 = 3;
      • byte b2 = 4;
      • byte b3 = b1 + b2;
        • 从两方面去回答这个题
        • b1和b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值
        • byte类型的变量在进行运算的时候,会自动类型提升为int类型
      • byte b4 = 3 + 4;
        • 3和4都是常量,java有常量优化机制,就是在编译的的时候直接把3和4的结果赋值给b4了
    16.字符和字符串参与运算
    • A:案例演示
      • System.out.println(‘a’);
      • System.out.println(‘a’+1);
      • 通过看结果知道’a’的值是多少,由此引出ASCII码表
    • B:ASCII码表的概述
      • 记住三个值:
        • ‘0’ 48
        • ‘A’ 65
        • ‘a’ 97
    • C:案例演示
      • System.out.println(“hello”+‘a’+1);
      • System.out.println(‘a’+1+“hello”);
    • D:+在有字符串参与中被称为字符串连接符
      • System.out.println(“5+5=”+5+5); // 5+5=55
      • System.out.println(5+5+"=5+5");

    ###02.18_Java语言基础(char数据类型)(掌握)

    • A:char c = 97; 0到65535

      ​ a

    • B:Java语言中的字符char可以存储一个中文汉字吗?为什么呢?

      • 可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。中文也是占的两个字节
      • 所以,Java中的字符可以存储一个中文汉字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值