JAVA笔记完整版Word文件下载.docx
《JAVA笔记完整版Word文件下载.docx》由会员分享,可在线阅读,更多相关《JAVA笔记完整版Word文件下载.docx(146页珍藏版)》请在冰点文库上搜索。
|--java.util.Scanner
echo命令:
回显
echoabc就会在屏幕上显示abc
PATH是Linux操作系统的环境变量
$PATH是读取变量的值
echo$PATH命令就是将$PATH取回的变量值显示到屏幕
简单说就是看看PATH变量的值
PATH变量的作用:
操作系统可执行命令的搜索路径,操作系统
在执行命令时候,逐一搜索PATH指定的路径,找到命令执行
如果找不到就报错误:
commandnotfound
export导出命令,可以用来修改环境变量
exportPATH=/bin
在终端窗口中的环境变量设置,只在当前窗口中生效。
关闭就取消了
安装JDK以后要配置环境变量
1)配置PATH,目的是将Java开发工具命令,扩展为系统命令
PATH=/opt/jdk/bin:
$PATH
exportPATH
2)JAVA_HOME环境变量是Java的环境变量,作用是指示java应用
软件找到Java的安装目录(/opt/jdk)
JAVA_HOME=/opt/jdk
exoprtJAVA_HOME
3)CLASSPATH环境变量是Java的环境变量,作用是指示Java在
运行期间Javaclass文件的搜索位置
CLASSPATH=.
exoprtCLASSPATH
Linux系统的配置在:
/etc/profile文件中配置好了
/etc/profile是系统初始化脚本,在系统开机时候会自动执行
2进制计数规律
二进制补码!
成本考虑,为省钱!
以4位补码为例
1)将高位为1的大数,作为负数使用!
最高位称为符号位.
2)计算时候如果超过4位数,多出数位自动溢出舍弃.
3)在不超过范围情况下,补码运算满足数学规则
4)缺点数字有范围,不能进行超范围计算
补码的取反对称现象:
-n=~n+1
符号位扩展现象:
低位数补码扩展为高位数补码:
正数补0负数补1
-5的补码:
-5=~5+1
2.Oop
Day01
对象:
就是一件东西,任何存在的事物都是对象,一切皆对象。
对象在业务逻辑上是一个事物个体
对象在本质上是结构化数据
对象的每个数据成员称为对象属性(实例变量)
类:
对象的类型,是名词概念,
本质上是对象的数据结构定义
类中声明的对象的属性
对象属性在类中声明,运行期间在堆内存中分配对象(对象属性)
(不运行,Java中不分配内存)
引用:
引用变量,业务逻辑上引用对象的代词,本质上存储的值是对象的首地址,通过首地址间接引用了对象
引用类型变量的值,不是直接的对象,是通过地址间接访问对象。
应用本身不是对象。
方法:
对象的行为(功能)
方块的移动。
方法的行为(功能)的实现是利用算法操作对象数据实现的
重载的方法调用规则
java根据参数类型,尽可能简单转换的原则调用重载方法(就近原则)
5先是intlongfloatdouble
Day02
“存在“的事物,本质是结构化”数据“
一个窗口框(位置,宽高等),一个面板(大小),一个T型方块(4个格子),一个小格子(行,列,颜色)
对象的属性(对象的数据),也称为:
实例变量
用类创建对象,需要先声明类,类是对象的抽象结构定义,对象的属性是定义在类中的
对象的属性是定义在类中的。
使用new运算调用构造在堆中分配内存创建对象。
对象都在堆(内存)中创建。
构造器:
创建并且初始化属性的过程。
名称与类名一致,不能声明返回值。
可以有参数,参数是创建对象的前提条件。
对象的行为:
moveDown()
方法是业务功能的体现,本质是利用算法操作数据(对象)实现。
继承:
被继承的类型是父类型(SuperClass)继承类型是子类型(SubClass)
1)子类继承父类中所有可继承资源
属性如:
cells
方法(私有除外)如:
所有子类共享了父类的方法
2)私有方法不继承,构造器不可继承
3)父类可以定义引用子类型实例,向上造型
Tetrominot=newI();
Tetromonot=newT();
注意:
Java按照"
变量类型"
检查是否调用方法。
4)子类型可以利用重写(覆盖)修改父类型的方法。
paint()方法,修改了系统默认的绘图功能。
重写的方法,动态调用的是子类型对象的方法(动态绑定)。
5)属性是根据变量类型进行访问的。
6)默认构造器现象。
implicit含蓄的,暗示的,盲从的
duplicate复制,使加倍
重载与重写的区别
重写:
是子类型定义与父类型”一样的方法“,用于子类型修改父类的方法!
最重要的是”修改“!
修改以后,在运行期间执行的是子类对象的方法
父类型的方法就别替换掉(修改)了。
语法:
1)子类方法名与父类一样,参数与父类相同,
2)修饰词可以放大,异常可以具体化(小类型)
3)父类的私有方法,不能继承,就不能别重写!
4)运行期间动态调用对象类型的方法
重载:
是类中(含父子类型)方法名一样,功能类似,参数不同的方法。
1)方法名一样,参数列表不同的方法
2)目的是使API的设计更加优雅
3)根据方法名和参数的类型调用对应的方法
println(int)println(65);
piritln(double)println(char(65));
println(char)println(65.25);
Day03
访问控制(访问修饰):
控制属性,方法,类的可见范围
public修饰类,属性,方法,构造器,内部类等,在任何地方都可见
protected只能修饰类的成员,在类体中使用,在当前package中可见(很少使用package作为访问范围),保护的成员主要留给子类使用的资源
默认的在当前package中可见,很少使用
private只能修饰类的成员,在类体中使用,是彻底封装,仅在类内部可见。
使用原则:
尽可能私有,留给子类使用保护。
减少使用公有,默认的几乎不使用
常见方式:
私有属性,公有使用方法(getset方法)
Java源文规格
package{0,1}
import{0,n}
publicclass{0,1}只能有一个共有类,而且文件名与共有类一致
class{0,n}一个文件中的多个类都是默认的
如果没有共有类,那么文件名和任意类名一致
只有共有类才能在其它包中访问,默认类只能在当前包中访问
一般情况下,一个文件一个共有类!
Day04
static静态的,可以修饰类的成员,在类体中使用
可以修饰属性,方法,代码块
静态的资源都是属于类的
静态属性:
是属于类的属性,在类加载期间初始化,并且只有一份,通过类调用
图片素材只加载一次就够了
静态方法:
是属于类方法,使用类名调用,经常作为工具方法/工厂方法,静态方法没有隐含参数
this,与当前对象无关,不能访问当前对象(this)的方法,属性
静态代码块:
在类中声明,在类加载期间执行,只执行一次
用于加载一次的静态资源,如:
图片素材
final
finalclass不能被继承
final方法不能被重写
final变量用的多,"
final变量"
只能初始化,不能再修改了
finalinta=5;
//变量a的值不能再次修改
//ary是引用变量,值是地址值,通过地址间接引用了数组
finalint[]ary={5,6};
//变量ary的值不能被修改了
ary=newint[3];
//错误变量的值不能再修改了ary里面存放的数组的地址不能修改了
ary[0]+=4;
//可以修改
staticfinal常量
定义软件中,不变化的常数:
CELL_SIZE
命名:
使用全大写命名,多个单词使用下划线隔开
区别:
常量与字面量
对象数组元素是对象的数组,实际上元素是引用类型变量
Cell[]cells=newCell[4];
//创建数组,但元素是空
Cell[]line=newCell[10];
cells=newCell[]{newCell(0,4),newCell(0,3),newCell(0,5),newCell(1,4)}
二维数组本质上是一维数组
抽象类
业务方面:
表达了抽象的概念,与具体相反
抽象概念包括抽象行为,如:
饮料一定可以打开,由具体饮料类型决定
语法方面:
1)使用abstract关键字定义抽象类
2)抽象类中可以定义抽象方法
3)抽象类可以定义变量,引用子类型对象
4)抽象类不能直接创建对象
5)抽象类只能被继承
6)继承抽象类,必须事项全部的抽象方法
Tetromino,就应用的是抽象类
如果直接创建4格方块,移动的方法是不能够执行的
改热键
这个方法可以给eclipse恢复出场设置
删除/home/tarena/works/.metadata/**源数据文件夹*/
cd/home/tarena/works/.metadata
ls-a
rm-rf.metadata
要启动eclipse导入
Day05
尽量封装
1)使用abstract关键字声明的类。
2)表示逻辑上的抽象概念,如:
4格方块
3)抽象类不能直接实例
4)抽象类只能被继承
5)抽象类可以定义变量,引用具体类的实例
抽象类的实例是多种多样的--多态现象
如:
4格方块的具体实例是多种多样的
6)抽象类中可以定义抽象方法,代表必须由子类实现的抽象的功能,抽象方法规范了子类的方法。
抽象方法:
使用abstract关键字定义,有方法名,没有方法体,必须有子类实现的方法。
抽象类:
TimerTask规范了子类必须实现run()方法。
实现API与使用者的约定。
接口
1)是纯抽象类,接口(interface)中只能定义抽象方法,和常量
2)子类可以实现(implements)多个接口,就是Java中的多继承现象
3)接口可以定义变量,引用子类型实例
4)接口也用于定义软件的规约
内部类
1)在类内部,或者方法中定义的类
2)使用目的,是为了封装类的定义范围,在类内部使用
软件中类:
1)共有类任何地方都可见
2)默认类当前包中可见
3)内部类类内部
4)匿名内部类当前方法中
匿名内部类--匿名类
1)语法简洁:
newXoo(){};
2)在方法中定义的内部类,作用域是当前方法。
3)内部类包括匿名内部类,都会编译为一个独立的.class文件(只要是类)
4)常用匿名内部类在方法中简洁的实现接口或者抽象类
5)匿名类中的方法经常被回调执行
如下代码:
run()方法被定时器timer,在适当的时间,执行,实际上是将run方法交给了Timer,
由Timer在适当的时候,被Timer回调执行
Timertimer=newTimer();
timer.schedule(newTimerTask(){
publicvoidrun(){
System.out.println("
HI"
);
}
},0,1000);
3.Se
Object类
java中所有的类都直接或者间接的继承自Object。
所以java有一句话是一切接对象
当我们定义的类没有显示的继承任何类的时候
jvm在编译时会自动默认将该类继承自Object
这个是一个强制性的。
所以,通常我们不需要显示的继承Object
Object方法:
publicStringtoString():
在Object中该方法返回的字符串为该对象的“句柄”。
格式为"
类名@hashcode"
。
java定义Object的toString方法,希望我们在需要的时候可以重写。
该方法的真是意图是返回能够描述该对象的一个字符串。
equals方法
publicbooleanequals(Objecto)
比较两个对象内容是否相等。
Object对该方法的实现就是使用"
=="
实现的。
所以毫无意义。
若要判断两个对象内容是否相同,应重写该方法。
定义对象内容的比较规则。
对于引用类型来讲:
"
:
判断是否为同一个对象
equals"
判断两个对象是否"
长得像"
clone方法:
publicObjectclone()
该方法返回当前对象的一个副本。
渐层复制实现。
hashcode方法
publicinthashcode()
返回一个int值。
该方法在具有哈希算法的地方非常有用。
后面会讲。
字符串
String类
java.lang.String类的实例用于封装一个字符序列。
一个字符串中的每个字符都对应的是一个unicode编码,换句话说,一个字符对应两个字节保存在内存中。
字符串内部维护着一个char数组。
用于保存这个字符串。
char占2字节,每个字符用unicode编码保存
字符串对象为不变对象,一经创建不可改变。
一旦对字符串进行修改操作,会创建新的对象
java对字符串操作的优化
java中允许我们将一个字符串字面量赋值给字符串引用类型变量。
例如:
引用类型变量字面量
Stringstr="
Hello"
;
Stringstr2="
在语法上看来更像是对基本类型变量赋值。
处于性能的考虑,java对字面量产生的字符串进行了缓存。
将他们缓存在字符串的常量池中。
对于重复出现的字面量赋值,jvm会先查找常量池中是否有过这个字符串,若有则直接引用,减少字符串对象的创建。
节省内存资源。
字符串常用方法:
StringtoLowerCase():
将英文转换为小写
StringtoUpperCase():
将英文转换为大写
Stringtrim():
去掉字符串两边的空白
booleanstartsWith(Stringprefix)
查看当前字符串是否以给定字符串开头。
booleanendsWith(Stringprefix)
查看当前字符串是否以给定字符串结尾。
intlength()
返回当前字符串的字符总数
intindexOf(Stringstr)
返回给定字符串在当前字符串中第一次出现的位置。
这个位置是给定字符串首字符在当前字符串中的位置。
若给定字符串在当前字符串中不包含返回-1
intindexOf(Stringstr,intfromIndex)
从fromIndex指定的位置开始查找给定字符串
是否在当前字符串中存在。
intlastIndexOf(Stringstr)
返回给定字符串在当前字符串中最后一次出现的位置。
charcharAt(intindex)
返回当前字符串中指定位置的字符
字符串方法
Stringsubstring(intstartIndex,
intendIndex)
截取当前字符串,从startIndex开始截取到endIndex,并将截取的字符串返回。
该方法截取的字符串不包含结束索引对应的字符。
JDK中提供的方法,通常用两个int描述一个范围的时候,都是"
含头不含尾"
的
重载方法
Stringsubstring(intstartIndex):
截取当前字符串,从startIndex开始截取到字符串末尾,并返回。
byte[]getBytes(StringcharsetName)
将当前字符串按照给定的字符集进行编码,并返回编码后的字节数组
编码:
将特定的数据按照某种方式转换为2进制的过程称为编码
数据--->
2进制
解码:
将2进制的内容按照某种方式转化为特定数据的过程称为解码
2进制--->
数据
字符集编码:
gbk:
国标编码简体中文编码集
gb2312:
繁体中文编码集
iso8859-1:
欧洲常用的一种编码集
UTF-8:
世界最通用的编码集。
也是最常用的
字符串中支持正则表达式的方法
正则表达式:
以一个特殊的字符串来描述一个格式。
让程序
按照这个格式去验证字符串。
那么用于描述格式的这个字符串就是正则表达式。
正则表达式的语法
[]:
方括号中可以列举出现的内容,任选其一
方括号代表一个字符。
[abc]:
可以出现一个字符,只能是a或b或c
[^abc]:
可以出现一个字符,但不能是abc
[a-z]:
只能出现一个小写英文字母
a-z表示一项,只不过是一个范围
[a-zA-Z0-9]:
描述一个字符,可以是任意数字或字母
[a-z&
&
[^bc]]:
a-z但不能是b或c
.:
"
."
用来描述任意一个字符
\d:
描述任意一个数字等同于[0-9]
\D:
描述任意一个非数字字符等同[^0-9]
\s:
任意一个空白字符
\S:
描述任意一个非空白字符
\w:
任意一个单词字符等同[a-zA-Z_0-9]
\W:
任意一个非单词字符等同[^\w]
正则表达式中的量词
?
:
表示前面的内容出现0-1次
[\w]?
要么有要么没有一个单词字符
*:
表示前面的内容出现0-任意次
[\d]*任意个数字
[0-9]*
+:
表示前面的内容出现1-任意次
[\d]+1个以上数字
{n}:
表示前面的内容出现n次
[\d]{11}出现11位数字
{n,m}:
表示出现最少n次最多m-1次
{n,}:
表示出现n次以上
():
圆括号用于将其内部内容看做一个整体
例如:
[abc]+:
aababa
(abc)+:
abcabcabc
[\w]+@[a-zA-Z0-9]+(.com|.cn|.net)+
String[]split(Stringrex)
拆分字符串
根据给定的正则表达式,按照满足的部分进行拆分,将拆后的每部分存入数组并返回
拆分时要注意,若根据拆分的正则表达式后面没有任何内容,则后续的拆分全部抛弃不要。
StringreplaceAll(Stringrex,Stringreplcement)
将当前字符串中满足正则表达式的部分替换为给定的字符串,并将结果返回。
commons-lang.jar
Apache的一个子项目
该包对java.lang下的类做了一些功能上的补充。
该包下有一个类叫做StringUtils
该类提供了若干静态方法。
这些方法是对
java.lang.String类的功能的补充。
StringBuilder
和String不同,该类的实例封装了一个可变字符序列。
当我们需要对一个字符串进行频繁修改的时候,应首先选取该类来完成。
常用构造方法:
StringBuilder():
创建一个不含有任何字符的StringBuilder
StringBuilder(Stringstr)
创建一个包含str字符串的StringBuilder
StringBuilder提供了用于修改字符串内容的方法:
append():
向当前字符串末尾追加新内容
delete():
删除字符串中的部分内容
insert():
向字符串的指定位置插入新内容
replace():
替换字符串中部分内容为新内容
StringBuffer
用法和功能与StringBuilder一模一样。
StringBuffer是线程安全的。
Date类
Date类的实例用于描述一个日期和时间
在以后的开发中,我们仅仅使用该类的实例去描述一个时间。
对于时间的操作,我们不要再使用该类来完成。
Date的设计存在千年虫问题。
构造方法
Date():
创建一个用于描述当前系统时间的Date对象
Date重写了toString方法,该方法返回的字符串是用来描述它所描述的时间的。
常用方法:
longgetTime():
获取当前对象描述的时间的毫秒值
所谓时间的毫秒值指的是从1970年的1月1日的0点0分0秒到这个时间点的毫秒值。
SimpleDateFormat
该类可以在Date与String之间相互转换。
可以根据我们希望的格式将日期转换为字符串,反之也可以。
DateFormat
DateFormat是Sim