1.Java基础语法

1.概述

1.1 大数据

  • 海量数据,具有高增长率、数据类型多样化、一定时间内无法使用常规软件工具进行捕捉、管理和处理的数据集合
  • 大数据=海量数据+复杂类型

1.2 特征

1.3 应用

数据采集-数据存储-数据清洗-数据分析-数据可视化》》》》记录-描述-预测

2.Java

2.1 发展历程

  • Sun Microsystems于1995年推出
  • 1996年发布JDK1.0
  • 1999年发布J2SE、J2EE、J2ME
  • 2005年更名为Java SE、Java EE、Java ME
  • 2009年被Oracle收购
  • 2014年发布Java8.0

2.2 特点

  • 面向对象:使用计算机模拟现实世界、解决现实问题
  • 简单:不易造成内存溢出,减少代码量,代码可读性强 (相较于C、C++、C#)
  • ★跨平台:跨系统、服务器

2.3 执行机制

*.java →(编译)→ .class →(运行)→ JVM for Windows/Linux/MacOS/Others

  • 将源文件编译成字节码文件(平台中立文件、.class),再将字节码进行解释执行

2.4 相关名词

  • JDK(Java Development Kit)开发环境:包含JRE、类库、开发工具包
  • JRE(Java Runtime Enviroment)运行环境:包含JVM和解释器,完整的Java运行环境
  • JVM(Java Virtual Machine)虚拟机:在不同系统中模拟相同环境

2.5 环境搭建

jdk安装及Java环境变量配置说明文档.docx

2.6 第一个Java程序

​ 源文件:

class First{
	public static void main(String[] args){
		System.out.println("HelloWord!");
    }
}   	

​ ↓

编译:javac First.java

​ ↓

​ 运行:java First

​ ↓

结果:Hello, world

2.7 开发软件

  • IDEA Version2019.3

3.进制

3.1 概念

  • 进位计数制,是一种计数方法

3.2 分类

  • 二进制:用数字0和1表示所有自然数,逢2进1,用“0b”开头
  • 十进制:用数字0~9表示所有自然数,逢10进1
  • 八进制:用数字0~7表示所有自然数,逢8进1,用“0”开头
  • 十六进制:用数字09和字母af表示所有自然数,逢16进1,用“0x”开头

3.3 转换★

  • 十进制数字转成其他进制:辗转相除法

  • 其他进制转成十进制:累加法

    例:0b10010 = 1*2^4 + 1*2^1 = 18 022 = 2*8^1 + 2*8^0 = 18

  • A进制转成B进制:先将A进制转成十进制,让后将十进制转成B进制

  • 二进制与八进制、十六进制相互转换:

    1个八进制位可等价替换成3个二进制位

    例:0b001 101 010 101 110 010 = 0152562

    1个十六进制位可等价替换成4个二进制位

    例:0b0011 1010 0101 1101 1100 1110 1010 = 0x3A5DCEA

3.4 常用表

二进制 八进制 十进制 十六进制
1 1 1 1
10 2 2 2
11 3 3 3
100 4 4 4
101 5 5 5
110 6 6 6
111 7 7 7
1000 10 8 8
1001 11 9 9
1010 12 10 a
1011 13 11 b
1100 14 12 c
1101 15 13 d
1110 16 14 e
1111 17 15 f
10000 20 16 10

3.5 数据存储

  • bit(位)->byte(字节)->Kb->Mb->Gb->Tb->Pb->Eb->Zb->……

  • 1 btye=8 bit 1Kb=1024byte

  • 负数的表示:第一位是符号位

    -100 = 0b1110 0100

    200 = 0b0000 0000 1100 1000;

    0b1100 1000表示200,但是在计算机中存的是 - 0b100 1000

  • 在用二进制表示数字时,通常会写满1个字节(8位,00000001);如果1个字节表示不了,使用2个字节

  • 注意:对于大于127的正数,其二进制表示的第8位是1,但其符号位应是0,这表示1个字节已经无法表示该数字,故应用2个字节

    15 = 0b0000 1111

    128 = 0b0000 0000 1000 0000

3.6 原反补★

  • 计算机使用二进制存储、计算数字时,因为符号位的存在,直接计算会出现错误。为了规避符号位对计算产生的影响,人们发明了补码
  • 所有的二进制数字在计算机中存储和计算时均用补码
  • 浮点型底层存储采用科学计数法 3.14 => 31410^-2 开辟两个空间,一个存整数部分,一个存次幂部分
  • 对于正数而言,原码、反码、补码相同
  • 对于负数而言,反码的符号位不变、其他位取反(包括扩展的0);补码是反码+1

26 = 16 + 8 + 2 => 0000 1010 ;原反补相同

-26 = -(16 + 8 + 2) => [原]1000 1010 =>[反]1111 0101 => [补]1111 0110

-200 = -(128 + 64 + 8) => [原]1000 0000 1100 1000=> [反]1111 1111 0011 0111 => [补]1111 111 0011 1000

  • 计算机中的加、减法计算方法

8 + 4 = 0000 1000 + 0000 0100 = 0000 1100 = 12

8 - 4 = 0000 1000 + 1111 1100 = 1 0000 0100 == 0000 0100 = 4 //出现溢出,溢出位不要!

4 - 8 = 0000 0100 + 1111 1000 = 1111 1100 ==> [原]1000 0100 => -4 //补码以1开头,说明是负数

  • 由补码求原码:补码的补码是原码(补码求反再加1)
  • 注意:

1111 1111 => 1000 0001 => -1

1111 1110 => 1000 0010 => -2

1111 1101 => 1000 0011 => -3

...

1000 0001 => 1111 1111 => -127

1000 0000 => 0000 0000 => -0 => 约定表示-128

  • 区分清楚是现实中的二进制表示,还是在计算机中的存储!

4.编码规范

4.1 注释

  • 对某一段代码的批注,不是给用户看的而是给程序员看的

  • 单行注释:只对一行的内容生效,在这一行最前方加“//”

  • 多行注释:对某一段内容生效,以“/”开头,以“/”结束

  • 文档注释:常作用于类前、方法前,表示对类、方法的描述,以“/**”开头,以"*/"结束

5.基础语法

5.1 基本数据类型

  • 8位存储的最大数字 0b0111 1111 = 127

  • 整形取值范围:-2的(位数-1)次幂 到 2的(位数-1)次幂-1

  • ASCII码

5.2 标识符

5.2.1 概念

  • 由字母、数字、下划线和$组成的一个有序的字符序列,用来表示程序中的一个数据

5.2.2 命名规范

  • 不能以数字开头、不能与系统关键字和保留字重名、在Java中标识符区分大小写

  • 望文知意

  • 驼峰(camel)命名法:首单词除外,其余单词首字母大写

  • 类名、文件名采用大驼峰命名法/Pascal法

  • 禁止使用拼音、一般不用$

5.3 变量、常量

扩展:

1.内存是瞬时状态下的存储空间,造价高、设计难

2.Java虚拟机(Java程序)默认分配到的物理内存是电脑内存的1/8

类型 关键字 大小 取值范围 取值范围
字节型 byte 1字节 二进制 [-27,27-1] 十进制 [-128,127]
短整型 short 2字节 [-215,215-1] [-32768,32767]
整型 int 4字节 [-231,231-1] 十亿级别
长整型 long 8字节 [-263,263-1]
单精度浮点型 float 4字节
双精度浮点型 double 8字节
布尔 boolean 1字节 true false
字符 char 2字节 Unicode码 0~65535

5.3.1 概念

  • 计算机内存中的一块存储空间,是存储数据的基本单元。

5.3.2 定义语法

  • 变量 int a,b;
  • 常量 final int a = 10;

5.4 不同数据类型的变量的定义及使用★

5.4.1 整型

  • 赋值时要考虑该类型的取值范围,整型字面量最大能到2^31-1;
  • 如果需要写更大的数字(即用long型),需在后面加“L”

5.4.2 浮点型

  • 给float变量赋值时,需要在字面量最后加“f”或“F”
  • 小数字面量默认的类型是double
  • 可用科学计数法给浮点型数据赋值

5.4.3 布尔型

5.4.4 字符型

  • 字符需要写在单引号内,且单引号内有且只能有一个字符

5.4.5 字符串

  • 字符串需要写在双引号内,双引号内字符数量不限

5.5 引用数据类型

  • 字符串:String--" 任意字符 "
  • 数组
  • 类

5.6 转义字符

5.6.1 语法

  • “ \ ”

5.6.2 用法

  • 配合某些具有特殊含义的字符使用,使其没有特殊含义,变成一个普通字符
  • 配合某些普通字符使用,使其具有特殊含义;

如: \n:换行符 \r:回车符 \t:制表符 \d:退格符

5.7 数据类型转换★

5.7.1 概念

  • 定义一个不同类型的新变量,然后将原变量赋值给该变量

5.7.2 分类

  • 自动类型转换:取值范围小的数据类型转型为取值范围打的数据类型

  • 强制类型转换:取值范围⼤的数据类型向取值范围小的数据类型转型

    整型转成字符:char c = (char)num;

    整型转成字符串:String s = num + "";

5.8 自动类型提升

5.8.1 定义

  • 使用运算符连接的变量或字面值,并可以得到一个最终结果的语句成为表达式

5.8.2 规则

  • 两个操作数有一个为double时,结果提升为double;
  • 如果操作数中没有double,但有一个float,结果提升为float;
  • 如果操作数中没有float,但有一个long,结果提升为long;
  • 如果操作数中没有long,但有一个int,结果提升为int;
  • 如果操作数中没有int,均为short、byte、char,结果提升为int;

5.8.3 注意

  • 任何类型与String相加(+)时,实为拼接,结果提升为String;

5.8.4 运算符与拼接的优先级

  • “数字+数字+字符串”,运算顺序从左到右,第一个+表示加法运算,第二个+表示拼接;
  • “字符串+数字+数字”,此时俩个+均表示拼接
  • float、double、long、int与char相加,等价于与char对应Unicode码相加,结果的类型取决于与char相加的变量的类型

5.9 运算符

操作符 描述 操作符 描述
算数 + 赋值 = 直接赋值
运算符 - 运算符 += 求和赋值
* -+ 求差赋值
/ *= 求积赋值
% 模 /+ 求商赋值
++ 递增+1 %= 求余赋值
-- 递减-1 逻辑 & 与
关系 >= 运算符 | 或
运算符 <= ! 非
== ^ 异或
!=
三目运算符 ? 1:2 true时 结果1 false时 结果2

5.9.1 基本介绍

  • 算数运算符:

    • 整型和整型的计算结果还是整型;对于除法,只保留整数部分

    • ★★自增、自减

      ++a表示先进行加1运算,然后再使用这个值;++a的优先级最高

      a++表示先取a的值,运用到别的函数中,再对a进行加1运算;a++的优先级最低

    • 加号的特殊用法:字符串的拼接算数的顺序是从左到右,故当有3个及以上“+”时,字符串后面出现的“+”均变成“拼接”

  • 赋值运算符:是有运算结果的,赋值运算的结果是赋值完成后这个变量的值

  • 逻辑运算符:

    • 参与运算的一定是boolean型变量
    • &&:短路与操作,运算结果与&完全相同;
    • ||:短路或操作,运算结果与|完全相同
    • 短路操作:如果逻辑运算符的前半部分已经可以决定整体的结果,则此时右半部分将不参与运算
    • ^ :异或,同为true时结果为fales
  • 位运算符:

    • 概念:将两个整型数字分别求出补码,将补码中的每一位进行类似与逻辑预算的操作;1相当于true,0相当于false
    • x&y:位与
    • x|y:位或
    • x^y:位异或
    • ~y:按位取反
  • 位移(移位)运算符:

    • <<:将补码中的每一位依次向左移动指定位数;在最右侧位补0,左侧溢出位直接删除;每向左移动一位,都相当于这个数字*2

      System.out.println(10 << 2); //10:0000 1010 -- 0010 1000 :48
      
    • >>:将补码中的每一位依次向左移动指定位数;在最左侧位补符号位,;每向右移动一位,都相当于这个数字除2,但这里遵循“向下取整”

      System.out.println(10 >> 2);   //10:0000 1010 -- 0000 0010 :2
      System.out.println(-9 >> 2);   //移符号位、向下取整
      
    • >>>:无符号位右移;将补码中的每一位依次向左移动指定位数;在最左侧位补0

  • 三目运算符:布尔表达式? 结果1 : 结果2;true时输出结果1,false时输出结果2

    char c = c1 > cs ? c1 : c2;
    //c1 > c2 ? c = c1 : c = c2;  报错!
    

5.9.2 运算符的分类

  • 一元运算符:++ -- ! ~ + -
  • 二元运算符:+ - * / % > < <= >= ...
  • 三元运算符:三目运算符

5.9.3 运算符的优先级(priority of operations)

  • 一元运算符 > 二元运算符 > 三元运算符 > 赋值运算符
  • 算术运算符:乘、除、模 > 加、减
  • 逻辑运算符:非 > 与 > 或、异或
  • 赋值运算符:优先级最低;只有当等号后侧所有逻辑都执行完了,才会给变量赋值
  • 括号:优先级最高

5.10 控制台输入

5.10.1 Scanner包

  • 控制台输入,其实是将输入的内容放在了一个“缓冲区”,使用方法读取输入内容的时候,其实是从“缓冲区”读取的
  • 读取表示调走,即调用并将该内容从“缓冲区”删除
  • nextLine():从缓冲区中读取一行数据,读取到换行符时结束,包括换行符
  • next():从缓冲区中读取一个单词字符串,读取到换行符或者空格时结束,包括换行符和空格
  • nextInt()、nextDouble()、nextFloat()...:使用next()方法,将从缓冲区中读取的一个单词字符串

“缓冲区”实质上是IO流,之后会讲

5.11 局部变量

5.11.1 概念

  • 定义在某个方法或者某一个代码段中的变量

    全局变量:定义在某个类中,与方法平级的变量

5.11.2 作用域

  • 从声明行开始,到声明所在的代码段(大括号)结束

5.11.3 使用方式

  • 每个局部变量必须赋值,否则无法调用
  • 每个局部变量都有自己的作用域(即该局部变量的作用范围),在该范围内,可以使用这个变量,且不许再出现同名的变量
posted @ 2020-04-13 16:53  Aengus  阅读(189)  评论(0)    收藏  举报