一、Linux的由来和发展
- Linux是开源的操作系统
- Linux是服务器端的操作系统
- java主要用于服务器端
二、Linux目录结构(与Windows不同)
- 文件系统不同:Windows是盘符,Linux是目录。
- 外部设备映射不同:Windows是盘符,Linux挂载点。
- 安全级别不同:Linux的安全级别更高。
三、相对路径和绝对路径
- 相对路径:文件或目录相对于当前目录的位置。
- 绝对路径:文件或目录相对于根目录的位置。
四、java开发环境
- Java能够实现跨平台
- 不同平台有不同的JVM。JVM是运行在操作系统之上的软件。
- java源程序通过编译成字节码文件(.class),由JVM加载字节码文件并运行。
五、JDK,JRE,JVM的关系
- JVM为java虚拟机。
- JRE为java运行环境,提供了运行java程序所需要的环境,包含JVM和java的类库。
- JDK为java开发工具包,除了包含JRE之外,还包含开发java程序所需要的编译运行工具。
- 运行java最小需要JRE,开发java最小需要JDK。
六、Eclipse IDE
- IDE为集成开发环境,是专为程序员提供的应用软件。
- Eclipse是目前主流的IDE,是IBM公司的开源IDE,下载后直接解压即可运行。
- Eclipse是用java语言编写的,所以要先安装JDK才能使用。
七、环境变量的意义和配置
- JAVA_HOME:该变量的值就是java所在的目录,一些java版的软件和一些java工具(Eclipse/NetBeans/Tomcat)需要用到该变量,设置PATH和CLASSPATH的时候,也可以使用该变量以方便设置。
- PATH:作用是指定命令搜索路径,在shell下执行命令时,它会到PATH变量所指定的路径下查找看是否能找到相应的命令程序,我们需要将JDK安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件,如:javac/java/javadoc等等。
- CLASSPATH:也制定一个路径列表,是用于搜索java编译或者运行时需要用到的类,在CLASSPATH列表中除了可以包含路径外,还可以包含.jar文件,java查找类时会把这个.jar当成一个目录来查找。通常我们需要把JDK安装路径下的jre/lib/tools.jar(Linux:jre/lib/tool.jar)包含在CLASSPATH中。
- 环境变量的配置:计算机->属性->高级系统设置->高级->环境变量->系统变量,或通过cmd命令窗口直接set
JAVA_HOME | java的安装路径 |
PATH | %JAVA_HOME%\bin |
CLASSPATH | %JAVA_HOME%\lib |
八、变量
- 变量指代内存中开辟的空间,用于存储数据。
- 使用变量前,必须声明。
- 语法:数据类型 变量名。
- 一条语句中可以声明多个变量,中间用逗号分隔(注意类型必须相同)。
- 变量使用之前必须初始化(第一次赋值),初始化有两种方式:(1)声明同时初始化,(2)先声明再初始化。
- 可以对变量进行各种操作,但必须与它的数据类型匹配。
九、标识符
- 标识符是用于区分名字的符号。
- 可以由字母、数字、下划线和“$“等组成,并且不能以数字开头。
- java严格区分大小写。
- 不能使用关键字。
- 最好能见名知意,采用“驼峰命名法”(第一个单词首字母小写,其余单词首字母大写)。
十、八种基本类型
- 整数类型:byte(1b), short(2b), int(4b), long(8b)
- 浮点类型:float(4b), double(8b)
- 字符型:char
- 布尔型:boolean
十一、整数类型
- 直接量就是直接写出来的数。
- 整数的直接量类型默认是int。
- 整数的直接量必须在int的区间之内(-2^31~2^31 -1)。
- 整数之间的运算,结果还是整数,两数相除只取整。
- 整数运算超出范围会发生溢出,应当尽量避免,正数溢出变成负数,负数溢出变成正数。
- 如果int的范围不够,就用long类型,long类型直接量末尾加L。
- 整数运算,超过int范围,应将其中一个数加L。
- 运算时,以最大类型作为整个运算结果的类型。
十二、浮点类型
- 一般使用double来保存浮点数。
- 小数的直接点为double类型,若想表示float型的直接量,应加f或F。
- double无法精确表示0.1(二进制无法表示),所以double运算会出现舍入误差。
十三、char类型
- 字符型采用Unicode编码,Unicode为世界通用码。
- 字符型实质上是整数,也就是字符所对用的码。
- 一个char型中,只能装一个字符。
十四、boolean类型
- boolean只能存储true或false。
- 常用于存储关系运算的结果。
十五、基本类型间的转换
- 两种转换方式:(1)自动类型转换(隐式类型转换),从小类型到大类型可以自动完成,byte->short->int->long->float->double。(2)强制类型转换,从大类型到小类型需要强制类型转换符,语法:(需要转换成的类型) 变量
- 强转时,有可能发生溢出或精度丧失,应尽量避免。
- byte,short,char可以存储整数直接量,但运算时一律转换成int。
十六、算术运算
- 加(+),减(-),乘(*),除(/),取余(%),自增(++),自减(--)
- “++”为自增运算,表示其本身加1.
- “++”在前或在后,当使用时作用不同,直接操作时作用一样。
- “++”在前,先自增再使用,“++”在后,先使用再自增。(这里的“使用”指,赋值或输出)。
十七、关系运算
- 大于(>),小于(<),大于等于(>=),小于等于(<=),等于(==),不等于(!=)
- 关系运算的结果为boolean型。
十八、逻辑运算
- 与(&&),或(||),非(!)
- 逻辑运算的结果也是boolean型。
- “&&”运算,两边都为真时,为真。
- “||”运算,有一边为真时,为真。
- “!”运算,非真则假,非假则真。
- “&&”和“||”有可能发生短路。当第一个数为false时,“&&”不再等第二个数;当第一个数为true时,“||”不再等第二个数。
十九、赋值运算
- “=”,“+=”,“-=”,“*=”,“/=”,“%=” (扩展赋值运算)
- “=”用作赋值运算,赋值运算本身也有值。
- 建议使用扩展赋值表达式:(1)a=a+5; //取出a的值加5后再赋值给a(2)a+=5; //在a值的基础上直接加5
二十、字符串拼接运算
- “+”有一边为字符串,则做拼接,返回String类型。
二十一、条件运算(三目运算)
- boolean 表达式?表达式1:表达式2
二十二、三种基本分支结构
- 顺序、分支、循环
- if语句:当if语句块中只有一条语句时,可以省略{},但是不建议省略。
- if else 语句
- else if 语句:当条件分支大于2时,考虑使用else if结构实现。
- switch case语句:(1)switch case语句用于实现多分支。(2)switch后跟的是整数表达式,case后跟的整型的常量。(3)执行逻辑是,从第一个case开始比,相等即为入口。(4)常与break配合,使用break跳出switch语句。(5)建议,当事件超过3条分支,并使用整数表达式时,建议使用switch-case,结构清晰。
二十三、循环结构
- 循环三要素:(1)循环变量初始化。(2)循环的条件(以循环变量为条件-boolean)。(3)循环变量的改变(向着循环结束改变)。
- breakf放在循环中,可以退出循环,常和if语句配合使用。
- while语句
- do-while语句:先do再判断,为真时再do,再判断,直到条件为false。
- 当循环变量的初始化与循环变量的改变一样时,考虑使用do-while。
- for语句:(1)for三个表达式都可以省略,但是分号不能没有。不建议省略第二个,因为容易造成死循环。(2)for语句的第一个表达式和第三个表达式,可以使用逗号。(3)break用于循环体中,可以跳出循环。(4)continue只能用于循环体中,作用为跳过循环体中剩余语句而进行下一次循环。可以用if-else代替。
二十四、有关循环问题
- “当……的时候,干……事”,最好用while解决。
- “直到……的时候,干……事”,用do-while。
- 固定次数用for。
- 当有行有列时,需要使用嵌套循环。嵌套时,外层执行一次内层执行所有次。
- break只能跳出一层循环。
- 建议循环嵌套层次越少越好,超过三层说明程序设计有问题。
二十五、程序=数据结构+算法
- 算法:解决问题的步骤(顺序/分支/循环)。
- 数据结构:将数据按照特定的结构来存储。
- 好的数据结构一定会导致好的算法的产生。
二十六、数组
1. 数组的定义
方法一:char[] c = new char[5];
方法二:char[] c; c=new char[]{‘a’,’b’,’c’};
方法三:char[] c = {‘a’,’b’,’c’}; //只适用于声明同时初始化(静态赋值)
2. 数组是引用类型。
3. new之后,数组元素是有初始值的:int型(0),double型(0.0),boolean型(false),char型(空字符),引用类型(null)
4. 访问数组元素通过数组下标(从0~length-1)
5. 数组的复制
(1)System.array.copy(原数组,原数组中开始下标,目标数组,目标数组开始下标,复制的长度);
(2)Array.copyOf(原数组,截取的长度); //截取的长度小于原数组的长度则截取,大于则扩容
6. 数组的排序
(1)常用的排序算法:插入排序,冒泡排序,快速排序
(2)冒泡排序算法:第一次找到所有元素中最大的放在最后一个位置上,不再变动;第二次找到剩余所有元素中最大的放在倒数第二位置上,不再变动;以此类推,直到排序完成。
(3)数组冒泡排序算法的封装:Arrays.sort(数组);
二十七、方法
- 用于封装一段特定的逻辑功能,可以在程序中反复被调用,可以减少代码重复,便于程序的维护。
- 方法应尽可能地独立。
- 方法中定义参数,可以使该方法更灵活。
- 方法声明返回值类型,可使该方法返回一个结果,没有返回值用void。
- 调用方法时,方法有参则必须传参,且类型匹配。若方法有返回值,调用时最好接收。
- return的作用是,返回控制权给调用方,两种写法:(1)return 值; (2)return;