#大数据学习笔记第3天# 运算符

## 回顾
1. 什么是关键字?java中的关键字的特点是什么?
2. 什么是标识符?标识符有哪些组成规则?
3. 什么是字面量常量?
4. Java中字面量常量有哪几种?
5. 十进制、二进制、八进制、十六进制之间的转换。
6. 如何求一个负数的表现形式?
7. 定义变量的两种格式。
8. Java中基本数据类型有哪些?各占用几个字节?
9. 什么是变量的作用域?
10. 显式类型转换的格式。

### 答案
1. 答:Java语言中已经被赋予特定意义的一些单词,不可以把这些字作为标识符来使用。特点:关键字全部使用小写字母。

2. 答:标识符可以简单地理解为一个名字,用来标识类名、变量名、方法名、数组名、文件名的有效字符序列。标识符由任意顺序的字母、下划线、美元符号和数字组成,并且第一个字符不能是数字。标识符不能死Java中的保留关键字。

3. 答:在程序运行过程中一直不会改变的量称为常量,通常也称为“final变量”。常量在整个程序中只能被赋值一次。在为所有的对象共享值时,常量是非常有用的。

final 数据类型 常量名称[=值];

常量名通常使用大写字母,但并非是必须的,只是一种约定成熟的规定。

4. 答:字面常量分为:整型、布尔、浮点型、字符型、字符串、null。

5. 答:十进制转二进制,基数为2,转八进制基数为8,转十六进制基数为16;二进制转十进制:2^0, 2^1….;

6. 答:负数的规律。从右往左,遇到第1个1,往右原样,往左取反。

7. 答:方法1:数据类型 变量名=初值; 方法2:数据类型 变量名; 变量名=初值;

8. 答:基本数据类型:整型(byte[1], short[2], int[4], long[8])、浮点型(float[4], double[8])、字符型(char[2])、布尔型(boolean[1])。

9. 答:{}内的变量称为局部变量。局部变量只在当前代码块中有效。

10. 答:(byte,short,char)->int->long->float->double

## 思考题

## 第一节课
– 回顾
– 思考题
– 算术运算符

## 第二节课
– 赋值运算符
– 比较运算符
– 逻辑运算符

## 第三节课
– 位运算符
– 按位与按位或、异或操作
– 移位运算规律
– 三元运算符

## 第四节课
– 分支结构
– 从键盘录入数据
– 判断正负

## 运算符分类
– 算术运算符
– 赋值运算符
– 比较运算符
– 逻辑运算符
– 位运算符
– 三元运算符

### 算术运算符

### ++和–:
– 自加 (++)
– 放在变量前:先自增,再使用
– 放在变量后:先使用,再自增
– 自减 (–)
– 放在变量前:先自减,再使用
– 放在变量后:先使用,再自减

注意:只能对变量使用。

字符串参与运算:

1. 两个操作数都是字符串;
2. 一个字符串一个变量;
3. 多个操作数;

“+”除了字符串相拼接功能外,还能把非字符串转换成字符串,加空串即可。 String s = 5 + “”;

思考题:

Select Code
1
2
System.out.println("5+5="+5+5);	//5+5=55
System.out.println(5+5+"hello"); //10hello

### 算术运算符注意事项:
– 除法操作两个操作数是整数时,结果也是整数,余数部分舍弃;
– %操作获得的是除法操作的余数;%结果的符号取决于被模数,即%前面的数的符号决定了结果的正负。

实例:

Select Code
1
2
int x=3500;
System.out.println(x/1000*1000);	//3000

## 赋值运算符
– 符号:=,+=,-=,`*=`,/=,%=
– 左侧为变量,右侧为字面量,或变量,或表达式;

示例:

支持连续赋值:int a=b=c; a=b=c=3;
int a = 3; a += 5; // 等同于运算 a = a + 5;
扩展:+=,-=,`*=`,/=,%= 自动做强制类型转换。

Select Code
1
2
3
4
5
6
7
8
public class Demo{
	public static void main(String[] args){
		short s=5;
		//s = s + 5;	//错误: 不兼容的类型: 从int转换到short可能会有损失
		s+=5;	//+=运算符会强制类型转换,等同于 s+(short)5
		System.out.println(s);	//10
	}
}

