Java笔记整合Word格式.docx
《Java笔记整合Word格式.docx》由会员分享,可在线阅读,更多相关《Java笔记整合Word格式.docx(88页珍藏版)》请在冰点文库上搜索。
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会到路径中去找有没有这个类,找到就执行)
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个字节
字符串常量"
字符常量'
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
'
='
+32;
一般来说,声明变量是什么类型,赋的值也是什么类型。
但是有时声明类型和赋的值的类型可以不一样。
1、如果赋的值的表示范围比声明的变量的表示范围小,可以自然转换
2、反之,自然转换会发生编译错误;
如果想要这样赋值,就需要强制转换,在被转换变量钱加一对小括号,其中写上要转成的类型,如:
longl=100L;
inti=(int)l;
//用这种强制转换,程序员必须自己确认强转后不会发生精度损失
长整型装进一个int变量,就会截取8个字节中的低4字节,如果高4字节不为0,强转就会发生精度损失。
二、引用数据类型(下周讲)
运算符
一、数学运算符
加+
可用于数字相加,如1+1返回2
还可以用于字符串连接,如"
1"
+"
返回"
11"
字符串和数字类型相加,会将数字先转为字符串再拼接,如"
+11返回"
1111"
又如"
+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;
//编译出错,损失精度
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语句
语句1
}else{
语句2
如果条件成立,则执行语句1,否则执行语句2
3、if、elseif、else语句
if(条件1){
语句1;
}elseif(条件2){
语句2;
}elseif(条件3){
语句3;
语句4;
4、if语句可嵌套
局部变量的生命周期,从声明开始,到声明所在的代码块结束就结束;
如果生命周期结束了再使用,就会产生编译错误
switch语句
switch(变量){
case常量1:
语句1...;
break;
case常量2:
语句2...;
case常量3:
语句3...;
...
default:
语句;
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、如果自己定义了构造方法,那么隐式的就没