Java笔记整合.docx

上传人:b****1 文档编号:2322895 上传时间:2023-05-03 格式:DOCX 页数:88 大小:327.07KB
下载 相关 举报
Java笔记整合.docx_第1页
第1页 / 共88页
Java笔记整合.docx_第2页
第2页 / 共88页
Java笔记整合.docx_第3页
第3页 / 共88页
Java笔记整合.docx_第4页
第4页 / 共88页
Java笔记整合.docx_第5页
第5页 / 共88页
Java笔记整合.docx_第6页
第6页 / 共88页
Java笔记整合.docx_第7页
第7页 / 共88页
Java笔记整合.docx_第8页
第8页 / 共88页
Java笔记整合.docx_第9页
第9页 / 共88页
Java笔记整合.docx_第10页
第10页 / 共88页
Java笔记整合.docx_第11页
第11页 / 共88页
Java笔记整合.docx_第12页
第12页 / 共88页
Java笔记整合.docx_第13页
第13页 / 共88页
Java笔记整合.docx_第14页
第14页 / 共88页
Java笔记整合.docx_第15页
第15页 / 共88页
Java笔记整合.docx_第16页
第16页 / 共88页
Java笔记整合.docx_第17页
第17页 / 共88页
Java笔记整合.docx_第18页
第18页 / 共88页
Java笔记整合.docx_第19页
第19页 / 共88页
Java笔记整合.docx_第20页
第20页 / 共88页
亲,该文档总共88页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Java笔记整合.docx

《Java笔记整合.docx》由会员分享,可在线阅读,更多相关《Java笔记整合.docx(88页珍藏版)》请在冰点文库上搜索。

Java笔记整合.docx

Java笔记整合

Java笔记整合

目录

目录1

Day01(配置环境)3

Day02(进制与运算符)8

Day03(分支语句)15

Day04(循环语句)19

Day05(方法调用与重载)20

本周小结(第一周)22

Day06(数组及其排序查找)23

Day07(类与对象的创建)26

Day08(get,set与修饰符)30

Day09(继承及其抽象类)36

Day10(多态及其接口)41

本周小结(第二周)48

Day11(四种内部类)50

Day12(工具类与正则表达式)57

Day13(异常与集合list,set)65

Day14(泛型与自定义比较逻辑)70

Day15(Set与Map)74

本周小结(第三周)78

Day16(文件I/O,fis,文件复制)80

Day17(字符流Reader,装饰流)86

Day18(内存流,打印流,对象流,数据流)91

Day19(线程与进程)96

Day20(多线程及其P-C模式)99

本周小结(第四周)103

Day01(配置环境)

java

分类:

1、JAVASEstandardedition标准版,Java基本功能及桌面开发套件(Swing等UI框架我们不学)

2、JAVAEEenterpriseedition企业版,做http服务端开发,其核心组件是Servlet(不是重点)

3、JAVAMEmicroedition手机端,已经基本不用了

特点:

1、跨平台,因为java在编译成字节码后是在虚拟机上运行,而虚拟机可以运行在各种操作系统上(一处编译,处处运行)

2、面向对象(下周讲,简单讲高内聚,低耦合)

3、垃圾回收(下周讲,开辟的内存用完可以自动释放)

编译java源码成为字节码,需要编译器,可以使用JDK中的编译器。

JDKjavadevelopmentkitjava的开发套件,主要包含了java的编译器(把源码.java编译成字节码.class)和运行环境(运行.class文件)

JREjavaruntimeenvironmentjava运行环境(一般在Windows的c:

\programfiles\java\下有一个jre目录,里面就是运行时环境)

(可以说JDK包含了JRE,如果要开发java的话,一定要装JDK)

JDK的安装用默认路径就可以了。

java源代码编写:

1、一律以.java为后缀

2、文件名最好首字母大写

3、首先在文件中声明一个类

publicclass类名{

}

4、在类体中写入入口方法(函数)main方法

publicstaticvoidmain(String[]args){

}

5、在main方法中打印一句HelloWorld

System.out.println("HelloWorld");

源码编译:

到源码所在目录下,执行javac源码文件名,就会在此目录下产生一个同名的.class文件,编译就完成了

运行:

在字节码所在目录下,执行java类名,就会在虚拟机中执行这个字节码

-----------------------------------------------------------------------------------------------------------

cdabc

cd..

cd..\..切换到上上层

cd\切换到当前盘符的根目录

cls清屏

dir显示目录