## 比较运算符
– 操作数是常量、变量或表达式;
– 比较运算符的结果是boolean型,要么是true,要么是false,常用作条件判断。
– 比较运算符”==”不能写成”=”;

## 逻辑运算符
– 与:两个条件都是true才是true;
– 或:只要有一个条件是true就是true;
– 异或:两个操作数不一样,才是true;
– 短路与,短路或:在左侧的操作数决定整个表达式的值的时候,右侧的表达式不进行运算;

### 逻辑运算符小结:
– 逻辑运算符的操作数都是布尔型表达式;
– “&”和”&&”(短路与)的区别
– 单&时,左边无论真假,右边都进行运算;
– 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算;
– 或”|”与”||”(短路或)同理,左边为真时,右边不参与运算;

总结:只有在右边需要运算时,才参与运算;

异或(^)与或(|)的区别:异或求的是异;或只需要一个为true结果就为true。

## 位操作符

## 三元运算符
(条件表达式)?表达式1:表达式2;

– 如果条件为true,整个表达式结果是表达式1;
– 如果条件为false,整个表达式结果是表达式2;
– 通常两个表达式同类型;
– 三元表达式整体是有值的,也就是说,它不能单独使用;要么直接打印,要么赋值;

### 示例:获取两个数中的最大值。

Select Code
1
2
int x=3, y=4;
int max = (x>y)?x:y;	//变量max存储的就是两个数的大数

## 程序流程控制
– 顺序结构
– 分支结构(选择结构) if, switch
– 循环结构(while, do…while, for)

### 程序流程控制
顺序结构:语句按照顺序依次执行,单纯的顺序结构的程序基本不存在。大型的程序从宏观上来看的话,各个模块之间也是呈现顺序结构。

### 分支结构:if
分支结构也称为选择结构,程序根据条件表达式的值来决定程序的走向。

Select Code
1
2
3
4
5
if(条件表达式)
{
	语句体;
}
...//其他语句

### 分支结构:if-else

Select Code
1
2
3
4
5
6
if(条件表达式){
	语句体1;
}else{
	语句体2;
}
...//其他语句

if语句注意事项:

– if后的括号内一定是布尔值或布尔表达式;
– 第二种格式与三元运算符的区别:三元运算符运算完要有值出现,并且可以写在其他表达式中;
– if的语句块中可以加多条语句,实现更复杂的逻辑
– if/else后边的大括号可以省略,此时if语句只能控制到另一个分号结束;如果有多条语句的话,不能省略;建议不要省略大括号;

### 分支结构:if-else if

Select Code
1
2
3
4
5
6
7
8
9
10
11
if(条件表达式1){
	语句体1;
}elseif(条件表达式2){
	语句体2;
}elseif(条件表达式3){
	语句体3;
}
...
else{
	语句体n;
}

### 分支结构:if-else练习
如何接收从键盘录入数据?

Select Code
1
2
3
import java.util.Scanner;
Scanner s=new Scanner(System.in);
s.nextInt();	//获取int值,用s.next()获取字符串

### 练习
1. 从键盘录入数据,使用程序判断正负;

2. 从键盘录入整数作为成绩,根据成绩显示提示:

– 60分以下显示“不及格”
– 60-79分显示“及格”
– 80-99分显示“优秀”
– 100分显示“满分”

3. 改进前面的程序,增加对非法成绩的处理;

4. 从键盘输入两个数,显示其中最大值,要求使用if-else结构

5. 从键盘输入三个数,显示其中最大值,要求使用if-else和三元表达式两种方式实现

#大数据学习笔记第2天# Java语言基础

# 大数据学习笔记第2天-Java语言基础 #
## 大纲 ##
– 关键字
– 标识符
– 常量和变量
– 运算符
– 流程控制
– 方法
– 数组

## 第一节课
– 关键字
– 标识符
– 常量与变量

## 第二节课
– 二进制
– 进制基本转换
– 负数的表现形式

## 第三节课
– 变量
– 基本数据类型

## 第四节课
– 基本数据类型之间的类型转换

## 关键字
Java系统中已经赋予了特殊含义的单词。特点:全部是小写字母。

Java中的保留字:现在暂时没有使用,以后可能会使用的单词,如:goto, const

### 关键字的分类:

