打怪升级之小白的大数据之旅(二)
Java基础语法之环境搭建与变量
目录
上次回顾
上一次我们从计算机的语言发展史谈到Java的跨平台性,Java的基本概述已经算是差不多告一段落了,
后面,我将开始从Java的环境搭建和基础语法为大家说明, (虽然环境搭建度娘一搜一大把,我还是觉得自己既然是一个系列,那么还是事无巨细比较好)
环境搭建
如果我们仅仅只是使用Java程序,那么直接下载JRE即可,作为开发人员,我们当然需要下载Java三剑客才能完美地开始进入Java旅程
前面我们讲到, Java是跨平台的,还有Java中JDK,JRE,JVM三者的关系,这里就不多介绍了,忘记了的小伙伴们,可以回看上一章节哈~
- 首先,我们开发Java的程序,就需要下载它,不用说,我们需要下载JDK
官网地址:www.oracle.com
详细地址:https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html - 安装JDK,这里我用Windows系统举例,别的系统,度娘有~~
“傻瓜式”安装,下一步即可。安装选项中可以取消公共jre,因为jdk中包含jre。
这里,注意一下,安装的时候,看个人喜好,有的人喜好安装在系统盘,C盘,我比较喜欢将它们分门别类,我是自定义安装的~
- 安装完成后,打开cmd命令, 开始菜单--->cmd--->打开
-
我们输入java.exe,它会提示命令不存在,我们需要定位到刚刚安装的那个目录下:
cd D:\tools\java\bin
然后运行,就会出现下图结果:
这个表示安装成功,我们每次运行java都要进入这个文件夹很不方便,因此需要配置环境变量,这样,不管在哪里,打开cmd控制台就都可以运行java啦~ - 配置环境变量,(为了方便java程序在当前操作系统的任何位置都可以运行),复制安装目录
开发工具javac.exe等安装到了指定目录jdk\bin,使用时需要切换到指定目录bin下,配置环境变量可以在任意目录使用javac.exe等工具。后期也有一些基于java相关软件默认会通过环境变量配置寻找java。
计算机---->属性
打开系统属性---->设置环境变量
设置系统环境变量,也可以设置成用户变量,两者都可以~
新建一个系统变量,为了防止多个Java版本,因此,我们这样设置
新建系统变量后,我们需要将java的那个java.exe所在目录添加到path中,告诉windows,java.exe在哪里
将我们的bin文件夹也就是java.exe所在目录添加到系统变量path中
OK,大功告成~这下我们就可以在Windows的任何地方运行java代码啦~
注:Java 自 java se 8 bu211版本之后开始收费
java环境卸载 控制面板--卸载
基础语法(一)
第一个入门程序,Java我来啦~
要想写Java程序,我们首先需要知道java程序的运行逻辑:
上图就是它的运行逻辑,我来拆解翻译一下:
- 编写源代码, 保存为java文件
- 编译java程序 ,执行javac命令,生成.class字节码文件
- 运行java程序 执行Java命令
简单吧,写完后,使用javac命令,生成字节码文件,这个字节码文件就是告诉计算机,我们需要它做什么,这个字节码文件就类似前面所说的机器的语言~
然后我们再运行这个.class字节码文件,就可以看到我们java程序的运行结果了~
话不多说,我们开始写属于自己的第一个Java程序:
不要问为啥打马赛克~我就是要打~
hello world 是所有语言程序的第一个开始,当你成功运行并输出结果后,意味着你已经迈进了Java程序的世界了~~
Java入门程序常见的一些问题及解决办法
常见问题及解决
1. 代码拼写错误
- 单词拼写问题,Java语言是一门严格区分大小写的语言
- 正确:class 错误:Class
- 正确:String 错误:string
- 正确:System 错误:system
- 正确:main 错误:mian
- 标点符号使用问题
- 不能用中文符号,英文半角的标点符号(正确)
- 括号问题,要成对出现
2. 源文件名问题
源文件名有问题会导致编译时找不到文件
可能的原因:
- 文件路径错误
- 文件名拼写错误
- 文件名后缀不是.java
- 类名声明为public时,要与文件名相同
注意:一个源文件中可以有多个类,编译后会生成多个.class字节码文件。但是一个源文件只能有一个public的类。如果这个类是public,那么要求源文件名必须与类名一致。
3. 字符编码问题
(比如使用notepad编辑器时)
当cmd命令行窗口的字符编码与.java源文件的字符编码不一致(cmd命令行窗口默认GBK,nopad默认utf-8),如何解决?
解决方案一:
在Notepad++等编辑器中,修改源文件的字符编码
解决方案二:
在使用javac命令式,可以指定源文件的字符编码
javac -encoding utf-8 Review01.java
Java注释(annotation)
这个没什么难点,记住格式就好,注释就是方便自己方便他人的
方便自己--->未来某一天回头望,你看着写过的东西,它认识你,会发现,你不认识它~
方便他人--->别人阅读你的代码可以很愉快地知道你的思想,就想写一首美妙地诗歌~~(python之禅会告诉你)
- 注释:就是对代码的解释和说明。其目的是让人们能够更加轻松地了解代码。为代码添加注释,是十分必须要的,它不影响程序的编译和运行。
- Java中有单行注释、多行注释和文档注释
- 单行注释以 //开头,以换行结束,格式如下:
// 注释内容 - 多行注释以 /*开头,以*/结束,格式如下:
/*
注释内容
注释内容
*/ - 文档注释以/**开头,以*/结束
/**
注释内容
@author 可指定 java java程序的作者
@version 可指定源文件的版本
*/
文档注释可以被JDK提供的javadoc工具解析生成一套网页形式的说明文档,操作入下:
D:\>javadoc -d mydoc -author -version Hello.java
- 单行注释以 //开头,以换行结束,格式如下:
Java的关键字与标识符
关键字:
Java语言赋予了特殊含义的字符串(单词),关键字都是小写,共有50个
保留字: const和goto虽然不是关键字,但不建议定义
特殊值: ture false null等都是特殊值
标识符:
用于程序员声明变量、类、方法等名称的字符序列
命名规则:
1.由数字、英文字母、美元符号$、下划线_组成
2.开头不能用数字
3.不能使用关键字、保留字、特殊值
4. 严格区分大小写字母
命名规范:
1. 见名知意,英语不好的,可以借助字典,实在懒得用英文,那么拼音吧,虽然中文也可以,但没人这么做~~
2.类名、接口等命名, 一般遵循大驼峰命名规则---> XxxYyy 例如:HelloWorld
3.方法、变量命名,一般遵循小驼峰命名规则--->xxxYyy 例如:userName
4.包的命名,全小写, xxx.yyy.zzz 例如: com.atguigu.test
5.常量命名,全大写,XXX,如果多个单词,用下划线隔开,例如: HEIGHT,MAX_VALUE
Java常量与变量
常量:
概念:
程序运行过程中,其值不可改变的量
分类:
- 自定义常量:通过final关键字定义(后面在面向对象部分讲解)
- 字面值常量:
字面值常量 | 举例 |
字符串常量 | "HelloWorld" |
整数常量 | 12,-23 |
浮点常量 | 12.34 |
字符常量 | 'a','A','0','好' |
布尔常量 | true,false |
空常量 | null |
示例代码:
public class ConstantDemo {
public static void main(String[] args) {
//字符串常量
System.out.println("HelloWorld");
//整数常量
System.out.println(12);
System.out.println(-23);
//小数常量
System.out.println(12.34);
//字符常量
System.out.println('a');
System.out.println('A');
System.out.println('0');
//布尔常量
System.out.println(true);
System.out.println(false);
}
}
注意事项:
字符常量,单引号里面有且仅有一个字符
空常量,不可以在输出语句中直接打印
变量
概念:
程序运行过程中,其值可以改变的量
作用:
用来存储数据,代表内存的一块存储区域,这块内存中的值是可以改变的
- 定义格式:
- 声明变量,并同时赋值
数据类型 变量名=初始化值;
//声明并同时赋值,存储一个整数的年龄
int age = 18;
//打印输出变量值
System.out.println("age = " + age);//+号表示连接符,把""中的字符串与变量age中的数据连接进行输出
- 数据类型 变量名;
变量名=初始值;
//先声明,再赋值
int age;
age=18;
//打印输出变量值
System.out.println("age = " + age);//18
//变量可以重新赋值
age=19;
System.out.println("age = " + age);//19 - 数据类型 变量名1=初始值,变量名2=初始值;
//声明多个变量并同时赋值
int a=11,b=22;
//或者先声明再赋值
int c,d;
c=33;
d=44;
- 声明变量,并同时赋值
- 变量的使用注意事项
- 先声明后使用
如果没有声明,会报“找不到符号”错误 - 在使用之前必须初始化
如果没有初始化,会报“未初始化”错误 - 变量的作用域
作用域为变量直接所属的{}范围内,如果超过作用域,也会编译错误(找不到符号) - 在同一个作用域中不能重名
同一个作用域{}内,不能同时声明两个同名变量
- 先声明后使用
- 练习: 定义学生的基本信息,要求定义不用的数据类型的变量并输出
public class Demo{ public static void main(String[] args) { String studentName = "张三"; int age = 18; boolean isSex = true; double englishScore = 99.9; System.out.println("姓名: "+ studentName + "\n年龄: " + age + "\n是否是男生: " + "\n英语成绩: " + englishScore); } }
输出结果
Java的数据存储与二进制转换
计算机如何存储数据
计算机世界中只有二进制。那么在计算机中存储和运算的所有数据都要转为二进制。包括数字、字符、图片、声音、视频等。
进制
- 进制分类与表示方式
(1)十进制: 数字组成:0-9 进位规则:逢十进一
System.out.println(10);//10表示十进制的10,输出十进制结果10
(2)二进制: 数字组成:0-1 进位规则:逢二进一
表示方式:以0b或0B开头
System.out.println(0B10);//0B10表示二进制的10,输出十进制结果2
十进制的256,二进制:100000000,为了缩短二进制的表示,又要贴近二进制,在程序中引入八进制和十六进制
(3)八进制:很少使用 数字组成:0-7 进位规则:逢八进一
表示方式:以0开头
System.out.println(010);//010表示八进制的10,输出十进制结果8
与二进制换算规则:每三位二进制是一位八进制值
(4)十六进制 数字组成:0-9,a-f或A-F 进位规则:逢十六进一
表示方式:以0x或0X开头
System.out.println(0X10);//0x10表示十六进制的10,输出十进制结果16
与二进制换算规则:每四位二进制是一位十六进制值 - 进制的转换
十进制 | 二进制 | 八进制 | 十六进制 |
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | a或A |
11 | 1011 | 13 | b或B |
12 | 1100 | 14 | c或C |
13 | 1101 | 15 | d或D |
14 | 1110 | 16 | e或E |
15 | 1111 | 17 | f或F |
16 | 10000 | 20 | 10 |
- 任意进制转十进制
十进制的本质:123=1*10^2+2*10^1+3*10^0
系数:就是每一个位上的数值。上例中的1,2,3
基数:x进制的基数就是x。上例中的10
权:对每一个位上的数据,从右到左,并且从0开始编号,对应的编号就是该数据的权。上例中的0,1,2
任意进制转十进制:系数*基数^权次幂之和。 - 十进制转任意进制:
十进制数除以基数取余,直到商为0,余数反转。
十进制转二进制:十进制整数6除以基数2,倒序取余数,结果为二进制数110
- 快速转换方法:
- 二进制转十进制:
8421码:从右边开始依次是2的0次,2的1次,2的2次。。。。
- 二进制转十进制:
- 二进制数据转八进制数据
从右边开始,3位二进制对应1位八进制
- 二进制数据转十六进制数据
从右边开始,4位二进制对应1位十六进制
计算机存储单位
- 位(bit):是数据存储的最小单位,也就是一个二进制位。其中8 bit 就称为1个字节(Byte)。
- 字节(Byte):是计算机信息技术用于计量存储容量的一种计量单位,1字节等于8bit。
- 转换关系:
- 8 bit = 1 Byte
- 1024 Byte = 1 KB
- 1024 KB = 1 MB
- 1024 MB = 1 GB
- 1024 GB = 1 TB
二进制数据存储
计算机底层都是使用二进制进行数据的存储的。不同类型的数据,存储方式也有不同。
- 整数存储
计算机底层存储整数并不是把整数转换为二进制直接存储,而是以二进制的补码形式进行存储。要了解补码还有知道原码和反码:
原码:把十进制转为二进制,然后最高位设置为符号位,1是负数,0是正数。
反码:正整数的反码与原码相同,负整数的反码在原码的基础上,符号位不变,其余位取反(0变1,1变0)
补码:正整数的补码与原码相同,负整数的补码为其反码+1
例如:用1个字节的二进制表示一个数
25 ==> 原码 0001 1001 ==> 反码 0001 1001 -->补码 0001 1001
-25 ==>原码 1001 1001 ==> 反码1110 0110 ==>补码 1110 0111
一个字节可以存储的整数范围
分为两种情况:
(1)无符号:不考虑正负数
0000 0000 ~ 1111 1111 ==> 0~255
(2)有符号:-128~127
0000 0000 ~ 0111 111 ==> 0~127
1000 0001 ~ 1111 1111 ==> -127 ~ -1 (补码形式存储)
1000 0000 ==> -128 特殊值,最高位既是符号位,又是数值位 - 如何存储小数(了解)
- 为什么float(4个字节)比long(8个字节)的存储范围大?
- 为什么double(8个字节)比float(4个字节)精度范围大?
- 为什么float和double不精确
因为float、double底层也是二进制,先把小数转为二进制,然后把二进制表示为科学记数法,然后只保存:
①符号位②指数位③尾数位
- 如何存储字符
在计算机的内部都是二进制的0、1数据,如何让计算机可以直接识别人类文字的问题呢?就产生出了编码表的概念
编码表
就是将人类的文字和一个十进制数进行对应起来组成一张表格。例如:
|
|
|
|
|
|
|
|
|
|
|
|
- Java中字符常量的几种表示方式
(1)'一个字符'
例如:'A','0','尚'
(2)转义字符
\n:换行
\r:回车
\t:Tab键
\\:\
\":"
\':'
\b:删除键Backspace
System.out.println('\\');
System.out.println("hello\tworld\njava");
(3)\u字符的Unicode编码值的十六进制型
例如:'\u5C1A'代表'尚'
char c = '\u5C1A';
char c = '尚';
String s = '尚';//错误的,哪怕是一个字符,也要使用双引号
char c2 = '';//错误,单引号中有且只能有一个字符
String s2 = "";//可以,双引号中可以没有其他字符,表示是空字符串
(4)直接给char类型变量赋值十进制的0~65535之间的Unicode编码值
例如:'尚' 的编码值是23578
'a'的编码值是97
char c1 = 23578;
System.out.println(c1);//尚
char c2 = 97;
System.out.println(c2);//a
二进制存储整数,底层存储是补码形式,正整数原码,反码,补码都相同
总结
本章我们从环境搭建,第一个Java程序到二进制的转换,讲述的计算机存储数据的逻辑,为什么要讲二进制,因为后面的数据类型需要吖~~好了,希望大家看完有所收获~~