在jdk的bin路径下执行java-version,查看编译器版本,以后编译就使用javac命令

在此路径下还可以执行java-version,查看虚拟机版本,以后虚拟机执行字节码就用java命令

一、path

现在javac和java两个命令只能在bin目录下执行,想要在任何路径下都能执行它们,可以配置环境变量path

1、右击我的电脑->属性->高级->环境变量

2、找到系统环境变量中的已有的path变量。

这个变量中已经配了很多路径,这些路径用分号;隔开,我们要将JDK的bin路径添加到后面,确认后重新打开dos窗口,就能在任意路径下执行javac了

(在dos下执行javac.exe,首先会在先前目录下寻找这个文件,有的话直接执行,没有的话,到环境变量path中的所有路径下找,找到了就执行,找不到)

二、classpath

除了path这个环境变量,还可以配置classpath

(执行javaHello会到路径中去找有没有这个类,找到就执行)

1、右击我的电脑->属性->高级->环境变量

2、在系统环境变量中创建一个叫classpath的环境变量

3、classpath是这个变量的名字,它的值是表示要到哪些路径下去找要运行的类,一般会将当前路径放进去,也就是.点号,另外一半也将jdk中的lib路径也放进去,分隔还是用;分号

注意:

如果不配置classpath,会自动把当前路径纳入类的寻找范围;但是要配置的话一定要配置对,比如忘记了.点号就会导致运行错误。

三、JAVA_HOME

一般将这个环境变量的值设置为JDK的根目录,比如C:

\ProgramFiles(x86)\Java\jdk1.7.0_75

为什么要使用JAVA_HOME

1、有些应用程序如Tomcat,默认就要读这个JAVA_HOME

2、可以简化path等环境变量的值,并且方便jdk根目录的更改

注意:

在一个环境变量中使用另一个环境变量,不能直接写名字,需要在调用的另一个环境变量两边加上百分号%%

%JAVA_HOME%\bin

%JAVA_HOME%\lib;.

这样表示两个百分号之间的是一个环境变量,我们将取出其值,并将此值和\bin拼接

这里path和classpath都使用了JAVA_HOME这个环境变量,所有跟JDK根路径相关的信息都只写在了JAVA_HOME里面

程序如何获取用户输入的信息:

Scanners=newScanner(System.in);//创建一个扫描器对象,用于扫描系统输入流(扫描用户的输入)

Stringline=s.nextLine();//用这个扫描器获取用户输入的一行文本

System.out.println(line);

(需要在一开始导入Scanner

importjava.util.Scanner)

除了nextLine()还有如nextInt()、nextFloat()、next()等方法可以获取用户不同类型的信息

(注意nextLine不要和其他的方法混用)

打开JDKAPI文档(chm格式),显示->索引->输入关键字->回车

jsJavaScript解释执行的脚本语言,一般在浏览器中执行,不需要编译,浏览器解释执行

Day02(进制与运算符)

标识符identifier名字(类、变量、方法、包)

命名规范:

强制规范:

1、字母、数字、下划线,首字母只能是英文字母、下划线(否则不能编译通过)

2、不能是关键字

非强制规范(驼峰法则):

1、类名,首字母大写,如果由多个单词组成,那么每个单词的首字母大写

ArrayList、FileInputStream、HttpURLConnection

2、变量名、方法名,首字母小写,之后每个单词首字母大写

schoolAge、readLine()

3、见名知义

常量

整型常量1000

长整型常量1000L

双精度浮点型1000.08个字节

单精度浮点型1000.0F4个字节

字符串常量"HelloWorld"

字符常量'H'

二进制和十进制的转换

java中十六进制的表示0xFF0F00

变量

声明变量:

类型变量名;

给变量赋值:

变量名=常量;(把常量赋给变量)

变量名=另一个变量名;(把另一个变量的值赋给这个变量)

注意:

可以先声明,再赋值,也可以在声明的同一句语句中进行赋值,比如:

inti;

i=100;

intj=100;

(声明其实是在内存中开辟空间,而赋值是往这个空间中存放数据)

同一类型的变量可以在一句语句中连续声明、赋值

inti,j,k;

inti=1,j=2,k;

变量的分类:

1、局部变量声明在方法中的变量称为局部变量(在栈内存中分配)

局部变量的生命周期仅限于所在方法,方法结束了,变量肯定会被回收。

局部变量在使用前一定要初始化(赋值),如果声明了一个局部变量,没给它赋值,就直接去使用,会产生编译错误。