– 定义数据类型;
– 定义流程控制;
– 布尔值;
– 引用类型空值;
– 访问权限修饰符;
– 用于定义类、方法、变量修饰符的关键字;
– 用于定义类与类之间关系的关键字;
– 用于定义建立实例及引用实例,判断实例的关键字;
– 用于异常处理的关键字;
– 用于包的关键字;
– 其他修饰关键字;

### 分析例子
Hello.java中用到的关键字:

Select Code
1
2
3
4
5
public class Hello{
	public static void main(String[] args){
		System.out.println("Hello World");
	}
}

关键字分析:

– public: 权限修饰符,说明该类是公共的;
– static: 静态类;
– class: 用于定义类
– void: 该方法返回空值;

## 标识符
用于给方法、变量、类、接口等命名的字符序列;

组成规则:

– 由26个英文字母大小写、$、下划线、数字组成;
– 不能以数字开头;
– 不可以使用关键字,但可以包含关键字;

Java中严格区分大小写,比如:main和Main是2个不同的方法;

### 标识符的命名规范
Java中的名称规范:

– 包名:多单词组成时,所有单词小写
– 类名、接口名:多单词组成时,所有单词首字母大写
– 变量名、方法名:多单词组成时,第一个单词的首字母小写,第二个单词开始每个单词的首字母大写
– final变量名:所有的字母大写,多单词时单词之间使用下划线分隔
– 在命名时,为了提高代码的可阅读性,需要做到见名知意;

## 常量与变量
常量表示不能改变的值;

Java中常量(6种字面量常量)的分类:

– 整型常量:直接出现的整数
– 小数常量:直接出现的小数
– 布尔值常量:只有2个值true或false
– 字符常量:用单引号括起来的,1个数字,1个字母或符号
– 字符串常量:将1个或多个字符用双引号括起来
– null常量:只有一个值 null

对于整数,有4种表现形式:

– 二进制:由0,1组成,满2进1,用`0b/0B`开头表示(大小写一样)
– 八进制:由0,7组成,满8进1,用`0`开头表示
– 十进制:由0,9组成,满10进1
– 十六进制:由0-9,A-F组成,满16进1,用`ox/0X`表示(大小写一样)

计算机底层是二进制存储数据的;

## 二进制
– 每个位只能表示 0 和 1 两种状态。
– 多个位组合起来可以表示更多的状态

## 十进制转二进制、八进制、十六进制
计算机以`8bit`作为存储数据的基本单位。 `1byte = 8bit`,1个字节等于8个比特。

– 1byte=8bit
– 1kb=1024byte
– 1M=1024kb
– 1G=1024M
– 1T=1024G
– 1P=1024T
– 1E=1024P

### 实现原理:
– 八进制:把二进制数三位一组,计算出对应的十进制数,组合起来就是对应的八进制数。
– 十六进制:把二进制数四位一组,计算出对应的十进制数,组合起来就是对应的十六进制数。

### 如何从十进制转化为二进制?
除以2,直到商为0,将余数倒排。

十进制转八进制,基数换成8;十进制转十六进制,基数换成16。注意:0-9只能表示最多10个数字,所以A:10, B:11, C:12, D:13, E:14, F:15, G:16。

## 二进制、八进制、十六进制转十进制
### 从二进制转十进制
位权展开法,每位上的数字x进制数的n次幂(从右往左,从0开始)求和。

### 从二进制转八进制
每三位为一组,最后组合成的就是八进制

### 从二进制转十六进制
每四位为一组,最后组合成的就是十六进制

了解:遵守 8421 法则。

## 负数的表现形式
– 补码:负数在计算机中都是以补码的形式存在的。最高位表示符号位:0正数、1负数。负数补码是对其原码取反加1,不包含符号位。
– 正数:原码,反码,补码(二进制)都相通。

### 求一个负数的补码
1. 求对应正数的原码
2. 把正数的原码符号位变1(负数的原码)
3. 把负数的原码除了符号位之外,取反(负数的反码)
4. 在反码基础上+1(负数的补码)

### 磨刀小试:-7的二进制
数字7,使用8421法则,是1+2+4,所以:7转化为二进制是 0000 0111

