Java 基础
第一章 计算机概述
一、C 语言的编译运行过程
C语言的编译运行过程:-------效率高、与操作系统相关
.c源文件,经过编译,直接生成可执行文件(0和1)
QQ是用C语言写的:
Windows版的QQ-----------------运行在Windows系统上
Linux版的QQ-------------------运行在Linux系统上
IOS版的QQ---------------------运行在IOS系统上
???版的QQ---------------------运行在???系统上
不同操作系统的指令是不同的:
Windows系统:
你----------------01010101
Linux系统:
你----------------11110011
IOS系统:
你----------------00111100
二、Java 的编译运行过程
java编译运行过程:------------------------------效率稍低、
1).java源文件,经过编译,生成.class字节码文件
2)JVM加载.class并运行.class(0和1)
假设QQ是用Java语言写的:
java版的QQ,经过编译,生成.class字节码文件
1)Windows装JVM-----------运行在Windows系统上
2)Linux装JVM-------------运行在Linux系统上
3)IOS装JVM---------------运行在IOS系统上
4)???装JVM---------------运行在???系统上
跨平台、一次编程到处使用
银行系统------用Java语言写的(上亿的资金)
银行服务器----------------Windows系统
银行服务器----------------Linux系统
银行服务器----------------IOS系统
三、Java 开发环境
1. Java编译运行过程
- 编译期:.java源文件,经过编译,生成.class字节码文件
- 运行期:JVM加载.class并运行.class(0和1)
- 特点: 跨平台、一次编程到处使用
2. 名词解释
- JVM: java虚拟机
- 加载.class并运行.class
- JRE: java运行环境
- 除了包含JVM以外,还包含了运行java程序所必须的环境
- JRE = JVM+java系统类库(小零件)
- JDK: java开发工具包
- 除了包含JRE以外,还包含了开发java程序所必须的命令工具
- JDK=JRE+编译、运行等命令工具
- 结论:
- 运行java程序的最小环境为JRE
- 开发java程序的最小环境为JDK
四、IDEA:
-
是JetBrains公司的,分社区版(免费的)和终级版(收费的)
-
开发步骤:
2.1) 新建Java项目/ 工程---------------------------小区
2.2) 新建Java包--------------------------------------楼+单元
2.3) 新建Java类--------------------------------------房子
- main中: System.out.println(“hello world”);
-
注释: 解释性文本(计算机不执行)
3.1) 单行注释: //
3.2) 多行注释: /* */
3.3) 文档注释: /** */
package D01; // 声明包D01(楼+单元)
public class HelloWorld { // 声明类HelloWorld(房子)
// 主方法,为程序的入口(大门口),程序的执行从main开始,main结束则程序结束
public static void main(String[] args) {
// 输出Hello world
// 1.严格区分大小写
// 2.所有符号必须是英文模式的
// 3.每句话必须以分号结尾
System.out.println("Hello world"); // 双引号中的原样输出
}
}
五、变量(存数的)
1. 声明:----------- 相当于在银行开帐户
int a; //声明一个整型的变量,名为a
int b,c,d; //声明三个整型的变量,名为b,c,d
//int a; //编译错误,变量不能同名
2. 初始化:--------- 相当于给帐户存钱
int a = 250; //声明整型变量a并赋值为250
int b; //声明整型变量b
b = 250; //给变量b赋值为250
b = 360; //修改b的值为360
3. 使用:----------- 使用的是帐户里面的钱
1)对变量的使用就是对它所存的那个数的使用
int a = 5;
int b = a+10; //取出a的值5,加10后,再赋值给变量b
System.out.println(b); //输出变量b的值15
System.out.println("b"); //输出b,双引号中的原样输出
a = a+10; //在a本身基础之上增10
System.out.println(a); //15
2)变量在用之前必须声明并初始化
//System.out.println(m); //编译错误,变量m未声明
int m;
//System.out.println(m); //编译错误,变量m未初始化
- 命名:
1)只能包含字母、数字、_和$符,不能以数字开头
2)严格区分大小写
3)不能使用关键字
4)允许中文命名,但不建议,建议"英文的见名知意"、
package D02;
// 变量的演示
public class VarDemo {
public static void main(String[] args) {
// 1. 变量的声明;----在银行开账户
int a; // 声明一个整型的变量,名为a
int b,c,d; // 声明三个整型的变量,名为b,c,d
// int a; // 编译错误,变量不能同名
// 2. 变量的初始化:----给账户存钱
int e = 25; // 声明整型变量e并赋值为25
int f; // 声明整型变量f
f = 25; // 给变量f赋值为25
f = 50; // 修改f的值为50
// 3. 变量的使用:----使用的是账户里面的钱
int g = 5;
int h = g + 10; // 取出g的值,加10后,再赋值给变量h
System.out.println(h); // 输出变量h的值15
System.out.println("h"); // 输出h,双引号中的原样输出
g = g + 10; // 在g本身基础之上增10
System.out.println(g); // 15
// System.out.println(i); // 编译错误,变量i未声明
int i;
// System.out.println(i); // 编译错误,变量i未初始化
// 4. 变量的命名
int a1, a_5$, _3c, $5g;
// int a*b; // 编译错误,不能包含*号等特殊符号
// int 1a; // 编译错误,不能以数字开头
int aa = 5;
// System.out.println(aA); // 编译错误,严格区分大小写
// int class; // 编译错误,不能使用关键字
// int 年龄; // 允许,但不建议
// int nianLing; // 既不直观也不专业 ---- 必须杜绝
int age; // 建议“英文的见名知意”
int score, myScore, myJavaScore; // 驼峰命名法(变量)
}
}
六、八种基本数据类型
- byte, short, int, long, float, double, boolean, char
1. int:整型,4个字节,-21个多亿到21个多亿
- 整数直接量默认为int类型,但不能超出范围,若超范围则发生编译错误
- 两个整数相除,结果还是整数,小数位无条件舍弃(不会四舍五入)
- 运算时若超出范围,则发生溢出(溢出不是错误,但是需要避免)
2. long:长整型,8个字节,很大很大很大
- 表示长整型直接量,需要数字后加L或l
- 运算时若有可能溢出,建议在第1个数字后加L
3. double:浮点型,8个字节,很大很大很大
- 浮点数直接量默认为double型,若想表示float需在数字后加F或f
- double与float型数据参与运算时,有可能发生舍入误差(精确运算场合不能选用)
4. boolean: 布尔型,1个字节
- 只能存储true或false
5. char:字符型,2个字节
- 采用的是Unicode字符集编码格式,一个字符对应一个码
表现的形式为字符char,但本质上是码int(0到65535之间)
(ASCII码: ‘a’–97 ‘A’–65 ‘0’–48) - 字符型直接量必须放在单引号中,只能有一个
- 特殊符号需要通过\来转义
七、类型间的转换
1. 两种方式
数据类型从小到大依次为: byte--short--int--long--float--double
char--
- 自动/隐式类型转换:小类型到大类型
- 强制类型转换:大类型到小类型
- 语法: (要转换成为的数据类型)变量
- 强转有可能发生溢出或丢失精度
2. 两点规则
- 整数直接量可以直接赋值给byte、short、char,但不能超范围
- byte,short,char型数据参与运算时,系统将其一律先转为int再运算
package D02;
public class DataTypeDemo {
public static void main(String[] args) {
/**
// 类型间的转换
byte b1 = 5; // 整数直接量可以直接赋值
byte b2 = 6;
byte b3 = (byte)(b1 + b2);
System.out.println(2 + 2); // 4
System.out.println(2 + '2'); // 52, 2加上'2'的码50
System.out.println('2' + '2'); // 100,'2'的码50,加上'2'的码50
// 类型间的转换
int a = 5;
long b = a; // 自动/隐式类型转换
int c = (int)b; // 强制类型转换
long d = 5; // 自动类型转换
double e = 5; // 自动类型转换
long f = 10000000000L;
int g = (int)f;
System.out.println(g); // 1410065408,有可能发生溢出
double h = 25.987;
int i = (int)h;
System.out.println(i); // 25,有可能丢失精度
// 5. char:字符型,2个字节
char c1 = '女'; // 字符女
char c2 = 'f'; // 字符f
char c3 = '6'; // 字符6
char c4 = ' '; // 空格符
// char c5 = 女; // 编译错误,字符直接量必须放在单引号中
// char c6 = ''; // 编译错误,必须有字符
// char c7 = '女性'; // 编译错误,只能有一个字符
char c8 = '\'';
System.out.println(c8); // '
char c9 = 65; // 0到65535之间
System.out.println(c9); // 输出时会依据c8的类型来做输出
// c8为char型,则以字符的形式来输出
// c8为int型,则以数学的形式来输出
// 4.boolean:布尔型,1个字节
boolean b1 = true; // true为布尔型直接量
boolean b2 = false; // false为布尔型直接量
// boolean b3 = 25; // 编译错误,布尔型只能赋值为true或false
// 3.double:浮点型,8个字节,很大很大很大
double a = 3.14; // 3.14为浮点数直接量,默认为double型
float b = 3.14F; // 3.14F为float直接量
double c = 6.0, d = 4.9;
System.out.println(c - d); // 1.0999999999999996
// 1.1
// 2.long:长整型,8个字节,很大很大很大
// long a = 10000000000; // 编译错误,100亿默认为int型,但超出int范围了
long b = 10000000000L; // 100亿L为长整型直接量
long c = 1000000000 * 2 * 10L;
System.out.println(c); // 200亿(long)
// 溢出了
long d = 1000000000 * 3 * 10L;
System.out.println(d); // 不是300亿
long e = 1000000000L * 3 * 10;
System.out.println(e); // 300亿
// 1.int:整型,4个字节,-21个多亿到21个多亿
int a = 25; // 25为整数直接量,默认为int型
// int b = 10000000000; // 编译错误,100亿默认为int型,但超出int范围了
System.out.println(5/2); // 2
System.out.println(2/5); // 0
System.out.println(5.0/2); // 2.5
int c = 2147483647; // int的最大值
c = c + 1;
System.out.println(c); // -2147483648 发生溢出了,溢出需要避免
/**
* +1 ----> -2147483648
* +2 ----> -2147483647
* +3 ----> -2147483646
*/
}
}