先修
计算机的硬件系统通常由五大部件构成:运算器、控制器、存储器、输入设备和输出设备。
其中,运算器和控制器放在一起就是我们通常所说的中央处理器,它的功能是执行各种运算、控制指令以及处理计算机软件中的数据。
程序:指令的集合。写程序就是将一系列的指令按照某种方式组织到一起,然后通过这些指令去控制计算机做事。
- 进制:
计算中存储数据的最小单元是字节:
8 bit (位) = 1 byte (字节)
1024byte = 1KB、1024KB = 1MB、1024MB = 1GB、1024GB = 1TB、1024TB = 1PB、1024PB = 1EB
- 原码、反码和补码:
原码:存储数据,用最高为表示符号位(0正1负),其它位表示数值大小
反码 :1、正数的反码和原码是一样 2、负数:符号位不变,其他位取反(1变0,0变1)
补码:1、正数原反补相同(三位一体) 2、负数:补码在反码的基础上+1
- DOS常用命令:
dir:无参数:查看当前所在目录的文件和文件夹。
/s:查看当前目录下所有子目录的文件和文件夹。
/a:查看包括隐含文件的所有文件 /ah:只显示出隐含文件。
/w:以紧凑方式(一行显示5个文件)显示文件和文件夹 /p:以分页方式(显示一页之后会自动暂停)显示。
其他的参数可以用:dir/?查看。
cd: 目录名: 进入特定的目录 cd\ 退回到根目录 cd..退回到上一级目录。
md、rd : md 目录名:建立特定的文件夹 rd 目录名:删除特定的文件夹。
cls: 清除屏幕。
copy: copy 路径\文件名 路径\文件名 :把一个文件拷贝到另一个地方。
move: move 路径\文件名 路径\文件名 :把一个文件移动到另一个地方(剪切复制)。
del: del 文件名:删除一个文件 del .:删除当前文件夹下所有文件 del不能删除文件夹。
deltree: 删除文件夹和它下面的所有子文件夹还有文件(不要乱用)。
format: format x: :x代表盘符,格式化一个分区。在dos下是用fat文件系统格式化的,在windows2000安装的时候会问你要不要转换为ntfs。
type: type 文本文件名:显示出文本文件的内容。
edit: 小程序,编辑文本文件用的。
ren: ren 旧文件名 新文件名:改文件名。
Java简介
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。
Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
- Java的发展过程:
1996年1月,Sun公司发布了Java的第一个开发工具包(JDK 1.0)
2004年9月30日,J2SE1.5发布,成为Java语言发展史上的又一里程碑(J2SE 1.5更名为Java SE 5.0)
2005年6月,Java的各种版本已经更名,已取消其中的数字2,如J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME
2006年11月13日,Java技术的发明者Sun公司宣布从2007年3月起,全世界所有的开发人员均可对Java源代码进行修改
2009年,甲骨文公司宣布收购Sun
2014年,甲骨文公司发布了Java8正式版
- JDK和JRE:
JRE(Java Runtime Environment):Java运行环境,如果要运行Java程序,就需要JRE的支持,JRE里包含JVM。
JDK(Java Development Kit):Java开发工具,包含开发Java程序的所有工具,如javac和java等,JDK里包含JRE。
Java虚拟机(Java Virtual Machine),简称JVM,运行所有Java程序的虚拟计算机。JVM是Java语言的运行环境,也是Java 最具吸引力的特性之一。JVM用于读取并处理编译过的与平台无关的字节码(class)文件,从而实现Java的可移植性。但是值得注意的是Java虚拟机是不跨平台的。也就是说在Win下得装Win版的JVM,在Linux下装Linux版的JVM。
一处编译,处处运行(字节码文件.class)
Java语法
- 注释:
// 单行注释 --> 单行多注释使用 ctrl+/
/**/多行注释
/***/文档注释
ps:被注释的部分不会被编译和执行
- 基本语法:
1、Java严格区分大小写的,main和Main完全不同
2、一个文件中可以定义多个类,但只能有一个类是使用public,并且这个使用public 修饰的类,类名必须和文件名一致,有几个类就会生成几个字节码文件(.class)
3、执行逻辑运行必须有main方法
- 关键字:
保留字:java预留的关键字。现在还没用到,但是在升级版本中可能作为关键字。
1、goto :但无任何作用。结构化程序设计完全不需要 goto 语句即可完成各种流程,而 goto 语句的使用往往会使程序的可读性降低,所以 Java 不允许 goto 跳转。
2、 const:是一个类型修饰符,使用const声明的对象不能更新。与final某些类似。
- 语句分割符:
分号 “ ; ” 一句话的结束
各种括号 --> {} [] ()都能用到 --> 成对出现
空格 --> 分隔语句
点 --> the
- 标识符:
标识符的作用即定义"名字" ,比如:类名,方法名,变量名
规则:1.由字母,数字,下划线组成,但是不能以数字开头 2.大小写敏感 3.不能使用关键字和保留字 4.不能使用Java内置的类名作为自己标识符(类名)
- 变量常量:
常量:程序中固定不变的量
常量分类: 字面常量:--> 看到即知道是多少 布尔常量:false,true
定义常量:--> 在程序中修改变量得来的 --> 关键字 final(常量名大写)
变量:程序中可以改变的量 有多个变量写在一句话中使用,分隔 --> int a,b,c;
Java中变量有范围之分,修饰之分:
全局变量(面向对象-->属性):作用域可以在整个类的内部或整个工程
局部变量:作用域仅限在方法体中或小括号中
先排除权限修饰符,关键字:static 静态的,属于类的,所有对象共享的
1.静态变量--> 使用了static修饰并且是全局变量 2.普通变量--> 没有使用static修饰
- 数据类型:
- 数据类型的特殊说明:
小数(浮点)底层使用的是科学计数法:1234.89 => 1.23489*10^3 => 1.23489E(e)3,存储精度不足(不准),不能使用到金融,电信(BigDecimal用来存储小数),小数存储的范围大于整数,同等条件下 float 数值范围 就比 Long 要大
Java使用的是Unicode编码; Eclipse中默认使用的编码集是GBK
byte b1 = -128;//8bit
byte b2 = 127;
short s1 = -32768;//16bit
short s2 = 32767;
int i1 = -2147483648;//32bit
int i2 = 2147483647;
long l1 = -2147483648;//64bit >32bit报错(java8)
long l2 = 2147483647;
char ch = '秃';//Unicode编码规则下的单个字符
- 数据类型转换问题:
自动类型转换:相当于将小范围变量的值赋值给大范围变量的值,会进行自动类型转换
强制类型转换:相当于将大范围变量的值赋值给小范围变量的值,强制类型转换(损失精度)
ps:byte,short,char在计算的时候,首先自动提升为int类型,然后再参与运算
float在计算的时候不会自动提升为double。(float f = 1.23f; 需要添加f)
- 运算符:
算数运算符:+ - * / %
关系运算符:> >= == < <= !=
关系运算符会和变量或常量组成表达--> 关系表达式 --> 结果只有true或false
逻辑运算符:&&(与) || (或) !(非) ^(异或)
逻辑运算符一般会和关系表达式连用 --> 逻辑表达式
& 和 && 之间的区别:
&判断所有表达式的真假,才会得到结果
&&只要其中一个为假就就不会再判断其他条件了直接返回结果
++、-- 运算符:
++i:(i=1时)
++i,--i:先对 i 进行 ++或 -- 操作,然后将 i 计算到的值再参与其他运算
int a = ++i;先做等号右边 ++i --> i = i+1 --> i = 2,再将2的值赋值给a,此时a为2
i++:(i=1时)
i++,i--:先将 i 的值参与其他计算,然后再进行 ++ 或 -- 操作
int a = i++;先做等号的右边,先取 i 的值赋值给a,此时a为1,然后 i 再进行+1操作
- 转义字符:
可以在字符串中使用的特殊字符:
\n --> 回车 (linux系统) \r --> 回车(windows系统 --> \r\n) \t --> 制表符 (tab键)
- 复合运算符:
+= -= *= /= %=
ps:复合运算符若右边有表达式先计算表达的值然后在计算其他值
Java流程
- if单分支:
if ( 表达式 ( 条件 ) ) { 执行语句; }
- if-else分支:
if ( 表达式 ) { 执行语句1; //执行后跳出分支结构
} else { 执行语句2; }
- 三目运算符 ? :
也叫三元运算符,条件运算符,就是一个简化版本的if-else
语法:表达式1(条件) ? 结果1 : 结果2
- if-else if 分支:
if ( 表达式1 ) { 执行语句1; //执行后跳出分支结构
} else if ( 表达式2 ) { 执行语句2;
} else if ( 表达式3 ) { 执行语句3;
} else { 执行语句n;} //最后一种条件 --> 可以省略一个else if
- if -else 嵌套:
if-else嵌套最好不要超过三层,if-else 嵌套多了,逻辑可以优化,但会影响项目的执行时间
- switch-case分支:
switch(常量){
case 常量1: 执行语句;break;
case 常量2: 执行语句;break;
case 常量3: 执行语句;break;
default: 执行语句;break;
}
贯穿:在case的后面不使用break。会发生贯穿,此时会一直执行不会管case后面的条件,直到遇到 break 或是 default 才会结束
int month = (int)(Math.random()*12+1);
switch (month) {
case 2:
System.out.println("28天");
break;
//4个月 4 6 9 11
case 4:
case 6:
case 9:
case 11:
System.out.println("30天");
break;
default:
System.out.println("31天");
break;
}
- swithc 和 if:
相同:都是分支语句
不同点:1.语法不一样 2.判断条件不一样,if 判断的条件是 boolean 类型的表达式,switch 判断条件可以是:整数int,字符 char,枚举 enum,字符串,但就是不能是 boolean
场景:if一般是某个区间,switch是一个具体的值
- while:
循环变量赋初值(循环开始的位置)
while ( 表达式 ( 循环条件 ) ) {
重复执行的事情[执行语句];循环变量的自增或自减
}
- do-while:
循环变量赋初值
do {
执行语句;循环变量自增或自减
} while ( [表达式]循环条件 );
- do-while和while:
do-while 先执行一次,然后再判断条件
while先判断再执行
do-while和while死循环的写法:在()中写 true 即可
- for循环
for ( 循环变量赋初值;循环条件;循环变量自增自减 ) {执行语句;}
public class ForDemo {
/*
* for的6钟写法
*/
public static void main(String[] args) {
/*
* 循环三要素:
* 循环变量赋初值(开始的位置)
* 循环条件
* 循环变量的自增或自减
*/
//1.标准写法
for(int i=0;i<10;i++){
System.out.println(i);
}
//2.将循环变量声明在循环的外部
int i = 0;
for (; i < 10; i++) {
System.out.println(i);
}
//3.不写循环条件,默认是true即死循环
for(int i=0;;i++){
System.out.println(i);
}
//4.将循环变量自增或自减写到for的{}内部
for(int i=0;i<10;){
System.out.println(i);
i++;
}
//5.类似于while
int i = 0;
for(;i<10;){
System.out.println(i);
i++;
}
//6.什么都不写--死循环
int i = 0;
for(;;){
System.out.println("死循环");
}
}
}
- for练习:
/*
* 指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
* 在数学上,斐波纳契数列以如下被以递推的方法定义:
* F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
*
* 求前n位的和,不用递归和数组,用循环写
*/
public class Fibonacci {
void fibonacci(int n){
if(n == 1){
System.out.println("和为1");
}else if(n == 2){
System.out.println("和为2");
}else if(n > 2){
int n1 = 1;
int n2 = 1;
int n3 = 0,sum = 2;
//循环条件,不能是n次
for(int i=0; i<n-2 ; i++){
n3 = n1 + n2;
sum += n3;
//移动n1和n2
n1 = n2;
n2 = n3;
}
System.out.println(sum);
}
}
public static void main(String[] args) {
Fibonacci fibonacci = new Fibonacci();
fibonacci.fibonacci(5);
}
}
- 循环嵌套:
/*
* 循环的嵌套不单指for循环,所有的循环都可以互相嵌套
* 因为for循环使用场景最多,以for循环为例
*
* 1.外层循环执行一次,内层循环执行多次
* 2.只有内层循环条件为false(使用到关键字),外层循环才会再次执行
*
* 三个关键字:
* continue:跳出本次循环继续下次循环
* break:跳出本层循环继续下层循环
* 标签:若想跳出多层循环,用标签,即break后跟标签名
* return:跳出方法体,不能轻易用,是用来停止方法的
*
* 停止JVM:System.exit(0);
*/
public class NestLoop {
public static void main(String[] args) {
//1.break
for(int j=1;j<10;j++){
for(int i=1;i<10;i++){
if(i == 5) break;
System.out.println(i);
}
}
//2.标签
EXIT_FLAG:for(int j=1;j<10;j++){
for(int i=1;i<10;i++){
if(i == 5) break EXIT_FLAG;//EXIT_FLAG:标签
System.out.println(i);
}
}
//3.continue
//计算100-200之间所有不能被3整除的数
for(int i=100;i<=200;i++){
if(i%3 == 0){
continue;
}
System.out.println(i);
}
//return
for(int j=1;j<10;j++){
for(int i=1;i<10;i++){
if(i == 5) return;//此处停的是main方法
System.out.println(i);
}
}
//停止JVM
System.exit(0);
}
}