0000 0111 // 7转化为2进制
1000 0111 // 符号位变为1,表示是负数,得到负数的原码
1111 1000 // 将负数的原码,除了符号位进行取反,得到反码
1111 1001 // 将反码加1,最终得到负数的二进制

### 总结:快速求一个负数的补码规律
+7 0000 0111
-7 1111 1001

从右往左,遇到第1个1,往右原样,往左全取反。

## 变量
– 内存就是程序运行的地方,存放着数据和指令。
– 不同的数据存储在不同的空间,互不影响。
– 内存空间使用之前,必须先申请。

### 变量的概念:
– 内存中的一块存储区域。
– 该区域有自己的名称(变量名)和类型(数据类型)。

### 为什么要定义变量
就是为了使用内存空间。

### 变量的三个要素
– 类型(数据类型:能存放的数据类型)
– 变量(标识符:通过标识符可以访问内存空间里的值)
– 值(存储的内容)

### 定义变量的格式
– 数据类型 变量名=初始值;
– 数据类型 变量名; 变量名=初始值;

## 基本数据类型(四类八种)
整数默认是:int;小数默认是:double;字符串是String类(是引用数据类型)

– 数值型
– 整数类型:byte, short, int, long
– 浮点类型:float, double
– 字符型:char
– 布尔型:boolean

## 定义变量的注意事项
### 作用域
变量定义在哪个大括号里,它的作用就是所在的大括号,同一个作用域中,不能定义同名的变量(类型不同也不行);

### 初始化值
– 初始化有两种格式,定义时赋值,或先定义后赋值;
– 变量在使用前一定要赋值

### 可读性
一行上最好只定义一个变量(虽然一行上可以定义多个变量,如:int x,y,z;)

## 类型转换
– 类型相同的数才能进行运算。
– 不同类型的数进行运算,首先要进行类型转换,变成相同类型:
– 有的转换时系统自动完成的(自动类型转换/隐式类型转换);
– 有的转换时强制手动完成的(强制类型转换/显式类型转换);
– 什么时候用到强制类型转换(大范围转小范围)

举例:

– 自动类型转换:double d = 1 + 2.5; //整型自动转换为double类型
– 强制类型转换:byte b = (byte)128; //1byte的取值范围是: -128-127

当定义一个字符类型,赋值一个整数,会自动按照ASCII表进行转换:

### 表达式的数据类型自动提升:
– 所有byte, short, char型将提升为int型;
– char型参与运算实际上是对应的Unicode编码值;
– 如果表达式中还有更大表数范围的类型,则继续提升;
– boolean类型不参与数值运算,也不能和其他类型进行转换;

如果遇到:char 和 byte 相加的运算,会全部转换为整型,再进行运算

#大数据学习笔记第1天# Java概述

第一节课

软件&软件开发

计算机硬件常识,存储器分类:

  • Cache:高速缓存
  • 内存:Main Memory/Primary Memory
  • 硬盘:Secondary Memory: Hard Drive

硬盘上的文件不能直接访问,必须先加载到内存中,所有的程序都是在内存中运行的。

什么是计算机语音:

  • 人类语言:是人与人之间沟通的一种方式;
  • 计算机语言:人与计算交流的方式;

