java基础知识笔记.docx
《java基础知识笔记.docx》由会员分享,可在线阅读,更多相关《java基础知识笔记.docx(20页珍藏版)》请在冰点文库上搜索。
java基础知识笔记
Corejava整理笔记
训练营:
1、inta=0;a=a++;-a的结果是0
执行顺序是:
inttmp=a;a=a+1;a=tmp;
尝试计算:
a=(a++)+(++a)+(a++);
2、Linux系统(山寨版得unix)
-只有一个跟/
-把其它介质(USB,CD)映射到目录,这个目录叫做挂载点
-命令以/开头是觉得路径
-pwd
-ls–al
-cd
-cp
-mkdir
-rm–r
-mv
-chmod
-vi的使用
3、JDK
---JAVADevelopmentTools
---JRE
---JAVASEAPI
---JVM
4、图形编程实例:
JFrameHelloWorld.java
WEEK_1_1
1、使用变量必须要手动初始化(赋值)
--注意默认初始化和手动初始化的不同
--使用长变量名,如果有多个单词,后面的首字母要大写
2、变量的作用域
--变量的作用于与声明变量所在的大括号内相同
3、有关二进制
---计算机内部都是二进制
---计算机默认接受十进制转化为二进制,默认输出十进制
---二进制的转换,-----基数-----权数
4、有关十六进制
十六进制实际是2进制的简写形式
0x4e2d--0100111000101101
5、JAVA数字包装类的的进制转换
---Integer.toBinaryString()
---Integer.toHexString()
---Integer.toOctalString()
6、八种基本数据类型(4整数、2浮点、char、boolean)
7、关于数据溢出
---Byte.MAX_VALUE=0X7F
---Short.MAX_VALUE=OX7FFF
---Integer.MAX_VALUE=0X7FFFFFFF
---int的常量,在byte范围内,能对byte赋值
--bytea=1;shorta=30000;
---变量不能够转换为byte,例如
---inta=1;byteb=a+1;//错误byteb+=1;//正确,因为这是赋值操作
6、浮点数
---float(32位)1位符号位,8位阶数,23位值
---double(64位)1位符号位,11位阶数,52位值
结论(精度):
long>double>int>float
7、十进制小数表打我二进制浮点数的时候,会出现不能精确除尽的问题
doublea=2.0–1.9;doublea=2.0–1.5
doubleb=0.1doubleb=0.5;
a==b?
//不等a==b?
//相等
这是因为2.0和1.5转换为二进制都能被除尽,因此不存在数据丢失
而1.9是不能被除尽的
8、字符数unicode的编码值,如’中’—>20013、0x4e2dchar是16位无符号整数
‘A’65-0x0041
9、转义字符:
---‘\’’‘\\’‘\b’‘\n’‘\u’‘\r’‘\u0000’是字符串的结束符
10、强制类型转换
11、方法调用
WEEK_1_2
1、运算符
---数学运算
---关系运算==!
=<>>=<=
---位运算~(取反码)&(按位与)|(按位或)^(异或)>><<等
---布尔逻辑运算&&||?
:
等
------数学运算
----数据溢出(上溢出)
inta=0x7fffffff;intb=0x0x7fffffff
intc=a+b;//c=-2
----运算精度问题(下溢出)
Inta=5;intb=a/2;//b=2;
----时间的获取
longnow=System.currentTimeMillis();//获取从1970到现在经过的毫秒数
----取余运算
---负数的取余结果是负数
---整数部分产生一个周期性的运算
---想要获取一个[0,n)之间的整数,需要取余a%n
---字符串的运算
字符串重载了加法,因此能够直接相加减,如下例:
”1”+“1”+“1”-111
1+”1”+“1”-111
1+1+“1”-21
1+1+1-3
1+1+‘1’-51
“HELLO”+‘1’+‘1’-HELLO11
---短路的逻辑运算(运算两侧不一定会都被执行)&&||!
非短路的逻辑运算(非短路运算是为了保证运算两侧都一定被执行)&|
---条件运算符
(条件运算符)?
结果1:
结果2
2、if…..else…
3、switch(整数或者char){}//注意贯穿的break和不贯穿的break
4、for(…;…;…){//循环体}
WEEK_1_3
1、while(……){//…}do{//……..}while(….);
---案例:
等额本金还款
2、数组Array
---int[]arr=newint[3];//int[]arr=newint[]{};//带有new的动态初始化
---int[]arr={3,2,1};//静态初始化,只能用在数组的声明的时候
3、数组的复制与数组长度的拓展
---Arrays.copyOf()
---System.arraycopy()
---arr=Arrays.copyOf(arr,arr.length()+1);
---案例:
文字竖排
WEEK_1_4
1、选择排序
2、冒泡排序
3、插入排序
4、系统的排序算法Arrays.sort()---内部采用了快速排序
排序性能比较:
快速排序>插入排序>选择排序>冒泡排序
---性能测试的方法
longstart=System.currentTimeMillis();
//…测试代码块
longend=System.currentTimeMillis();
System.out.println(end-start);
5、递归Recursion
----堆栈的知识
案例:
双色球
WEEK_1_5
Tips:
向一个连续的数组连续的添加元素的简单形式:
a[i++]=element;
案例:
生成四位不重复的验证码
1、UNIX/LINUX
---绝对路径:
以/开始的为绝对路径/root/tarena
---.当前路径..上一级~个人主目录
---cd后面什么都不加=cd~回到个人主目录
---命令格式
---command[-选项][参数]ls-a~
---以.开头的是隐藏文件如mkdir.aa创建一个隐藏文件夹.aa
---ls-l---授权信息r/w/x
---创建者权限---同组内用户---其他用户
---管道流|将前一个命令的结果传递到后一个命令
---例如:
ls–al|more
---文件夹的大小都是4096
---chmod命令(改变文件模式)如:
---chmod–xsd1103去掉此文件的可执行权限x
---chmod+xsd1103加上此文件的可执行权限x
---chmod=xsd1103设置此文件只有可执行权限x
注意:
g----组内用户o---其他用户u----创建者本人
例如:
chmodu=rwx,o-x,g-x创建者rwx,其他人和组内均不可执行
数字权限形式:
Rwx
U111---7
G001-1-------chmod710sd1103
O000-0(自己所有权限,组内可见,其他人不可见不可写)
这种表示方法能够简便的改变文件权限,700,750都很常用
---mv(move)mvaabb(如果bb不存在则重命名,如果存在则一动aa到bb)
---cp(copy)
---cat/more只读方式查看文本文件内容
---grep过滤常常与其它命令组合使用:
catpassword|greproot|more
---rm删除命令(删除文件夹需要递归删除rm–rf递归强制执行)
---echo回显
---echoHello>>~/test.txt重定向标准输出到test.txt文件中
---创建文件touch
---vi的另存为:
w~/aa/test.txt
---打包命令tar-cvf(打包/可视/指定生成目标文件名)例如:
tar–cvfaa.taraa
---释放tartar–xf--默认向当前目录释放
---gzip压缩例如gzipaa会将文件夹aa压缩成aa.gz
---gzip解压例如gzip–d释放.gz文件
---标准zip打包zip-r+文件名.zip+文件1文件2….
---zip的解压过程unzip+.zip文件默认解压到当前目录
---设置环境变量:
--EXPORTPATH=$PATH
---echoPATH
案例:
设计备份脚本backup.sh
Cd~
Mkdirtemp
Cdtemp
Cp~/workspace./temp
Tar–cfworkspace.tarworkspace
Gzipworkspace.tar
Cd~
EchoBackUpsuccess\!
作业:
洗牌
WEEK_1_6:
1、ftp协议:
----ftp是在本地执行命令,并不是在操作远程主机
Lscd?
putmput
2、telnet命令
----telnet是直接操作远程主机的,即远程主机有什么命令都可以执行
本地----(exit)----csh-----(exit)----bash
3、环境变量.profile文件存储了系统环境变量的设置
Source命令可以用于测试编写的脚本
PATHCLASSPATH
3、关于JDK
|---bin开发工具(javac/java/jar….)
|---jrejava运行环境(JAVARUNTIMEENVIRONMENT)
||---bin(JVM)
||---lib(JAVAAPI核心类库)
|||---rt.jar(核心类库,zip压缩)、
|---src.zip(javaAPI的源文件)
4、系统拓展java命令的方式
---shell.class的组合使用,另外注意配置环境变量
5、Jar打包jar–cvfjar–xf
清明节作业:
五子棋
WEEK_2_3(面向对象的程序设计OOP)
1、面向对象(ObjectOrientedOO)------everythingisobject
2、类Class
3、类的修饰符:
同类中同一package其它package子孙类
Public1111
Private1000
Protected1001
Default(默认)1100
默认是default的修饰符
4、new运算:
创建实例对象,new运算将返回一个对象的引用
(关于内存/堆/栈/池)
引用不是对象、对象是存在堆内存中的,引用是栈内存中的指向堆内存某对象或者null的指针
5、编译错误(Compileerror)和运行异常(RunTimeException)
6、构造器(构造方法)constructor
类=构造器==实例对象
构造器与类名必须一致
构造器引用类得其它构造器,需要将其放在第一行
方法签名的概念:
方法名+参数列表
7、this的关键词
---this是对当前对象的引用
---this是运行过程中产生的代表当前对象的引用,操作结束后这个临时引用将被释放
---this用来简化构造器例如:
this()调用本类空构造器
8、java的参数传递规则:
---java的参数传递均是基于值的复制(因此基本类型是复制值,引用类型是复制引用)
TIPs:
由于引用传递参数会使传入参数改变,因此建议结果都是有返回值带回,能够避免错误
作业:
圆的类:
圆心、半径、点是否在圆内
WEEK_2_4
1、复习总结:
对于java中值传递的规则进一步理解:
Java中的数据传递都是基于值得复制,是程序栈中值得复制,(栈中基本数据类型数据的值就是其真实值,而引用类型的值是其地址值),另外java不直接操作堆中对象,而是通过栈中的引用来操作对象,因此如果有多个引用同时指向同一个对象,其中任何一个引用对该对象的改变均会改变这个对象,而表现出其他引用也跟着改变。
2、继承(extends关键字)
--子类一定调用父类的构造器
---子类默认调用父类的空构造器
---如果父类中没有空构造器,必须调用有参数的构造器
---调用父类构造器使用super()方法,必须在构造器的第一行书写
要求:
所有类都提供无参数构造器,以减少子类继承时产生的调用构造器的错误
3、关于实例化对象的过程:
---按需加载需要使用的类
---递归加载所有的父类
---通过CLASSPATH查找类文件
---加载以后是一个对象,类型是Class
细节步骤:
1、在堆内存中分配对象空间,递归的先分配父类空间再分配子类空间
2、执行属性的赋值
3、递归调用父类的构造器,先构造父类,再构造子类
JAVABEAN规范:
1、类必须声明在包中
2、必须具有无参数构造器
3、有getXxx()和setXxx()方法,其中boolean方法可以按照isXxx()
4、必须实现序列化接口
----方法覆盖
---子类重新实现父类的方法(方法名和参数列表一样)叫做方法的覆盖,覆盖以后,会动态的调用子类的方法
---所谓:
方法是动态绑定的,属性是静态绑定的,
举例来说:
父类A中有属性a和方法fun
子类B中也有属性a和方法fun
Atest=newB();
调用的时候test.a是A中的a而不是子类中的a,而test.fun()是子类B的方法,这种现象称为方法的动态绑定。
4、类型转换
---子类-父类(小范围--大范围),可以隐式的自动转换
---父类-子类(大范围--小范围)需要强制转换
一般在做强制转换是需呀进行类型检查:
Booleanb=ainstanceofA;
类型转换实际是对对象引用的改变而不是改变对象本身,再次注意引用和对象的区别,类型转换转换的是引用的类型而不改变对象
多态的概念,用父类的引用指代子类对象:
Aa=newB();
5、包装类Integer/Long….的自动装箱与拆箱
作业:
选择题,单选题、多选题
WEEK_2_5
1、static关键字
---修饰属性
---修饰方法
---静态代码块
---修饰内部类---静态内部类
2、final关键字
final修饰的变量只能够被初始化一次,之后就不能再发生改变,但引用内部的引用是可以改变的,例如:
char[]buf=newchar[]{‘a’,’b’};buf[0]=‘b’;//是正确的
注意final和static容易混乱
3、abstract关键字,修饰抽象类抽象方法
4、接口interface(implements实现接口)
周六案例:
账号管理系统
WEEK_3_1
1、关于this关键字和super关键字的详解
如右图所示:
This在搜索是,从Coo开始查找,没有则继续向上查找,直到Object
Super搜索是从Boo开始查找,直到Object,第一个找到的即时最终的值
则:
This.a=6;
Super.a=3;
这也是“属性是静态绑定”的体现
2.、关于hashCode()方法equals()方法
Equals()方法的标准模式:
PublicBooleanequals(Objectobj){
If(obj==null)returnfalse;
If(obj==this)returntrue;
If(objinstanceofA){
Return//….
}
Returnfalse;
}
2、字符串的API
----concat()字符串拼接
----toUpperCase()和toLowerCase()
----Stringsubstring()字符串截取
----intindexOf()和lastIndexOf()
----startWith()和endsWith()
----toCharArray()
3、关于JAVA的常量优化的概念
----java在编译时,将能够运算出结果的常量进行先运算在编译;
----字符串常量的管理采用字符串池进行管理,池中相同的(equals)的元素指向同一个对象
例如:
Strings1=“123abc”;Strings2=”123”+”abc”;
S1和s2是指向同一个对象的,即s1==s2;
然而Strings3=s1+””;并不是与s1相同的,因为s1是变量,不会再编译时进行常量优化,因此运行是s3时堆内存中新分配的一个对象引用
Strings4=newString(“123abc”);//这句语句产生的s4与常量池中的abc是不一样的,因为new关键字总是在堆内存中开辟新对象返回新的引用
4、关于正则表达式
.匹配单个字符
$匹配行结尾
^匹配行开始
[c1-c2]匹配c1-c2中任何值
\d\w{a1,a2}{a1,}{a1}{1,}+{0,}*|?
5、String类支持正则表达式的API
Match()-boolean
replaceAll()-String
split()---String[]
6、StringBuilder类----StringBuffer
7、重载的概念-----覆盖的概念
WEEK_3_2
1、线性表(List)java.util.List类
2、关于插入排序、选择排序、冒泡排序和系统提供的快速排序(Arrays.sort())
WEEK_3_3
1、Arrays.asList(array)
2、HashMap和Hashtable
3、迭代Iterator接口(Collection都实现了)
Listls=newArrayList();
Iteratorit=ls.iterator();
While(it.hasNext()){
Objecto=it.next();
//…..
}
迭代期间可以使用it.remove()方法删除元素,而采用collection.remove()是会引起异常的
4、集合关系图:
理解清楚集合之间的关系,熟练使用ArrayList和HashMap即可
5、泛型(Generic)
6、Java.util.Collections工具类
----Collections.sort()方法,允许重载比较器
---Collections.shuffle()打乱整个集合,允许自定义compareTo(Ta)方法
----binarySearch()折半法查找
7、包装类:
八种基本数据类型均有对应的类,如果String一样,包装类对象也采用常量池优化的方法
包装类得装箱和拆箱操作
包装类提供了相应数据类型的工具方法:
---toBinaryString()…..
----Integer.parseInt();例如:
charch=(char)Integer.parseInt(“4e2d”,16);
WEEK_3_4
1、关于hashMap的迭代
A、foreach()
B、Sets=hm.keySet();
Iteratorit=s.iterator();
While(it.hasNext()){
Hm.getValue(it.next());
//..
}
C、Map.entry方式迭代,不解释
2、内部类:
A、静态内部类staticclass
B、成员内部类
C、局部内部类
D、匿名内部类
其中,匿名内部类由于其语法灵活,而广泛的使用在接口和抽象类得临时实现上,能够实现运行时的方法回调(callback)
3、Date类
4、Calender类
Long-------------------Date-----------Calender
底层的基础表示和显示方便计算方便
几种时间的转换:
不解释
5、时间的格式化输入与解析:
SimpleDateFormat类
WEEK_3_5
1、常见的几种异常:
不解释
2、异常处理原则,不解释
3、异常(Exception)和错误(Error),错误,程序不能够在回到正常状态,而异常能够经过处理使程序回到正常状态,例如堆栈溢出错误,空指针异常
4、Java.IO
A.File类,目录属性,增删改插操作
B.文件的递归遍历
C.RandomAccessFile类,随机文件存储类
Rf.seek();rf.read();rf.write();
注意控制好文件的游标位置
D.InputStream----OutputStream(字节流)
Reader-----Writer(字符流)
InputStreamReaderOutputStreamWriter(字符流和字节流之间的转换)
节点流
|
过滤流
E.按行读取文本BufferedReaderin;in.readLine();
F.写入文本:
PrintWriterout;out.println();
理解流的模型,大道成也。
WEEK_4_1
1、对象序列化Serializzble接口
2、ObjectInputStream--------ObjectOutputStream
3、文本序列化(字符编码的问题)
Gbk编码:
支持中文和英文,采用变化的编码,1-2字节
其中英文1B,中文2B,支持2W