# 大数据工程(一)
## Java基础
程序设计语言
Java每一句执行语句后面有;
回车换行不表明结束,;才表示。
编译的过程:编译以后会生成一个或多个字节码文件。字节码文件的文件名与java源文件中的类名相同。运行只运行含main的文件。
计算机系统
硬件:
cpu
内存:8bit单元=byte单元
kb mb gb eb zb yb
软件:一系列按照特定顺序组织的计算机数据和指令的集合。分为系统软件和应用软件。
系统软件:
应用软件:
人机交互方式:图形化界面&命令行dos
应用程序=算法+数据结构
算法解决应用程序正确与否。
数据结构解决效率的问题。选择正确的数据结构。
### 计算机基础
- 计算机概述
两个鼻祖:
图灵:电影《模仿游戏》。
计算机科学和人工智能之父。
计算机领域最高奖“图灵奖”。
国内:姚期智,清华姚班。
冯诺依曼:计算机之父和博弈论之父。
理论要点-数字计算机的制采用二进制;计算机应该按照陈序顺序执行。
- 冯诺依曼体系
现代计算机基础。
- 计算机结构
- 硬件Hardware
计算机可以看得见的物理部分。
- CPU
它从内存中获取指令,然后执行这些指令。
cpu速度的计量单位是赫兹(Hz),1Hz相当于每秒1个脉冲。目前以千兆赫(GHz)来表述。
三个定律:
摩尔定律
安迪-比尔定律
反摩尔定律
- 运算器
算数、逻辑单元(arithmetic、logic unit):用于完成数值运算(+,-,*。/)和逻辑运算(比较)。
- 控制器
控制单元(control unit):控制代码指令,流程。用于控制和协调其他组件的动作)。
- 存储器
- 存储设备
内存存取数据的速度比硬盘的存取速度快10倍。而cpu的速度比内存不知道还要快多少倍。把程序从硬盘放到内存后,cpu就直接在内存运行程序,cpu操作的数据都来自于内存,读内存中的数据做运算。
Java在数据当中怎么分配。内存解析。
电脑慢了,调大内存,在内存不够的情况下。换固态硬盘,硬盘给数据速度更快。
- 硬盘Hard Disk(ROM手机内存)
写在磁盘上的是永久保存的。
- USB
- 内存(RAM)Random-Access Memory
数据是如何存储在计算机中的:计算机就是一系列的电路开关,每个电路存在两种状态off(0)和on(1)。
一个0或者一个1存储为一个比特(bit),是计算机中最小的存储单位。
计算机中最基本的存储单元是字节(byte)。每个字节由8个比特bit构成。
千字节(Kilobyte)1KB=1024B
兆字节(Megabyte)1MB=1024KB
千兆字节(Gigabyte)1GB=1024MB
万亿字节(Terabyte)1TB=1024GB
内存中的信息断电会丢失。
内存:由一个有序的字节序列组成,用于存储程序及程序需要的数据。
一个程序和它的数据再被cpu执行前必须移动到计算机的内存中。
每个字节都有一个唯一的地址。使用这个地址确定字节的位置,以便于存储和获取数据。
一个计算机具有的RAM越多,它的运行速度越快,但是此规律是有限制的。
- 输入/输出
- 通讯设备
调制解调器,网卡
- 软件Software
软件是看不见的指令,这些指令控制硬件并且使得硬件完成特定的任务。
软件:即一系列按照特定顺序组织的计算机数据和指令的集合。有系统软件和应用软件之分。
分为:
操作系统
应用软件(软件开发=程序设计):
创建或开发软件。
人机交互方式:
图形化界面(GUI):
命令行方式(CLI): 需要有一个控制台,输入特定的指令,让计算机完成一些操作。
- 软件
- 操作系统软件operating system
是运行在计算机上的最重要的程序,可以管理和控制计算机的活动。
和硬件打交道。
控制程序。
用户也可以直接控制操作系统。
window mac linus nuix android ios
- 电脑系统
- 手机系统
- 应用软件/应用程序
program = Algorithm + data structure
例如:排序
算法:程序正确与否
数据结构:载体与效率的问题
- 计算机语言/程序设计
程序设计语言:写指令用的语言。
计算机编程语言介绍:
第一代语言:机器语言,二进制代码
第二代语言:汇编语言,助记符
第三代语言:高级语言,
面向过程:
面向对象:java,python,scala,JS
tiobe:语言排行榜
- 面向过程
c和c++的开发效率低,执行效率高,做底层
- 面向对象
java的开发效率高,执行效率低,社区活跃,第三方框架多,社会web开发
python的开发效率更高,执行效率更低
C#社区活跃和开源不如java
- Java语言概述/历史发展
是一种面向Internet的编程语言。Java一开始富有吸引力是因为Java程序可以 在Web浏览器中运行。这些Java程序被称为Java小程序(applet)。applet使 用现代的图形用户界面与Web用户进行交互。 applet内嵌在HTML代码中。
后台开发:java大公司,php,python小公司,go,node.js,
javase-javaee-javame
JAVASE(standard)桌面级应用
JAVAEE(enterprise)web应用程序
JAVAME(micro)移动端
从Java的应用领域来分,Java语言的应用方向主要表现在以下几个方面:
? 企业级应用:主要指复杂的大企业的软件系统、各种类型的网站。Java的安全机制以及 它的跨平台的优势,使它在分布式系统领域开发中有广泛应用。应用领域包括金融、电 信、交通、电子商务等。
? Android平台应用:Android应用程序使用Java语言编写。Android开发水平的高低 很大程度上取决于Java语言核心能力是否扎实。
? 大数据平台开发:各类框架有Hadoop,spark,storm,flink等,就这类技术生态 圈来讲,还有各种中间件如flume,kafka,sqoop等等 ,这些框架以及工具大多数 是用Java编写而成,但提供诸如Java,scala,Python,R等各种语言API供编程。
? 移动领域应用:主要表现在消费和嵌入式领域,是指在各种小型设备上的应用,包括手 机、PDA、机顶盒、汽车通信设备等。
Java两种核心机制
?Java虚拟机 (Java Virtal Machine) ?垃圾收集机制 (Garbage Collection)
- 开发环境
- 环境搭建
- 环境变量
- 常用的java开发工具IDE
(Integrated Development Environment)
- Eclipse/IDEA使用
- Hello World
public class Test{
public static void main(String[] args) { System.out.println(“Hello World!”);
}
}
对第一个java程序进行总结:
编写:我们将编写的java代码保存在以“.java”结尾的源文件中
编译:使用javac.exe命令编译我们的java源文件。生成字节码文件.class,有几个class生成几个。
javac ChairMan(文件名).java
运行:使用java.exe命令解释运行我么的字节码文件。只运行包含main方法的类。
在一个java源文件中可以声明多个class,但是只有一个public,只能是和文件名同名的类上。
java ChairMan(类名)
?Java应用程序的执行入口是main()方法。它有固定的书写格式: public static void main(String[] args) {...}
?输出语句System.out.println 先输出后换行
?Java语言严格区分大小写。
?Java方法由一条条语句构成,每个语句以“;”结束。
?大括号都是成对出现的,缺一不可。
- 编写
- 编译
语法层面报错
- 运行
计算上的错误
- 编程风格
行尾风格
运算符和符号两边各加一个空格。
- 注释comment
?单行注释
?格式: //注释文字
?多行注释
?格式: /* 注释文字 */
作用:
1.对所写的程序进行解释说明,增强可读性。方便自己,方便别人。
2.调试所写代码,对怀疑有问题的代码进行注释,排查bug。
?文档注释(Java特有)
?格式:/**
@author 指定java程序的作者 @version 指定源文件的版本
*/
? 文档注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形 式体现的该程序的说明文档。
- 单行
- 多行
- 文本
- debug断点异常调试
- Java API
。。。
- Java新特性
- Subtopic 4
- 万维网www(简称web)
是一个由许多互相链接的超文本组成的系统,通过互联网访问。在这个系统中,每个有用的事物,称为一样“资源”;并且由一个 全局“统一资源标识符”( URI )标识 ;这些资源通过 超文本传输协议( Hypertext Transfer Protocol 传送给用户,而后者通过点击链接来获得资源 。
就是平时上网的过程。
互联网>因特网>万维网
- web客户端
常用浏览器,访问web服务器上的页面。
B/S browser server:浏览器(特殊的客户端)
C/S client server:客户端 wechat,QQ。。
- web服务器程序
### 基础程序设计
- 基础语法
- 关键字Key Word/保留字reserved word
?关键字(keyword)的定义和特点 ?定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词) ?特点:关键字中所有字母都为小写
?官方地址: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
- 标识符Identifier
?标识符:
?Java 对各种变量、方法和类,接口,包等要素命名时使用的字符序列称为标识符 ?技巧:凡是自己可以起名字的地方都叫标识符。
- 组成和注意事项
?定义合法标识符规则:
?由26个英文字母大小写,0-9 ,_或 $ 组成
?数字不可以开头。
?不可以使用关键字和保留字,但能包含关键字和保留字。
?Java中严格区分大小写,长度无限制。 ?标识符不能包含空格。
- 命名规则
?Java中的名称命名规范:
?包名:多单词组成时所有字母都小写:xxxyyyzzz
?类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz (大驼峰)
?变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个 单词首字母大写:xxxYyyZzz (小驼峰)
?常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
? 注意1:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
? 注意2:java采用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用。
- 常用内部类API(直接可用的功能)
API写好的
直接拿过来用
- 输入scanner/输出print
scanner键盘录入提高交互性
使用:
1导包,写好的直接用(放在class上面)
import java.util.scanner
2创建对象
scanner sc = new Scanner(System.in)
这一步可快速导包
System.out.println("请输入一个数据:")
3接收数据
int x = sc.nexInt
System.out.println(x)
println 输出再换行
print不换行
控制台程序
- Random随机生成
Random类 生成随机数 用法同scanner
创建对象:
Random rd = new Random();
获取随机数:
Int num = rd.nextline(20);
-0-19不包括20
-contrl+shift+O导入包
产生1-50的随机数:
Int num = rd.nextline(50)+1;
获取多次随机数,中间加入循环语句:
for(int i=1, i<20, i++){
sys...
}
练习
- ...
- Java中的内存分配
Java中的内存分配:程序在执行过程中,需要在内存中分配空间。为了提高运算效果,对内存空间进行了不同区域的划分,每一片区域都有特定的处理数据的方式和内存管理方式。
栈:储存局部变量:定义在方法中的变量
堆:存储new出来的东西,实例对象:每一个对象都有地址值;每一个对象数据都有默认值,byte,short,int,long是0,float,double是0.0,char是\u000,boolean是false,引用是null。
方法区:面向对象的。。。
本地方法区:和系统有关
寄存器:给cpu使用
空指针问题:
array = null 数组已经不指向堆内存数据,无法再访问到,空指针问题
- 栈内存Stack
- 堆内存Heap
- new
- 方法区
- 变量/常量
java变量是有类型的
在使用变量前必须定义(初始化)
- 变量概念
?变量的概念:
?内存中的一个存储区域 ?该区域的数据可以在同一类型范围内不断变化 ?变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值
表达式:
数据类型 变量名 = 存储的值(初始化值)
final 数据类型 变量名 =
final变量不能被更改
?变量的作用:
?用于在内存中保存数据
?使用变量注意:
?Java中每个变量必须先声明,后使用 ?使用变量名来访问这块区域的数据
?变量的作用域:其定义所在的一对{ }内 ?变量只有在其作用域内才有效
?同一个作用域内,不能定义重名的变量
- 变量表达式
?声明变量
? 语法:<数据类型> <变量名称>
? 例如:int var;
? 变量的赋值
? 语法:<变量名称> = <值>
? 例如:var = 10;
? 声明和赋值变量
? 语法: <数据类型> <变量名> = <初始化值>
? 例如:int var = 10;
- 标识符
- 标识符命名
- 变量注意
1.变量必须先声明、赋值之后再使用。
2.变量都有所定义的作用域,一对{}内。
3.同一个作用域内不可以声明两个同名的变量。
?使用变量注意:
?Java中每个变量必须先声明,后使用
?使用变量名来访问这块区域的数据
?变量的作用域:其定义所在的一对{ }内
?变量只有在其作用域内才有效
?同一个作用域内,不能定义重名的变量
- 变量的分类
- 按数据类型不同
?对于每一种数据都定义了明确的具体数据类型(强类型语言),在内存中分变量的分类-按数据类型 配了不同大小的内存空间。
- 基本数据类型primitive
8种基本数据类型
- 数值型
- 整数类型
正负都可以
?Java各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保 证java程序的可移植性。
?java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’
?java程序中变量通常声明为int型,除非不足以表示较大的数,才使用long
类型 占用存储空间 表数范围
byte 1字节=8bit位 -128 ~ 127
(一个byte表256个数,负128正127)
short 2字节=16位 -215 ~215-1
int 4字节 -231 ~ 231-1 (约21亿)
long 8字节 -263 ~ 263-1
500MB
1MB = 1024KB
1KB= 1024B
B= byte ? bit?
bit: 计算机中的最小存储单位。
byte:计算机中基本存储单元。
- byte, short, int, long
byte b1 = 12;
byte b2 = -128;
short s1 = 123;
int i1 = 1234;
long l1 = 343556736225L;
- 浮点类型
?与整数类型类似,Java 浮点类型也有固定的表数范围和字段长度,不受具体操作
系统的影响。
?浮点型常量有两种表示形式:
? 十进制数形式:如:5.12 512.0f .512 (必须有小数点) ? 科学计数法形式:如:5.12e2 512E2 100E-2
? float:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。 double:双精度,精度是float的两倍。通常采用此类型。
? Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’。
- float, double
类型 占用存储空间 表数范围
单精度float 4字节
-3.403E38 ~ 3.403E38
双精度double 8字节
-1.798E308 ~ 1.798E308
- 字符型
?char 型数据用来表示通常意义上“字符”(2字节)
字符类型:char ?Java中的所有字符都使用Unicode编码,故一个字符可以存储一个字
母,一个汉字,或其他书面语的一个字符。
?字符型变量的三种表现形式:
?字符常量是用单引号(‘ ’)括起来的单个字符定义声明。例如:char c1 = ‘a‘; char c2 = ‘中‘; char c3 = ‘9‘;
? Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。 例如:char c3 = ‘\n’; // ‘\n‘表示换行符
?直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表 一个十六进制整数。如:\u000a 表示 \n。
?char类型是可以进行运算的。因为它都对应有Unicode码。
- char
char c2 = ‘1‘;
char c3 = ‘中‘;
可以声明为转义字符:
? Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。 例如:char c3 = ‘\n’; // ‘\n‘表示换行符
c5 = ‘\t‘; 表示制表符tab键
?char类型是可以进行运算的。因为它都对应有Unicode码。 (ascII码)【字符编码集】
char c6 = ‘\u0043‘;
- 字符编码集
计算机的底层都是二进制的码
- ascII码
- unicode
- utf-8
- GBK-ANSI
- 布尔型
- boolean:true/false
true,1
false,0
?boolean 类型用来判断逻辑条件,一般用于程序流程控制:
?if条件控制语句; ?while循环控制语句; ?do-while循环控制语句; ?for循环控制语句;
?boolean类型数据只允许取值true和false,无null。
?不可以使用0或非 0 的整数替代false和true,这点和C语言不同。
?Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达所操作的 boolean值,在编译之后都使用java虚拟机中的int数据类型来代替:true用1表示,false 用0表示。———《java虚拟机规范 8版》
- 基本类型转换/运算
不包含boolean类型,只有其他7种类参与转换、计算。
- 算数运算
7种
- 自动类型提升
当容量小的数据类型与容量大的数据类型的变量做各种运算时,结果自动提升为大的类型。
往高级的靠,不然会精度损失,一部分值存不下来。。。
此时的容量大小指的是,表示数的范围的大小。比如float>long。
char =int />short
自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容
量大小排序为:
byte,char,short->int->long->float->double
?有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的 那种数据类型,然后再进行计算。
?byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
?boolean类型不能与其它数据类型运算。
- byte,char,short->int->long->float->double
特别的:当byte,char,short三种类型的变量做运算时,结果为int类型。同种类型做运算结果也是int型来接收。
- 强制类型转换:损失精度
?需要使用强转符()
?自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使 用时要加上强制转换符:(),但可能造成精度降低或溢出,格外要注意。
?如果本来的数据就小,就没有精度损失
?boolean类型不可以转换为其它的数据类型。
- 使用强转符()
小数点是截断,不是四舍五入,损失了精度。
int i1 = 128;
byte b = (byte)i1;
System.out.println(b);
结果为-128(用二进制来解释)
- 两个特殊情况
编码情况1:
long 1 = 123213; (int转long可以)
long 2 = 278945872950802;(不加L就不行超过int了)
float f1 = 12.3;(不加F是double比float大不能自动转换)
编码情况2:
整型常量,默认类型为int型
浮点型常量,默认类型为double型
- 连接运算
8种
+前后只要有一个类型是string,就是连接的。
- 基本数据类型+“字符串”
?当把任何(8种)基本数据类型的值和字符串(String)进行连接运算时(+连接符号),基本数据类 型的值将自动转化为字符串(String)类型。
? String不是基本数据类型,属于引用数据类型
? 使用方式与基本数据类型一致。例如:String str = “abcd”;
? 一个字符串可以串接另一个字符串,也可以直接串接其他类型的数据。例如:
str = str + “xyz” ;
int n = 100;
str = str + n;
?通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可 以实现把字符串转换成基本类型。
?如: String a = “43”; int i = Integer.parseInt(a);
“”可以
’‘不可以
’ ‘可以,存了个空格
- 变量之进制
? 所有数字在计算机底层都以二进制形式存在。
? 对于整数,有四种表示方式:
?二进制(binary):0,1 ,满2进1.以0b或0B开头。 ?十进制(decimal):0-9 ,满10进1。 ?八进制(octal):0-7 ,满8进1. 以数字0开头表示。
?十六进制(hex):0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。 如:0x21AF +1= 0X21B0
呈现出来的都是十进制
- 二进制0b/0B
int num1 = ob110; 6
- 十进制
int num2 = 110; 110
- 八进制0
int num3 = 0127; 87
- 十六进制0x/0X
int num4 = 0x110A; 4362
- 进制转化
- 二与十
- 二与八和十六
- 引用数据类型reference
- 数组Array
Java数组时一种数据的容器
1.数组中的元素数据类型相同
2.数组长度length,即有多少个数组
3.元素数据有排序位置:索引(从0开始,长度-1)
数组可以存储多个变量。是可以存储多个相同数据类型(元素)的有序容器。
基本数据类型,引用数据类型
- 创建数组
? 一维数组的声明方式: type var[] 或 type[] var;
?例如:
int a[];
int[] a1;
double b[];
String[] c; //引用类型变量数组
? Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a[5]; //非法
创建定义数组格式:
数据类型 []数组名; --多用这个
数据类型 数组名[];
1 第一种定义方式, 定义的同时给赋了初始值, 也是第一种赋值方式:
int[] arr = {1,2,3,4,5,6,7,8,9,10}; 其实这是一种连写,本质是是两个步 骤:
第一步: int[] arr; //定义或叫声明一个 整数类型的数组变量 arr
第二步:arr = {1,2,3,4,5,6,7,8,9,10}; // 给整数类型的数组变量 arr 赋值, 注意可以这样理解,但是没这种赋值的语法
2 第二种定义方式, 和第一种本质一样,只是写法不一样:
int[] arr = new int[]{20,30,40}; // 可以理解第一种写法是这种写法的
简化,省略new int[]关键字
3 第三种定义方式, 定义就只是定义, 没给赋初始值:
int[] arr = new int[3]; // 定义数组变量的时候没赋值,必须要指定数组的
长度
定义好数组变量后, 可以这样给单个单个数组元素赋值, 这是第三种赋值方式: arr[0] = 11;
arr[1] = 12;
arr[2] = 13;
给数组元素赋值,除了可以直接用字面量常数外,也是可以赋值另一个变量的。 int a = 10;
int b = 20 ;
// 这样是可以的,因为a和b都是int类型——
arr[0] = a; arr[1] = b;
- 初始化数组
定义之后并没有储存
数组初始化:为数组开辟内存空间,并为数组中的每个元素赋予初始化值
两种方式:数值为0
1.动态初始化 只需要给出数组的长度,系统会默认给出初始化值。
数类型[] 数组名 = new 数类型[长度]
int[] array = new int[10]
2.静态初始化 可以直接给出初始化值,由系统决定数组长度,数组元素个数。
[]:声明这是一个数组
new:为数组申请内存分配的,开辟内存空间,堆空间储存
- 动态初始化
动态初始化:
int[] array = new int [3]
array[0]=1
array[1]=2
array[2]=3
- 静态初始化
指定每个数组元素的初始化值,长度由系统决定
数据类型[]数组名=new 数据类型[]{元素1,2,3}
- 数组内存
栈:储存局部变量:定义在方法中的变量
堆:存储new出来的东西,实例对象:每一个对象都有地址值;每一个对象数据都有默认值,byte,short,int,long是0,float,double是0.0,char是\u000,boolean是false,引用是null。
- 默认初始值
?对于基本数据类型而言,默认初始化值各有不同 ?对于引用数据类型而言,默认初始化值为null(注意与0不同!)
- 一个数组
- 两个数组
- 两个数组指向同一个地址
一个数组地址赋值给第二个,两个数组指向同一个地址。
int[] array2= array1;
- 数组中元素的获取
直接输出数组名获取的是地址值。
我们想获取数组中的元素,数组中每个元素都是有编号(索引下标)的,从0开始,最大的编号是数组长度-1。
数组名[索引]
获取数组的长度(个数)
array.length
- 取值
取值: 取出数组元素的值是通过数组的变量名+索引值的方式取出,
语法: 变量名 [索引值]
System.out.println(array[0])
System.out.println(array)
直接打印输出数组名获取的是数组的地址值。
- 数组遍历
获得数组中所有数据
遍历:依次输出数据中的每一个元素
通过for循环实现
数组的遍历:
1、for循环
for(int i = 0 ; i < arr.length; i++){ System.out.println(arr[i]);
}
2、foreach循环
for(int i:arr){ System.out.println(i);
}
- 获取最值
获取最大值、最小值
int max = array[0]
for.....
if(array[x]>max){
max=array[x];
- 数组类型
- 一维数组
- 二维数组
- 二维数组遍历
- 多维数组
- 面向对象数组
通过数组类的构造方法构造数组:
public static void main...
class ArrayClass{
用类的属性封装数组变量
private long[] arr;
private int nElems;当前存在数组长度
用构造函数初始化数组
public ArrayClass(int maxSize){最大长度
arr=new long[maxSize];
nElems=0;
}
}
}
- 类Class
- 字符串string类
使用方式与基本数据类型一致。例如:String str = “abcd”;
- ....
- 接口API(interface)
- 按声明的位置不同
? 在方法体外,类体内声明的变量称为成员变量。
? 在方法体内部声明的变量称为局部变量。
●注意:二者在初始化值方面的异同:
同:都有生命周期
异:局部变量除形参外,需显式初始化。
- 成员变量
- 实例变量(不以static修饰)
- 类变量(以static修饰)
- 局部变量
- 代码块局部变量(在代码内定义)
- 方法局部变量(在方法内定义)
- 形参(方法、构造器中定义的变量)
- 运算符
运算符是对常量和变量进行代码操作的符号
- 算数运算符
- +, -, *, / ,%, ++ ,--
1.整数相除/只能得到整数
2.字符串”“参与+运算实际上是拼接
3.字符参与运算是字符在计算机里储存的数据值参与运算A=65 a=97
4.自增自减运算符++,--对变量做加1减1操作(++a/a++),前++和后++。
5.自增自减运算符既可以放在变量的后面使用,也可以放在前面。单独使用,无论放在前面还是后面,结果一样。
6.参与运算时,放在后面,变量先做操作再做加减1;放在前面,先做加减1再做操作。
ia = 3;
int ib = ia++
ib=3
intid =++ia
ib=4
--------
System.out.println(ia++);//4(结束以后ia是5)
System.out.println(++Ia);//6(5+1=6)
7.%取余运算符,模
- 除以/
除号/
int num1 = 12;
int num2 = 5;
int result = num1 / num2; //2
int result2 = num1 / num2 * num2; //10
double result3 = num1 / num2; //2.0
double result4 = num1 / num2 + 0.0; //2.0
double result5 = num1 / (num2 + 0.0);//2.4
double result6 = (double)num1 / num2;
- 取模%
最终结果的符号和被模数一样。
开发中,经常使用%来判断能否被除尽的情况。
- 自加子减++,--
自增1
先自增1,然后再运行。
前++
前--
先运行,然后再自增1。
后++
后--
自增1不会改变本身的数据类型
short s1 = 10;
s1 = s1 + 1; //编译失败
s1 = (short) (s1 + 1); //right
s1++; result will be short type.
开发中需要自增1都用++
byte bb1 = 127;
bb1++; //-128(originally)
- 前++,后++
- 前--,后--
- 字符串连接+(见上)
- 赋值运算符
- 简单赋值运算符=
int a = 10
把10赋值给int类型变量a
符号:=
?当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制 类型转换原则进行处理。
?支持连续赋值。
i2 = j2 = 10;
i3 =10, j3 = 20;
- 复合赋值运算符+=,-=,*=,/=,%=
加赋值,减赋值,。。。。取余赋值
- 关系/比较运算符
- ==, !=, >, <, >=, <=
1.用来比较两个表达式大小或值大小关系的标识符,
2.关系运算符的结果是boolean类型的:true,false
3.不支持10<= ia <= 99这种语法格式
通过逻辑运算符来处理
boolean = c = (a==b)
System.out.println(c)
- 逻辑运算符
- &&(与) ||(或)!(非)
操作数为boolean表达式
&&与 相当于并且 同真为真 一假为假
||或 相当于或者 一真为真 同假为假
!非 相当于取反 真为假 假为真
- 条件/三元(目)运算符
- (a>b)?a:b
语法格式:
条件表达式?表达式1:表达式2;
执行流程
先来计算关系表达式的结果,看是true还是false
若成立true,则执行表达式1
若不成立false ,则执行表达式2
int a = 10
int b =20
in c = (a>b)?a:b
temp max
- 位运算符
- 位移运算符
- 运算符之间的优先级
- 流程控制语句
- 顺序结构
- 选择结构
1.if语句
第一种格式:
if(关系表达式){
语句体;
}
true执行 false不执行语句体
第二种格式:两种情况判断
if(关系表达式){
语句体1;
}else{
语句体2;
}
第三种格式:多种情况判断
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}else if(关系表达式3){
语句体3;
}
...
else{语句体你;
}
2.switch语句,依次比较
switch(){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
...
default:
语句体n;
break
}
格式说明:
表达式:byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是字符串
Case的值:就是用来和表达式进行匹配的
break:中断的意思,没有会穿透
default:最后都不满足执行的语句体
枚举:
enum Colour{green,yellow,red
}
switch(Colour.red)
- if
1.if语句
第一种格式:
if(关系表达式){
语句体;
}
true执行 false不执行语句体
第二种格式:两种情况判断
if(关系表达式){
语句体1;
}else{
语句体2;
}
第三种格式:多种情况判断
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}else if(关系表达式3){
语句体3;
}
...
else{语句体你;
}
- switch
2.switch语句,依次比较
switch(){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
...
default:
语句体n;
break
}
格式说明:
表达式:byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是字符串
Case的值:就是用来和表达式进行匹配的
break:中断的意思,没有会穿透
default:最后都不满足执行的语句体
枚举:
enum Colour{green,yellow,red
}
switch(Colour.red)
- break停止
- 循环结构
实战开发中用的最多的,需要反复执行某一段代码时使用
4个组成:
初始化语句
判断条件语句:关系表达式
控制条件语句:循环执行部分
循环语句:循环结束后++--
三种循环语句
1.for循环
2.while循环
3.do...while循环
- for
for(初始化;判断条件;控制条件){
循环体语句;
}
执行流程:
1.初始化语句
2.判断条件语句 false结束 true继续
3.执行循环体语句
4.执行控制条件语句
5.回到第二部继续
for(i=1, i>+10, i++){
循环体语句
}
练习
求1-100的和
偶数和
- while
初始化语句
while(判断条件语句){
循环体语句
控制条件语句
}
int 1 = 1
while(i>+10){
sys....
i++/break
}
成立就继续执行
while(true){
循环体语句
break
}
练习1-100的和
- continue跳过
在循环语句中使用,离开循环场景无法使用
for(int i=1,i<+10, i++){
if(i==5){
continue
}
}
t跳过第5次循环
- do...while
原文:https://www.cnblogs.com/florencew512/p/14529252.html