2、成员变量(属性)声明在类中的变量称为成员变量(在堆内存中分配)

(成员变量的生命周期是跟着所在对象,对象被回收,这个成员变量也会被回收)

(成员变量在使用前可以不显式初始化)

Java中数据类型

一、基本数据类型8中

byte字节1个字节-128~127-2的7次方~2的7次方-1

short短整型2个字节-2的15次方~2的15次方-1

int整型4个字节

long长整型8个字节

浮点有2种

float浮点型4个字节

double双精度浮点型8个字节

boolean布尔类型一位只有两种值true、false

char字符类型2个字节0~65535(java中的字符可以直接表示中文)

ASCII码'a'97'b'98...'A'65'B'66...'0'48

'a'='A'+32;

一般来说,声明变量是什么类型,赋的值也是什么类型。

但是有时声明类型和赋的值的类型可以不一样。

1、如果赋的值的表示范围比声明的变量的表示范围小,可以自然转换

2、反之,自然转换会发生编译错误;如果想要这样赋值,就需要强制转换,在被转换变量钱加一对小括号,其中写上要转成的类型,如:

longl=100L;

inti=(int)l;//用这种强制转换,程序员必须自己确认强转后不会发生精度损失

长整型装进一个int变量,就会截取8个字节中的低4字节,如果高4字节不为0,强转就会发生精度损失。

二、引用数据类型(下周讲)

运算符

一、数学运算符

加+

可用于数字相加,如1+1返回2

还可以用于字符串连接,如"1"+"1"返回"11"

字符串和数字类型相加,会将数字先转为字符串再拼接,如"11"+11返回"1111"

又如"11"+11+11返回"111111"

减-

乘*

除/

取余%

题目:

让用户输入一个数字n,程序就输出:

啊n环,你比n-1环多一环,啊n环,你比n+1环少一环

二、赋值运算符

=将其右边的常量或变量的值赋给左边的变量

+=

-=

*=

/=

%=

++

--

i++

++i

三、比较运算符

==

!

=

>

<

>=

<=

四、逻辑运算符

&&短路逻辑与

||短路逻辑或

!

逻辑取反

!

true返回false

^逻辑异或

两边不同返回true,相同返回false

&非短路逻辑与如果左边为false,右边仍然会执行(短路逻辑与的话右边不会执行)

|非短路逻辑或如果左边为true,右边仍然会执行(短路逻辑与的话右边不会执行)

五、位运算符

位与

&两边各有一个int类型,会对两边数字每一个对应的位进行与操作,返回最终的int结果

位或

|两边各有一个int类型,会对两边数字每一个对应的位进行或操作,返回最终的int结果

一个int4个字节,表示颜色ARGB,

六、位移运算符

>>位右移除以2

<<位左移乘以2

>>>无符号右移

(>>位右移如果是正数,左边补0,如果是负数,补1)

无符号右移,不论正负,一律左边补0

七、三目运算符

表达式1?

表达式2:

表达式3

表达式1为boolean类型,如果其为true,整个返回表达式2,为false的话返回表达式3

表达式的返回类型

1、两个不同类型相加,返回类型取范围大的那个

inti=10;

i=i+1L;//编译出错,损失精度

inti=10;

i+=1L;//编译通过,会强制转换类型

2、两个byte、short、char(低于4个字节的类型)相加,返回int类型

3、=赋值运算符返回类型及值

返回的就是赋的那个值

Day03(分支语句)

缩进

1、在类中定义成员变量、方法等,应该缩进(使用tab键)

2、在方法中书写逻辑,也应该在方法的基础上进行缩进

3、ifelse语句也要缩进

运算符的优先级

详见图片,一般可以通过小括号确保某个运算先执行

转义符

在字符串中表示",需要进行转义

\"表示字符串中双引号

\r回车符

\n换行符

\r\n表示换行

\t制表符,相当于一个tab,用于对齐

\\两个反斜杠转义表示一个反斜杠

顺序语句

分支语句

循环语句

今天主要讲分支语句

主要关键字:

if、else、elseif、switch、case、break、default

if(条件){

语句

……

}

小括号中的条件为boolean类型,如果条件为true,成立,就执行后面大括号中的那些语句,如果条件为false,不成立,则不执行。

大括号有时可以不执行,但是if语句只会对之后的一句语句起作用

2、ifelse语句

if(条件){

语句1

……

}else{

语句2

……

}

