JAVA学习笔记基础知识.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JDK :可以开发编译与运行JAVA程序的工具。
JRE:可以运行JAVA程序的工具。
JVM:java虚拟机,是在一台计算机上山硬件或软件模拟的计算机。
它的功能是读取并处理编译过的字节玛文件(class文件)
环境变量:
path:JDK 中bin 目录
classpath:.
java_home:JDK 的路径
homc_path: JDK 的路径
开始一>Sitj->cnid->java -version
JavaSE—Oraclc 今JavaEE
Java版木:
JavaSE:J2SE
JavaEE:J2EE
JavaME:J2ME
JAVA文件类型:
.java文件:源文件,保存JAVA源代码,文本文件。
.class文件:类文件,保存字节码,二进制文件。
使用javac命令将java文件编译为class文件:javac文件名.java (DOS文件名不区分大小写)使用java命令运行class文件:java类名(类名区分大小写)
1.在一个JAVA文件中可以有多个类
2.在个JAVA文件中只能有一个公有(public)的类
3.公有的类的名字必须与文件名-样(包括大小写)
4.JAVA代码区分大小写
5.niain()是程序的入口
6.通常情况下main()应该放在公有的类中
7.每句代码后面用分号表示结束
8.不允许在代码中直接书写中文的标点
注释:
1.单行注释:〃
2.多行注释:/*注释内容*/
3.文档注释
第三章
数据类型:有两种。
基本数据类型(简单数据类型),引用数据类型。
基本数据类型:有8种
数字类型:整型,浮点型
1.整型:表示十进制,八进制(0开头),十六进制(用Ox或0X头),在JAVA中没有无符号的数
字
a)byte:字节类型,1个字节-27—27-1
b)short:短整型,2 个字节-215—215-1
0 int:整型,4个字节在JAVA中整数默认为讪,-231—231-1
d) long:长整型,8个字节,-263—263.1,在数字后加1或L
2.浮点型:
a)Ooat:单精度,在数字后面加F或仁4个字节
b)double:双精度,在JAVA中-个浮点型的数字默认为double类型。
8个字节
3.字符类型:char,字符类型的值要放在一•对单引号中,单引号中必须只有一个字符(一个字母,数
字,\u0000')。
在JAVA中所有的字符都占两个字节]
4.boolean类型:值true ( }'(■)或false(假)。
boolean类型的值不能与其它类型进行转换。
变量:强类型的语言。
1.格式:数据类型变量名;
2.JAVA中标识符命名的规则:
a)标识符由字母,下划线,数字,美元符($)组成。
b)不能用数字开头。
c)不能使用关键字(在JAVA中关键字都为小写)。
注意:当变量没有赋值时不能使用。
常最:只能赋值-•次的变量。
使用final关键字。
运算符:
1.算木运算符:+,-,*,/,% (取余数),++ (自增),--(白减)。
JAVA中混合运算的结果
的类型,根据运算元素的精度与长度决定。
2.关系运算符: >、>=,<,<=,=(判断是否相等),!=(不等于),结果一定是boolean类型。
3.赋值运算符:=,将右边值(结果)赋给左边的变量。
4.字符串连接符:+
5.逻殂运算符:逻辑与(&),逻辑或(I),短路与(&&,当第一个表达式为false时,不执行第
二个表达式),短路或(II,当第一个表达式为true时,不执行第二个表达式),逻辑非(!)
6.扩展运算符:+二,-=,*=,/=,%=,可以将结果的类型自动转换为接收的类型
7.三目运算符(三元运算符):x?y:z°当x为【rue时,返回y的值,当x为false时,返回z的值。
基本数据类型的类型转换:
1.小的可以直接赋给大的。
2.大的必须强转才能赋给小的。
3.boolean不能转换为其它类型。
4.byte,short,char进行算术时结果会自动转换为int
流程控制:顺序结构,选择结构,循环结构一.选择结构
if语句
格式:
if(条件){
代码;
)
if(条件){
代码;
)else(
代码;
)
if(条件){
代码;
)else if(条件){
代码;
)c1scif(条件){
代码;
)else(
代码;
)
1.if语句中的条件的结果必须为boolean类型的值
2.if语句的大括号可以省略,但省略后if的作用范围只在if后面的一行代码。
3.一个if语句中可以出现0个或1个else
4.else语句必须出现在if语句的最后
5.一个if语句中可以出现0个或多个else if
6.当匹配分支后,其它分支将不再执行。
switch语句:switch语句只能判断是否相等。
switch(变量){
case 值:
代码;
[break;]
case 值:
代码;
[break:]
default:
代码;
[break;]
)
1.switch 语句中变揪的类型必须为int,byte,short,char,枚举(JDK 1.5),String(JDK 1.7)
2.case后面的值不能至复
3.case后面只能放常量或字面值
4.当switch匹配-•个分支后,将从这个分支开始执行后面所有的分支直接switch语句的结束,或遇
到第一个break为止。
5.switch语句会先执行所有的case语句,当所有的case语句都没I兀配到时,执行default
6.default语句不一定出现在switch语句的最后
switch中没有break时是什么情况
循环结构:
while循环:当循环次数不确定时使用while循环
while(条件)(〃条件为布尔类型
循环体;
)
先判断,再循环
Math.randomO:随机数方法,返回一个大于或等于0但一定小于1的double类型的值
do...while 循环:
do{
循环体;
)while(条件)
先循环,再判断
array [0]:
10 array:引用
for 循环:当确定循环次数时使用for 循环。
for 循环中三部分都可以省略。
for (循环变量初始化:循环条件;循环变量自增/自减){
循环体;
break:必须放在switch 语句或循环语句中。
放在循环中的作用:结束所在循环。
带标签的break :结束标签后面的循环。
continue:只能出现在循环语句中。
结束木次循环,使用循环直接进入下一次循环。
带标签的continue :使标签后面的循环结束本次循环,直接进入下一■次循环。
数组:多个相同数据类型的集合。
在JAVA 中所有的数组都是引用数据类型,但数组中每个元素可以为基本数据类型
一雄数组:
声明数组:不能写数组的长度
数据类型[]数组名;
数据类型数组名[]:
inl[10] a;〃错误。
创建数组:必须指定数组的长度。
当确定了数组的长度后,数组的长度便不能修改。
数组的长度可 以为0,但不能为负数。
inl[] anay = (1,2,3,4,5,6,7,8,9}; java 习惯
int array! [] = new int[10]; c 习惯 inl[] array2 = new int[]{ 123,4,5};
array[ 1]:22
array[2]:31
访问数组的元素:通过下标可以访问数组的元素。
在JAVA
中数组的下标从。
开始
数组名[下标],数组中最大的下标为数组的长度减1
数组与循环
for each循环:遍历集合。
JDK 1.5以后;I网。
for(数据类型变量:集合名)(
代码;
)
命令行参数:java类名命令行参数,命令行参数以空格作为分隔符。
山main。
中的SEng[]接收
二维数组:
声明数组:
数据类型[][]数组名;
数据类型数组名[][];
数据类型[]数组名[];
创建数组:
array ={{ 1,3,5},{2,4,6},{7,8,9}};
int anayl[][] = new int[3][3];//在创建多雄数组时,高雄不能省略,低维可以省略如:
int anayl [][] = new int[3][3];
第四章
类与对象
1.成员变量(全局变量,字段,属性,域):描述类的特征。
在类中声明的变量。
在类中都可用。
成员变量有默认值(byte.shortjnt默认值为O.long默认值为OL.double默认值为:OQfloal默认为O.OEboolean默认为false,char默认为M0000•,引用数据类型默认为null).
2.局部变量:方法中声明的变量,只在方法中可用。
局部变量没有默认值.
4.在一个类中想调用另一个类的成员(成员变量与成员方法),必须声明并创建这个类的对象,通
过类的对象调用类的成员。
格式为:对象名.成员。
5.成员方法(成员函数):描述类的行为(动作)。
6.方法声明的基本格式:
访问权限返回类型方法名([参数]){
方法体;
}
当方法没有返回类型时,用void表示,可以使用return但不能返回数据
return的功能:I .返回数据;2.结束方法
方法的重载:一个类有多个名字相同但参数不同(个数不同,类型不同,顺序不同)的方法。
子类能重载父类的方法
构造方法(构造函数,构造器):
1.方法名与类名相同。
2.构造方法一定没有返回值,并且不能写void
3.类一定有构造方法。
带格式的:编号+级别
:1 +编号粹式:1, 2, 3,… +起始编号:1 +对齐方 式:左侧+对齐位置:0 磅+制表符后于:18磅 +缩进位置:18磅 4. 当没有在类中显式的写构造方法时,JVM 会自动为类添加一个默认的构造方法。
5. 默认构造方法:没有参数,没有方法体
public 方法名(){ }
6. 构造方法无法任意调用。
只有new 时才能调用类的构造方法。
new 构造方法().
7. 构造方法的功能:为类的成员变量初始化。
8. 当在类中显式的写了构造方法,JVM 就不会为类添加默认的构造方法。
this 关键字:在类中调用自身的成员。
static X®?-: JU static 修饰的成员可以使用类的对象调用,也可以使用类名(接口名)调用。
I. 修饰成员变量:静态变量。
静态变量对于类的对象而言是共用份的。
2. 修饰成员方法:静态方法。
挣态方法只能直接调用静态的成员(成员变量,成员方法九不能使 用
this 与super 关键字°
final 修饰的成员变量如何初始化:
1. 在声明final 类型的成员变量时,直接为这个变量初始化。
2. 如果没有在声明时为final 的成员变量初始化,就需要在这个类的所宥的构造方法中为这些final 的
成员变量初始化(保证类的对象在构造完成前,这些final 的成员变量需要被初始化).
包:本质就是文件央。
包主要的作用解决类的重名问题。
1. 当类出现在 个包中时,类的第 行必须是packa 呢语句,说明类存在于哪个包下。
2. package 语句必须出现在类的首行(注释除外)
3. 类可以引用同包下的类。
4. 当类诃使用其它包中的类时,要使用import 语句导包。
5・在ng 包H 1的内容可以直接使JI ]不JIJ 导包。
类的继承:单继承:一个类只能有一个父类(直接的父类)。
名字,性别,
职业,耐力,
力量
走,跑,跳, 攻击
使用extends关键字,使一•个类继承另一个类。
父类:超类,根类,基类
子类:派生类
访问权限:public\protected\默认'private,普通的类(顶层类)只能用public与默认修饰,修饰类的成员,
但不能修改局部变量。
类内部同包下的类不同包下的子类不同包下的其它类private Y N N N
默认(包权
限)
Y Y N N
protected Y Y Y N
public Y Y Y Y
name:BB age:20
school:大连
第五章
方法的重载:一个类有多个名字相同但参数不同(个数不同,类型不同,顺序不同)的方法。
方法的重写(方法的覆盖):
1.子类根据需要重写父类中的方法。
2.重写的方法要与被重写的方法具有相同的方法名,参数列表,返回类型。
3.重写的方法的访问权限要大于或等于被重写方法的访问权限。
4.static修饰的方法不能产生重写。
5.重写的方法不能抛出比被重写的方法范围更大的异常。
(小于或等于可以)
class Foo (
Siring doStuff(inl x) ( return "hello"; }
1
A String doStuft(String s) ( return "Hello"; }屯裁
B int doStuff(String s) ( return 42: }重载
C String doStuff(int x) ( return "hello"; }重写
super关铤字•:在子类中引用父类的成员。
子类可以继承父类中private的成员,但不能使用。
子类不能继承父类的构造方法。
继承中的构造方法:
1.子类在构造自己的过程中必须调用父类的构造方法。
2.子类在自己构造方法的第一行使用s叩河参数])调用父类的构造方法。
3.如果没有显式的写s叩cr([参数]),JVM会口动在子类构造方法的第一行添加super()调用父类无
参的构造方法。
4.当父类中没有无参的构造方法,而子类又没有显式的调用父类有参的构造方法,则编译失败。
可变参数:只能用在方法的形参中。
格式:数据类型...变杭名,本质是一个一维数组。
在声明方法时不能在可变参数的后面添加其它的参数。
当方法的形参为基木数据类型时,形参的值改变实参的值不变。
当方法的形参为引用数据类型时,形参的值改变实参可能改变。
instanccof运算符:判断左边的对象是否为右边类的对象或右边类的子类的对象。
如果左边的对象与右边的类没有继承关系,编译失败。
引用数据类型的类型转换:
1.子类可以直接赋给父类。
2.父类必须强转才能赋给子类。
3.•当父类的变果指向的不是了类的对象时,代码运行时会发生运行时异常
4.当两个类没有继承关系时不能进行类型转换,否则编译失败
多态与动态绑定:
1.父类声明,子类创建。
2.多态时调用的方法是子类的方法(如果子类重写了父类的方法)。
3.多态时调用的成员变量是父类的成员变量。
抽象:abstract
1.修饰类:抽象类。
抽象类不能实例化(不能new)。
只能使用抽象类的子类。
2.修饰成员方法:抽象方法。
抽乡、n "的声明没有方法的实现。
子类必须重写父类中所有的抽象方
法(如果子类是抽象类可以不重写)。
抽象方法所在的类必须是抽象类。
3.修饰接曰:
抽象方法不是只能放在抽象类中,接口中也可以
abstract不能与哪些关键字一起使用:private,static,final
final
1.修饰变量:只能赋值一次
2.修饰方法:子类不能重写父类final的方法。
3.修饰类:类不能被继承。
第七章
:使JAVA实现多继承Mmeiface关键字创建接曰。
接口不是类(不能new)只能是用接口的实现类(不能实例化接口的对象)
1.接口中包含常量与抽象方法
2.接口中的常量默认为public static final,也必须为public static final.
3.接口中的方法默认为public abstract,也必须为public abstract
4.类可以实现(implements)接口,一个类可以实现多个接口
5.当类实现接I」,类必须重写接LI中所有的抽象方法(如果类是抽象类可以不重写)
6.接口可以继承其它接曰,接曰可以继承多个接曰。
〃声明一个内部类的对象Outclass .InterClass in;
Outclass o = new Outclass();
//创建实例内部类的对象in = o.new InterClass();
普通内部类不能包含static静态类。
内部类:一个类中嵌套一个类,内部类可以使用所有的访问权限修饰,内部类可以使用stalic修饰
1.实例内部类(普通内部类):实例内部类可以直接使用外部类所有的成员,实例内部类不能包含
sialic的成员。
2.静态内部类:用static修饰的内部类。
静态内部类中可以有静态与非静态的成员。
静态内部类只能
直接使用外部类中静态的成员。
3.局部内部类:在方法中创建的类。
不能使用访问权限修饰,可以访问局部变量,但这些局部变量
必须是final的
第八章
异常处理:
Throwablc类:JAVA所有错误与异常的父类。
Error类:在编程时不用(不应该)捕获与处理的错误。
Exception类:在编程时需要捕获与处理的异常。
RuntitncExccption类及其子类:在编程时可以不捕获的异常,但运行时程序可能会发生错误。
非运行时异常(编译错误):在编程时必须捕获与处理的异常,否则代码无法编译。
捕获并处理异常
try{
可能会发生异常的代码
)calch(异常的类型){
处理异常的代码
} finally(
无条件执行的代码
1.try块不能单独使用,必须与catch块或finally块•起使用。
2.当liy块中发生异常时,从发生异常的代码开始之后iry块中的代码将不可执行。
3.—个try语句中可以出现0个或多个catch块
4.可以在catch块中使用Exception捕获并处理所有的异常。
5.Exception只能出现在最后一个catch块中。
6.-个try语句中只能出现0个或1个finally块
7.finally块中的代码一定会执行。
0定义的异常:类继承Exception或Exception的子类
手动抛出异常:throw关键字。
在方法的运行过程中手动的抛出一个异常。
必须出现在方法体中。
声明异常:throws关键字,只能出现在方法的声明中,是通知方法的调用者此方法在运行时可能会发生一些异常(笔试)
当父类的构造方法抛出异常时,子类的构造方法也必须抛出同样的异常。
当调用的方法可能抛出非运行时异常时,在调用方法的同时必须处理这些异常
常用类:
javaJang.String类:在JAVA中表示不可变的字符序列。
如果字符串要频繁进行修改时不要使用String 类。
==比较的是:引用(地址)。
常用的方法:String类的方法不会改变Q己的内容。
charAt(int index):获得字符串指定位置的字符。
Iength():获得字符串的长度。
indcxOf(String s):在字符串中查询字符串s首次出现的位置,没找到返回-1
indexOf(String s,int index):从字符巾的第index位开始查找字符串s首次出现的位置,没找到返回-1. equals。
:判断字符中的内容是否相等(区分大小写)。
equalsIgnoreCase():判断字符申的内容是否相等(不区分大小写)。
rcplacc(char cI,char c2):将字符串出出现的所有的cl用c2替换掉
StringBufter(s.replace(start, end 字符串")):
substring(int begin):从符申的第begin位开始截取字符串直.截取到'字:符串的最后。
substring。
nt begin,int end):从}符串的第begin位开始截取;:符串一直.截取到第end位。
trimO:去掉字符串左右的空格。
valueOf(XXX i);将i转换为Siring类型的值。
基木数据类型转换成引用数据类型
StringBuffcr与StringBuildcr::可变的字符序列。
如果字符串需要频繁修改时应该使用StringBuffcr或StringBuildcr.
常用的方法:
append(XXX s):将指定的内容s追加到字符串中。
inserl(inl index.XXX s):在字符串第index位之前插入内容s
delete(int beginjnt end):从第begin位开始删除字符串一直到第end位之前
rcvcrscO:将字符串倒序排列。
java.ulil.Date 类:日期
java.util.Calendar 类:日历
java.text.DateFonnat类:格式化日期,将日期转换成指定格式的字符串。
ng.Object类:是JAVA中所有类的父类。
equals。
:判断内容是否相等。
这个方法最早出现在Object类中,但Object类的equals()比较的不是内容而是引用是否相同。
包装类(封装类):共8 个,Byte, Short, Integer, Long, Float* Double, Character* Boolean
所有的包装类都是final
final
修饰变量:只能赋值一次
修饰方法:子类不能重写父类final的方法。
修饰类:类不能被继承。
装箱:将基木数据类型转换为包装类。
拆箱:将包装类转换为基本数据类型。
从JDK1.5以后JAVA可以自动的装箱与拆箱
集合框架:
Set(集):不保存元素加入的顺序,不能有重复值。
List(列表):保存元素加入的顺序,可以有重复值。
Map:保存一对值(键值对,Key-Value),键不能重复,值可以重复。
ArrayList:是线性表,按位置(索引)查询元素时效率高,但添加与删除元素效率低。
LinkcdList:是链表,添加与删除元素效率高,但按位置查找元素时效率低。
功能与Array Li st 一样,但Vector是线程安全的,ArrayList是线程不安全的。
Hashtable与HashMap的区别:Hashtable是线程安全的,HashMap是线程不安全的java.io.File类:文件或目录
I/O流(输入/输出流):输入/输出流的分类:
1.按方向:输入流,输出流。
2.
字节流字符流
输入流(读文件)InputStrcam Reader
输出流(写文件)OutputStrcani Writer
3.按功能:节点流,管道流(处理流)。
字节输入与输出流:
输出流:当文件不存在时,输出流会自动创建文件。
当目录不存在时抛出异常。
输入流:当文件或目
录不存在时,抛出异常。
面试
线程:
JAVA中创建线程的两种方法:
1,类继承Thread类
2.类实现Runnable接U
线程的生命周期:
sleepdong n):Thread类的静态方法。
使用当前的线程休眠指定的亳秒°当线程调用了sleep。
方法后线程从运行状态变为阻塞状态。
join():合并(阻塞)线程
yield():使当前的线程让出CPU,使线程从运行状态变为就绪状态°
线程的优先级:1-10.1级为最低,10级为最高,默认为5级。
优先级并不可靠,优先级高的线程会获得更多的时间片。
线程同步:
1.synchronized 关键字
2.锁对象:JDK1.5以后出现的。
面试
线程同步:
3.synchronized 关键字
4.锁对象:JDK 1.5以后出现的。
泛型类/泛型接口:
单例模式(单子模式,Singleton):使类在程序运行的过程中只能产生一个实例。
1.类的构造方法必须为private.
2.有--个private static的白身类型的一个成员变量。
3.有一个public static返回类型为自身的一个成员方法。