计算机发展简史:

  • 第一代:机器码
  • 第二代:汇编语言(出现了一些简单的英文单词)
  • 第三代:高级语言(更加接近人类语言,容易理解和记忆,如:C,C++,C#,JAVA)

人机交互方式

  • 图形界面GUI:Windows系统
  • 命令行方式CLI:DOS窗口,Bash命令

常用DOS命令

  • dir: 列出当前目录下的文件夹以及文件;
  • md: mkdir的缩写,创建一个空目录;
  • rd: remove directory简写,删除空目录;
  • cd: chdir的缩写,切换一个目录,进入目录;
  • del: 删除文件;
  • exit: 退出dos命令行;

第二节课

Java简介

  • SUN公司1995年推出的一门高级编程语言;
  • 2009年被Oracle公司收购;
  • 随着Java技术在Web方面的不断成熟,已经成为了Web应用程序的首选开发语言;
  • 是Hadoop等大数据开源框架首选开发语言;
  • 特点是:完全面向对象,安全可靠,与平台没有关系;

Java语言的三种技术架构:

  • JAVA EE 企业版 (主要用于开发Web应用程序)
  • JAVA SE 标准版 (大数据开发使用这种版本)
  • JAVE ME 小型版 (是为开发电子消费产品和嵌入式设备提供的解决方案,逐渐被淘汰)

Java语言的特点:跨平台性

平台指的是各种OS(操作系统Operation System),通过Java语言编写的应用程序在不同的操作系统平台上都可以运行。 Java之所以可以在各种平台上运行,是因为Java针对各种平台都开发了不同的JVM虚拟机(Java Virtual Machine)。同样的Java程序在不同的平台上都能运行,这就是Java的跨平台性。

Java开发环境安装与配置

明确什么是:JRE(java runtime environment), JDK(java development kit); 『下载』和『安装』JDK,『配置』环境变量(CMD中敲set可以查看环境变量); 安装完成后可以在命令行中输入java命令进行『验证』;

1. 什么是JRE(jvm+核心类库lib),JDK:JRE包括Java虚拟机,和Java程序所需要的核心类库等;

2. JDK(jre+工具tool)是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE,所以安装了JDK,就不用再单独安装JRE了。

下载JDK(Java开发工具包)官网:www.oracle.com 注意操作系统以及版本的选择。

3. 安装JDK,建议安装路径最好不要有中文字符或者空格,提示安装JRE时,可以选择不安装。

4. 配置环境变量Path:‘我的电脑-属性-高级-环境变量’。编辑Path环境变量,加上java工具所在目录,各个路径之间用英文”;”分隔,建议放在最前面;打开DOS命令行,在任意目录下执行javac命令,如果出现javac的参数信息,配置成功。

第三节课

安装Notepad
安装完成后,配置字符集编码ANSI、文件关联.java、自动输入完成等;

第一个Java程序

一、编写之前调整系统,取消隐藏的已知类型文件的扩展名;

文本编辑器:Notepad++

  1. 将java代码编写到后缀名为.java的文件中
  2. 通过javac命令对该java文件进行编译
  3. 通过java命令运行生成的class文件

注意区分大小写。

二、编译:将源码文件编译成JVM可以识别的文件,在该源码文件目录下,通过javac编译工具,对Hello.java文件进行编译;如果程序没有出错,没有任何提示,但在当前目录下会出现一个Hello.class文件,该文件称为字节码文件,也是可执行的java的程序。

三、运行:通过运行工具java.exe对字节码文件进行执行,注意java命令后边的文件不用加.class,正常时就会输出“Hello World”

常见的错误:

  • 缺少大括号(不成对)
  • 字母大小写错误
  • 关键字单词拼写错误

代码:

Select Code
1
2
3
4
5
public class Hello{
	public static void main(String[] args){
		System.out.println("Hello World");
	}
}

如果在class前面加上public修饰,说明这是一个公共类,此时类名和文件名必须保持一致。一个源文件中可以包含多个类,编译之后,各自形成字节码文件。

编译后的文件名称为:Hello.class,内容如下图所示:

转义字符

  • \r: 回车,光标移到行首
  • \n: 换行符,光标移到到下一行
  • \t: tab键
  • \\: 输出一个\

第四节课

classpath:
可以在CMD中临时配置:set classpath=c:/;.
如果需要永久设置,则通过环境变量进行配置;

  • 既然class文件(字节码文件)是java的运行文件,可不可以实现在任意目录下都可以执行某一目录下的class文件呢?
  • 根据path环境变量的原理,可以定义一个名为classpath环境变量,将要运行的class文件所在的目录定义在该变量中;
  • JVM查找类文件的顺序:
    • 如果没有配置classpath环境变量,JVM只在当前目录下查找要运行的类文件;
    • 如果配置了classpath环境变量,JVM会先在classpath环境变量值得目录中查找要运行的类文件:
      • 值的结尾处如果加上分号,那么JVM在classpath目录下没有找到要指定的类文件,会在当前目录下再查找一次;
      • 值的结尾处如果没有加上分号,那么JVM在classpath目录下没有找到要指定的类文件,不会再当前目录下查找,即使当前目录下有,也不会运行;

注释:
用于注释、说明、解释程序的文字就是注释。主要是写给开发人员看的。

  • 单行 //
  • 多行 /* …. */
  • 文档注释 /** …. */