如果条件成立,则执行语句1,否则执行语句2

3、if、elseif、else语句

if(条件1){

语句1;

}elseif(条件2){

语句2;

}elseif(条件3){

语句3;

}else{

语句4;

}

4、if语句可嵌套

局部变量的生命周期,从声明开始,到声明所在的代码块结束就结束;如果生命周期结束了再使用,就会产生编译错误

switch语句

switch(变量){

case常量1:

语句1...;break;

case常量2:

语句2...;break;

case常量3:

语句3...;break;

...

default:

语句;break;

}

default语句可以没有,没有的情况下如果所有情况都不满足,那么就什么都不执行

循环for循环、while循环

for循环(foreach每次循环,每次循环都会执行判断,都会执行核心语句,都会进行条件变更)

for(表达式1;表达式2;表达式3){

语句;

...

}

表达式1只会在for循环开始之前执行一次,一般用于循环条件变量的初始化

表达式2每次循环都会执行,返回boolean类型,如果是true,那么循环得以进行,如果是false,那么循环终止

表达式3每次循环语句执行完后执行表达式3,一般来说表达式3会进行循环条件变量的变更

表达式3执行完后,会返回到表达式2继续判断,判断为true则继续循环

如果表达式2为true,则会执行大括号中的语句

如果程序陷入死循环,Ctrl+C可以强行终止死循环

//获取1970年1月1日0时0分0秒到现在的毫秒数

longm=System.currentTimeMillis();

Day04(循环语句)

for循环中变量的生命周期

1、表达式1中声明的变量,生命周期到所有循环结束时终止

2、在循环语句中声明的变量,生命周期仅限于单次循环

for循环中的break可以跳出整个循环,continue只能跳出本次循环,执行下次循环

嵌套循环

死循环

for(;;){

}

while(){

}循环

do{

}while();循环

Thread.sleep(2000);//睡2秒

Day05(方法调用与重载)

f(x)=x+1数学函数的定义

f

(1)=1+1=21代进去产生一个2传1进去返回2

g(x,y)=x*y定义

g(3,4)=3*4=12使用

Java中方法(函数)的定义:

[修饰符]返回类型方法名(类型参数1,类型参数2......){

逻辑

return值;

}

Java中方法(函数)的调用:

方法名(值1,值2,...);

方法定义时的参数称为形式参数、形参(特殊的局部变量)

方法调用时的参数称为实际参数、实参

在方法调用时会把实参的值赋给形参

一般来说实参和形参类型是一致的

return一旦执行,方法中其后面的代码不再执行

一般来说return的值和方法的返回类型一致

方法可以没有返回值,在这种情况下定义方法的返回类型为void(一定要写,不写编译不通过)

返回类型为void的方法中也可以写return,但是return后不能跟任何值,一旦return,方法立即结束,后面的代码不会运行

方法的重载:

在同一个类中,方法名字相同,但参数列表不同,称为重载

(参数列表不同:

包括参数类型不同或参数个数不同或参数顺序不同)

实参类型和形参类型有时可以不完全一样,如果实参范围比形参小,则可以;如果实参范围比形参大,则不可以。

return的值的类型和方法的返回类型也可以不一致。

如果实际返回值类型的范围比方法返回类型范围大,不可以。

递归方法中调用自己

本周小结(第一周)

需熟练掌握进制的相关算法、分支语句、循环语句以及方法的调用

其中,

二进制与十进制的互转

十进制与十六进制的互转

二进制与十六进制的互转

分支语句主要掌握if-else,switch-case

循环语句主要掌握for,while

方法的重载:

在同一个类中,方法名字相同,但参数列表不同,称为重载

(参数列表不同:

包括参数类型不同或参数个数不同或参数顺序不同)

Day06(数组及其排序查找)

数组存储一组相同类型数据的数据结构。

数组本身是引用数据类型,数组中的元素可以是基本数据类型,也可以是引用数据类型。

在创建数组时,可以指定数据的长度,但创建完后不能变更长度。

数组的声明:

元素类型[]数组名;

元素类型数组名[];

注意:

声明数组引用时不能指定长度(因为声明的引用只是用来存放数组对象的首地址,此时数组对象还未产生,没有长度信息)

数组的创建:

new创建数组(对象)的关键字

new元素类型[数组的长度];

元素类型[]数组引用=new元素类型[数组的长度];(声明和创建同时进行)

元素类型[]数组引用;

数组引用=new元素类型[数组的长度];(先声明,后创建)

