这辈子没办法做太多事情所以每一件都要做到精彩绝伦
People can‘t do too many things in my life,so everything will be wonderful 乔布斯
1. 软件开发
1.1 软件开发概念
软件按照特定顺序组织的计算机数据和指令的集合
开发软件的制作过程
软件开发借助开发工具和计算机语言制作软件
语言常见计算机语言C、C#、C++、PHP、JAVA、Python、ruby、lua等
l J2SE(Java 2 Platform StandardEdition)标准版
是为开发普通桌面和商务应用程序提供的解决方案
该技术体系是其他两者的基础可以完成一些桌面应用程序的开发
l J2ME(Java 2 Platform MicroEdition)小型版
是为开发电子消费产品和嵌入式设备提供的解决方案
l J2EE(Java 2 Platform EnterpriseEdition)企业版
是为开发企业环境下的应用程序提供的一套解决方案
该技术体系中包含的技术如Servlet、Jsp等主要针对于Web应用程序开发
- SE(J2SE)standard edition标准版是通常用的一个版本从JDK 5.0开始改名为Java SE
- EE(J2EE)enterprise edition企业版使用这种JDK开发J2EE应用程序从JDK 5.0开始改名为Java EE
-
常见DOS命令
d: 回车 盘符切换
dir(directory):列出当前目录下的文件以及文件夹
md (make directory) : 创建目录
rd (remove directory): 删除目录
cd (change directory)改变指定目录(进入指定目录)
cd.. : 退回到上一级目录
cd\: 退回到根目录
del (delete): 删除文件,删除一堆后缀名一样的文件*.txt
exit : 退出dos命令行
cls : (clear screen)清屏
ipconfig:查看本地ip
netstat –ano列出所有端口的情况
netstat -aon|findstr "49157"查看被占用端口对应的PID
tasklist|findstr "2720"查看是哪个进程或者程序占用了2720端口
或打开任务管理器切换到进程选项卡在PID一列查看2720对应的进程
taskkill /f /t /im xxx.exe结束对应进程
2. javase
2.1 java语言发展史
詹姆斯.高斯林James Gosling
1977年获得了加拿大卡尔加里大学计算机科学学士学位1983年获得了美国卡内基梅隆大学计算机科学博士学位毕业后到IBM工作设计IBM第一代工作站NeWS系统但不受重视。后来转到sun公司1990年与Patrick,Naughton和Mike Sheridan等人合作“绿色计划”后来发展一套语言叫“Oak”后改名为Java.
JDK:Java Development KitJava语言的软件开发工具包SDK
2.2 java语言特点
简单性
面向对象
分布式处理
健壮性
结构中立
解释性
高性能
多线程
动态
安全性
开源
跨平台可移植性通过java语言编写的应用程序在不同的系统平台上都可以运行。
环境需要在需要运行java应用程序的操作系统上安装一个Java虚拟机JVM Java Virtual Machine即可有JVM来负责Java程序在该系统中的运行
2.2.1 JRE与JDK
JREJava RuntimeEnvironmentJava运行环境包括Java虚拟机JVM java virtual machine和Java程序所需的核心类库等如果想要运行一个开发好的Java程序计算机中需要安装JRE即可。
JDKJava development kitJava开发工具包JDK是提供给Java开发人员使用的其中包含了Java的开发工具也包括了JRE就不用单独安装JRE了。
其中的开发工具编译工具javac.exe和打包工具jar.exe等
总结使用JDK开发完成的Java程序交给JRE去运行
JDK,JRE,JVM的作用及关系
(1)作用
JVM保证Java语言跨平台
JREJava程序的运行环境
JDKJava程序的开发环境开发工具包
(2)关系
JDKJRE+工具
JREJVM+类库
jdk安装包网上下载安装步骤下一步即可注意事项安装目录不能出现中文和空格
2.3 HelloWorld
1:编写java源程序(.java)
2:通过javac命令编译生成.class文件
3:通过java命令运行.class文件
2.4 配置path环境变量
(1)path环境变量的作用
保证javac命令可以在任意目录下运行
(2)path配置的两种方案
找到环境变量的位置jkd安装目录D:\develop\Java\jdk1.7.0_60
系统变量里面
新建
变量名JAVA_HOME
变量值D:\develop\Java\jdk1.7.0_60
修改
变量名Path
变量值%JAVA_HOME%\bin;以前的内容前后都可以
配置完成后测试是否配置成功
打开cmd窗口输入java –version
结果如下说明成功
2.5 java语法
关键字
标识符
注释
常量、进制和进制转换
变量
数据类型和类型转换
运算符
语句
2.5.1 关键字
用于定义数据类型的关键字 |
|||||||
class |
interface |
byte |
short |
int |
|||
long |
float |
double |
char |
boolean |
|||
void |
|||||||
用于定义数据类型值的关键字 |
|||||||
true |
false |
null |
|||||
用于定义流程控制的关键字 |
|||||||
if |
else |
switch |
case |
default |
|||
while |
do |
for |
break |
continue |
|||
return |
|||||||
用于定义访问权限修饰符的关键字 |
|||||||
private |
protected |
public |
|||||
用于定义类函数变量修饰符的关键字 |
|||||||
abstract |
final |
static |
synchronized |
||||
用于定义类与类之间关系的关键字 |
|||||||
extends |
implements |
||||||
用于定义建立实例及引用实例判断实例的关键字 |
|||||||
new |
this |
super |
instanceof |
||||
用于异常处理的关键字 |
|||||||
try |
catch |
finally |
throw |
throws |
|||
用于包的关键字 |
|||||||
package |
import |
||||||
其他修饰符关键字 |
|||||||
native |
strictfp |
transient |
volatile |
assert |
|||
2.5.2 进制
Java针对整数常量提供了4种表现形式
二进制
八进制
十进制
十六进制
- 进制概述就是进位制是人们规定的一种进位方法。对于任何一种进制—X进制就表示某一位置上的数运算时是逢X进一位。二进制就是逢二进一八进制就是逢八进一以此类推。
- 二进制的由来任何数据在计算机中都是以二进制的形式存在的。二进制早期由电信号开关演变而来。
一个整数在内存中一样也是二进制的但是使用一大串的1或者0组成的数值进行使用很麻烦。
所以就想把一大串缩短点将二进制中的三位用一位表示。
这三位可以取到的最大值就是7.超过7就进位了这就是八进制。
但是对于过长的二进制变成八进制还是较长所以出现的用4个二进制位表示一位的情况
四个二进制位最大是15这就是十六进制。
规律进制越大表现形式越短。
l 不同进制的数据组成
二进制
由0,1组成。以0b开头
八进制
由0,1,…7组成。以0开头
十进制
由0,1,…9组成。整数默认是十进制的
十六进制
由0,1,…9,a,b,c,d,e,f(大小写均可)。以0x开头
2.5.3 进制转换详解
进制转换
(1)其他进制到十进制
系数就是每一个位上的数值
基数x进制的基数就是x
权对每一个位上的数据从右并且从0开始编号对应的编号就是该数据的权。
结果系数*基数^权次幂之和。
(2)十进制到其他进制
除基取余直到商为0余数反转。
(3)进制转换的快速转换法
A:十进制和二进制间的转换
8421码。
B:二进制到八进制十六进制的转换
- 进制概述
- 其他进制转换为十进制
十进制12345
系数1,2,3,4,5
基数10
权4,3,2,1,0
结果系数*基数^权次幂之和1*10^4+2*10^3+3*10^2+4*10^1+5*10^0=12345
- 十进制转换为其他进制
- 快速转换
2.5.4 原码反码补码
- 进制转换
(1)其他进制到十进制
系数就是每一个位上的数值
基数x进制的基数就是x
权对每一个位上的数据从右并且从0开始编号对应的编号就是该数据的权。
结果系数*基数^权次幂之和。
(2)十进制到其他进制
除基取余直到商为0余数反转。
(3)进制转换的快速转换法
A:十进制和二进制间的转换
8421码。
B:二进制到八进制十六进制的转换
2.5.5 变量
变量(掌握)
(1)在程序的执行过程中其值在某个范围内可以发生改变的量
(2)变量的定义格式
A:数据类型 变量名 = 初始化值;
B:数据类型 变量名;
变量名 = 初始化值;
2.5.6 数据类型
(1)Java是一种强类型语言针对每种数据都提供了对应的数据类型。
(2)分类
A:基本数据类型4类8种参见3基本数据类型
B:引用数据类型类接口数组。
(3)基本数据类型
A:整数 占用字节数
byte 1
short 2
int 4
long 8
B:浮点数
float 4
double 8
C:字符
char 2
D:布尔
boolean 1
注意
整数默认是int类型浮点数默认是double。
长整数要加L或者l推荐使用L因为小写容易和数字1混淆。
单精度的浮点数要加F或者f。
数据范围
l 默认转换
byte,short,char—int—long—float—double
byte,short,char相互之间不转换他们参与运算首先转换为int类型
l 强制转换不建议使用
目标类型 变量名=(目标类型)(被转换的数据);
2.5.7 int转换为byte类型问题
1.public class Test {
2. public static void main(String[] args) {
3. int start = -131;
4. int end = 131;
5.
6. for (int i = start; i < end; i++)
7. if ((byte) i != i)
8. System.out.println("原数" + i + "\t转化后:" + (byte) i);
9. }
10.
11.}
程序运行结果如下
1. 原数-131 转化后:125
2. 原数-130 转化后:126
3. 原数-129 转化后:127
4. 原数128 转化后:-128
5. 原数129 转化后:-127
6. 原数130 转化后:-126
为什么会出现这种情况呢
因为Java中byte是用8位来存储只能表示-128~127之间的数当由int强制类型转化为byte时系统就采取了截取int后8位的做法。
1. //java采用补码存储整数int型为32位byte为8位
2. //那么130在内存中的表示形式00000000 00000000 00000000 10000010
3. //这样截取后8位就变成10000010补码表示的时候第一位是符号位0正1负
4. //所以可以知道10000010肯定是一个负数了再来看它的数值部分
5. //补码由原码转换为反码再加1(转换规则参考2.5.4原码反码补码)
6. //所以0000010应该变为1111101 + 1 = 1111110(即126)
7. //又因为是负数所以就截取变成-126了
8.
9. //我们再来看下-130的例子(符号位是1其余按位取反+1)
10.//-130在内存中的表示形式11111111 11111111 11111111 01111110
11.//这样截取后8位就变成01111110
12.//显然这是整数啊然后数值部分是126
13.//64+32+16+8+4+2=126
2.6 运算符
运算符的优先级从高到低
优先级 |
描述 |
运算符 |
1 |
括号 |
()、[] |
2 |
正负号 |
+、- |
3 |
自增自减非 |
++、--、! |
4 |
乘除取余 |
*、/、% |
5 |
加减 |
+、- |
6 |
移位运算 |
<<、>>、>>> |
7 |
大小关系 |
>、>=、<、<= |
8 |
相等关系 |
==、!= |
9 |
按位与 |
& |
10 |
按位异或 |
^ |
11 |
按位或 |
| |
12 |
逻辑与 |
&& |
13 |
逻辑或 |
|| |
14 |
条件运算 |
?: |
15 |
赋值运算 |
=、+=、-=、*=、/=、%= |
16 |
位赋值运算 |
&=、|=、<<=、>>=、>>>= |
如果在程序中要改变运算顺序可以使用()。
2.6.1 算术运算符
A:+,-,*,/,%,++,--
B:+的用法
a:加法
b:正号
c:字符串连接符
C:/和%的区别
数据做除法操作的时候/取得是商%取得是余数
D:++和--的用法
a:他们的作用是自增或者自减
b:使用
**单独使用
放在操作数据的前面和后面效果一样。
a++或者++a效果一样。
**参与操作使用
放在操作数的前面先自增或者自减再参与操作
inta = 10;
intb = ++a;
b=11a=11;
放在操作数的后面先参与操作再自增或者自减
inta = 10;
intb = a++;
b=10;a=11;
2.6.2 赋值运算符
A:=,+=,-=,*=,/=,%=等
B:=叫做赋值运算符也是最基本的赋值运算符
intx = 10; 把10赋值给int类型的变量x。
C:扩展的赋值运算符的特点
隐含了自动强制转换。
2.6.3 比较运算符
A:==,!=,>,>=,<,<=
B:无论运算符两端简单还是复杂最终结果是boolean类型。
注意:千万不要把==写成了=
2.6.4 逻辑运算符
A:&,|,^,!,&&,||
B:逻辑运算符用于连接boolean类型的式子
C:结论
&:有false则false
|:有true则true
^:相同则false不同则true。
情侣关系。
!:非true则false非false则true
&&:结果和&是一样的只不过有短路效果。左边是false右边不执行。
||:结果和|是一样的只不过有短路效果。左边是true右边不执行。
2.6.5 位运算符
A:^的特殊用法
一个数据针对另一个数据位异或两次该数不变
B:面试题
a:请实现两个变量的交换
**采用第三方变量
**用位异或运算符
左边a,b,a
右边a^b
b:请用最有效率的方式计算出2乘以8的结果
2<<3
2.6.6 三元运算符
A:格式
比较表达式?表达式1:表达式2;
B:执行流程
首先计算比较表达式的值看是true还是false。
如果是true表达式1就是结果。
如果是false表达式2就是结果。
2.6.7 if语句
(1)三种格式
A:格式1
if(比较表达式) {
语句体;
}
B:格式2
if(比较表达式) {
语句体1;
}else{
语句体2;
}
C:格式3
if(比较表达式1) {
语句体1;
}elseif(比较表达式2){
语句体2;
}
...
else{
语句体n+1;
}
(2)注意事项
A:比较表达式无论简单还是复杂结果是boolean类型
B:if语句控制的语句体如果是一条语句是可以省略大括号的如果是多条不能省略。
建议永远不要省略。
C:一般来说有左大括号就没有分号有分号就没有左大括号。
D:else后面如果没有if是不会出现比较表达式的。
E:三种if语句其实都是一个语句只要有一个执行其他的就不再执行。
2.6.8 switch语句
(1)格式
switch(表达式) {
case值1:
语句体1;
break;
case值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
格式解释说明
switch:说明这是switch语句。
表达式:可以是byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是字符串
case:后面的值就是要和表达式进行比较的值
break:表示程序到这里中断跳出switch语句
default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else
(2)注意事项:
A:case后面只能是常量不能是变量而且多个case后面的值不能出现相同的
B:default可以省略吗?
可以省略但是不建议因为它的作用是对不正确的情况给出提示。
特殊情况
case就可以把值固定。
A,B,C,D
C:break可以省略吗?
可以省略但是结果可能不是我们想要的。
会出现一个现象case穿透。
最终我们建议不要省略
D:default一定要在最后吗?
不是可以在任意位置。但是建议在最后。
E:switch语句的结束条件
a:遇到break就结束了
b:执行到末尾就结束了
(3)if语句和switch语句各自的场景
A:if
针对boolean类型的判断
针对一个范围的判断
针对几个常量的判断
B:switch
针对几个常量的判断
2.6.9 循环语句
(1)有三种:for,while,do...while
(2)for循环语句
A:格式
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
B:注意事项
a:判断条件语句无论简单还是复杂结果是boolean类型
b:循环体语句如果是一条可以省略大括号但是不建议
c:有分号就没有左大括号有左大括号就没有分号
(3)while循环
A:基本格式
while(判断条件语句) {
循环体语句;
}
扩展格式
初始化语句;
while(判断条件语句){
循环体语句;
控制条件语句;
}
通过查看这个格式我们就知道while循环可以和for循环等价转换。
B:for和while的区别
a:使用上的区别
for语句的那个控制条件变量,在循环结束后不能在使用了。
而while的可以继续使用。
b:理解上的区别
for适合于一个范围的判断
while适合次数不明确的
举例:吃葡萄
(4)do...while循环
A:基本格式
do{
循环体语句;
}while(判断条件语句);
扩展格式
初始化语句;
do{
循环体语句;
控制条件语句;
}while(判断条件语句);
通过查看格式我们就可以看出其实三种循环的格式可以是统一的。
B:三种循环的区别
a:do...while循环至少执行一次循环体
b:for和while必须先判断条件是否是true然后后才能决定是否执行循环体
(5)循环使用的注意事项(死循环)
A:一定要注意修改控制条件,否则容易出现死循环。
B:最简单的死循环格式
a:while(true){...}
b:for(;;){}
2.6.10 控制跳转语句
(1)break:中断的意思
A:用在循环和switch语句中离开此应用场景无意义。
B:作用
a:跳出单层循环
b:跳出多层循环需要标签语句的配合
(2)continue:继续
A:用在循环中离开此应用场景无意义。
B:作用
a:跳出单层循环的一次可以继续下一次
(3)return:返回
A:用于结束方法的后面还会在继续讲解和使用。
B:一旦遇到return,程序就不会在继续往后执行。
2.7 方法
(1)方法就是完成特定功能的代码块。
(2)格式
修饰符返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…){
函数体;
return返回值;
}
修饰符目前就用public static。后面再详细讲解其他修饰符
返回值类型就是功能结果的数据类型
方法名就是起了一个名字方便我们调用该方法。
参数类型就是参数的数据类型
参数名就是变量
参数分类
实参实际参与运算的数据
形参方法上定义的用于接收实际参数的变量
方法体语句就是完成功能的代码块
return结束方法
返回值就是功能的结果由return带给调用者。
(3)两个明确
返回值类型结果的数据类型
参数列表参数的个数及对应的数据类型
(4)方法调用
A:有明确返回值的方法
a:单独调用没有意义
b:输出调用不是很好因为我可能需要不结果进行进一步的操作。
c:赋值调用推荐方案
B:void类型修饰的方法
a:单独调用
(5)方法的注意事项
A:方法不调用不执行
B:方法之间是平级关系不能嵌套定义
C:方法定义的时候参数是用隔开的
D:方法在调用的时候不用在传递数据类型
E:如果方法有明确的返回值类型就必须有return语句返回。
(6)方法重载
在同一个类中方法名相同参数列表不同。与返回值无关。
参数列表不同
参数的个数不同。
参数的对应的数据类型不同。
2.8 数组
(1)数组存储同一种数据类型的多个元素的容器。
(2)特点每一个元素都有编号从0开始最大编号是长度-1。
编号的专业叫法索引
(3)定义格式
A:数据类型[] 数组名;
B:数据类型 数组名[];
推荐是用A方式B方法就忘了吧。但是要能看懂
(4)数组的初始化
A:动态初始化
只给长度系统给出默认值
举例int[] arr= new int[3];
B:静态初始化
给出值系统决定长度
举例int[] arr= new int[]{1,2,3};
简化版int[] arr= {1,2,3};
(5)Java的内存分配
a:栈 存储局部变量对象的引用
b:堆 存储new出来的对象
c:方法区 后续详解
d:本地方法区和系统相关
e:寄存器cpu使用
名词
局部变量
- 方法定义中或者方法声明上的所有变量
- 使用完毕立即消失
实体对象new出来的东西
比如newint[3];
1 每一个实体都有首地址值
2 每一个实体内的数据都有默认值
byte,short,int,long 0
float,double 0.0
char ‘\u0000’
boolean false
引用类型 null
3 使用完毕后会被垃圾回收器空闲的时候回收。
(6)数组内存图
A:一个数组
B:二个数组
C:三个数组(两个栈变量指向同一个堆内存)
(7)数组的常见操作
二维数组
(1)元素是一维数组的数组。
(2)格式
A:数据类型[][] 数组名 = new 数据类型[m][n];
B:数据类型[][] 数组名 = new 数据类型[m][];
C:数据类型[][] 数组名 = new 数据类型[][]{{...},{...},{...}};
D:数据类型[][] 数组名 ={{...},{...},{...}};
(3)案例:
A:二维数组的遍历
B:二维数组的求和
C:杨辉三角形
答案参见./base/Array2Test系列或百度