数组创建后即有固定长度(元素个数),可以通过数组的length属性来获取。

用new的方式创建的数组,其中的元素都有一个初始值(int为0,double为0.0,char为0,boolean为false,引用类型为null)

数组的访问:

数组引用[下标];这样就能访问指定下标的数组元素

这里的下标用来指定数组的哪个元素,下标的范围为0到长度-1,也就是说,第一个元素下标0,第二个为1,最后一个为数组长度-1。

(超出这个范围会报出数组越界异常)

动态初始化:

用new的方式创建数组,并通过下标定位到元素更改其值

静态初始化:

元素类型[]数组引用名={值1,值2,值3......值n};

可以在一句语句中完成,声明、创建和初始化

注意:

静态初始化的声明和初始化必须在一句语句中,否则编译出错

第三种初始化:

new元素类型[]{值1,值2,值3......值n}

数组的排序:

冒泡排序

数组元素的查找:

1、顺序查找从头到尾遍历数组,和目标值比较,一致则返回下标,如果没找到,返回一个负数

2、二分法查找这种方法中中间查找的数组必须是排过序的。

每次都找中间位置,将目标和中间位置元素比较,如果目标大,则砍掉左边一半,如果目标比中间小,砍掉右边一半,砍掉后继续在剩下的范围内再进行中间位置的定位,再将中间位置元素和目标比较....

可以定义起始位置、结束位置变量,计算出中间位置,砍掉一半,就是将起始位置或结束位置进行移动。

main方法的参数String[]args,可以让我们在启动应用程序时传一些字符串进来。

可以在java类名后面跟上多个参数,每个参数之间用空格隔开,这样的话,main方法的形参args就会指向一个字符串数组,数组的长度就是启动时参数的长度

可变长数组

在定义方法时,形参写成类型...的形式,就是可变长数组,比如

修饰符返回类型方法名(类型...引用名){

}

调用方法时,传递的实参,是多个此类型的参数,比如

方法名(参数1,参数2,参数3)

这样会自动将这些实参转化为一个数组传递给形参

Day07(类与对象的创建)

二维数组数组的元素是数组

一、声明

元素类型[][]数组引用名;

元素类型数组引用名[][];

声明时不能指定长度

二、创建

1、静态创建

元素类型[][]引用名={{值1,值2,值3},{值4,值5,值6},{值7,值8}......};

静态创建方式子数组的长度可以互不相同

2、动态创建

new元素类型[长度1][长度2];

如:

int[][]array=newint[5][3];

动态创建方式每个子数组的长度都一样,每个元素的初始值是元素类型对应的默认值

3、动态创建另一种方式

new元素类型[长度1][];

这种方式只指定子数组的个数

注意这种方式只会创建二维数组本身,子数组不会自动创建,需要我们自己创建

(否则会产生空指针异常NullPointerException)

如:

int[][]array=newint[3][];

array[0]=newint[4];//手动创建子数组

array[1]=newint[5];

array[2]=newint[6];

三、访问

数组引用名[下标1][下标2]

访问某个元素

数组引用名[下标1]表示二维数组中下标1对应的子数组

要遍历二维数组的所有的元素,可以通过两层循环,外层循环遍历二维数组中的每个子数组,

内层遍历子数组中的每个元素

面向对象开发时以对象为单位,将数据和逻辑封装其中,以此提升软件易用性、灵活性、扩展性。

类和对象

类模板

对象实例

人类就是一个类每个人都是人类的一个实例

辨别方法:

对象isa类

java中的面向对象:

类的定义:

[修饰符]class类名{

......

}

对象的创建:

new类名()

如:

Humanzhangsan=newHuman();

类中可以定义变量、方法、构造方法

类中定义的变量称为成员变量或者属性,可以不进行初始化就使用(其值就是类型的默认值),

其生命周期从对象创建开始,到对象被销毁结束。

[修饰符]类型变量名[=初值];

访问对象的成员变量的值,也可更改

引用名.属性名

构造方法

在创建对象时自动调用的一种特殊方法(new关键字后面跟着的类名其实就是构造方法)

定义:

(在类中)

[修饰符]构造方法名(参数列表){

逻辑

}

1、构造方法和类同名

2、没有返回值

3、在对象创建时自动调用,一般用于初始化对象属性的值

4、如果类中没有任何构造方法,则会隐式含有一个无参的无逻辑的构造方法

5、如果自己定义了构造方法,那么隐式的就没

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2