Java基础知识总结.docx
《Java基础知识总结.docx》由会员分享,可在线阅读,更多相关《Java基础知识总结.docx(23页珍藏版)》请在冰点文库上搜索。
![Java基础知识总结.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/d26f01b9-5703-41ad-8fee-4296ae90b9a3/d26f01b9-5703-41ad-8fee-4296ae90b9a31.gif)
Java基础知识总结
JAVA基础知识总结
第一章Java入门:
1.java诞生:
1995年5月23日Sun公司发布了jdk1.0版本;作者:
JamesGosling.
JAVAME微型版
手机软件开发
JAVASE标准版
桌面应用程序
JAVAEE企业版
企业级应用开发
2.java语言特点:
1.简单
没有C、C++中的头文件,指针,运算符重载
2.面向对象
可以开发出较大型的应用程序
3.分布式
通过网络访问应用程序,突破空间限制
4.健壮性(编译时错误检测)
消除有出错倾向的状态:
指针
5.安全性(蠕虫病毒)
禁止运行时堆栈溢出、内存空间未授权读写
6.可移植性
JVM
3.JAVA的特性、核心机制:
特性:
封装:
对外部不可见,保护类中的操作不被外部直接访问
属性私有化,提供公共的get、set方法
封装的好处:
1.数据更安全,可以在方法内增加验证
2.可以让调用者不去关心实现的细节,重用
继承:
扩张类的功能
多态:
是允许将父对象引用一个子对象的技术
Employeeemployee=manager;
允许父类对象来引用子类对象,但是实际运行过程中调用的是子类的方法或者属性
编译时调用父类方法,运行时调用的是实际引用类型的方法,这种现象叫做动态绑定
多态现象:
运行时多态、编译时多态
1.编译时多态:
方法的重载(不建议举例)
2.运行时多态:
方法的覆盖(建议举例)
核心机制:
虚拟机(JVMjavavirtualmachine)垃圾回收机制garbagecollector
4.JDK:
(JavaDevelopmentKit)1995年SUN公司JDK1.098年JDK1.2接下来是JDK1.31.4目前JDK1.5已经更名为JAVA5.0正在使用的是java6.0版本.
JDK安装目录介绍:
Bin编译器和工具
Demo演示
DocsHTML格式的类库文档
Include用于编译本地方法的文件
Jrejava运行环境文件
Lib类库文件
Src类库源文件
5.Java运行环境变量配置:
JAVA_HOME:
JDK安装目录,方便在后面两个环境变量的配置中直接被调用即可
path:
%JAVA_HOME%\bin列出可执行文件的搜素路径
classpath:
%JAVA_HOME%\lib\tools.jar
%JAVA_HOME%\lib\dt.jar
.(当前路径)
是java加载类的路径,只有在classpath设置的路径中的类才能被加载
6.Java中注释:
1.单行注释:
//
2.多行注释:
/**/
3.文档注释
/***/
通过javadoc命令将文档注释提取出来生成java帮助文档:
Java的三种注释:
7.Class与publicclass区别:
如果一个类声明的时候使用了public进行声明,则类名称必须与文件名称完全一致,如果类的声明使用了class的话,则类名称可以与文件名称不一致,但执行的时候肯定执行的是生成后的类名称。
第二章标示符,运算符
1.标示符:
在java语言中用来给一个类、变量或方法命名的符号
标示符的命名规则:
1.以字母,“_”或“$”符号开头
2.可以包含字母、“_”、“$”和数字符号
3.大小写敏感
4.不能与保留关键字冲突
5.没有长度限制
Java中命名规范:
1.类名,接口名:
每个单词的首字母应该大写
2.字段、方法以及对象:
第一个单词首字母应小写,其他单词首字母大写
3.常量:
全部用大写字母表示
4.Java包(Package):
它们全都字母小写
5.命名要做到见名知意
2.运算符:
1.算数运算符:
2.自增,自减运算符:
3.关系运算符:
boolean型运行结果truefalse
4.逻辑运算符:
&&||!
支持短路运算
&&:
左边表达式为false,右边表达式不会被执行
||:
左边表达式为true,右边表达式不会被执行
5.赋值运算符:
=不要将其与(==)等号运算符混淆
6.运算符:
&、|、~、^、<<、>>、>>>
1.~:
取反。
1变0,0变1
2.&:
按位与。
有0为0
3.^:
按位异或。
相同为0,不同为1
4.|:
按位或。
有1为1
7.instanceof运算符:
左面操作一个对象,右面操作一个类,当左面对象是右面的类创建时,该运算符的结果是true,否则是false。
第三章表达式,语句:
1.表达式:
算术表达式关系表达式逻辑表达式赋值表达式
2.语句:
方法调用语句表达式语句复合语句控制语句package和import语句
控制语句:
1.条件控制语句ifif-else
2.switch开关语句switch(){case}
switchcase:
说明:
1.表达式expression可以是以下四种基本数据类型和枚举类型(byte,short,int,char)
2.case子句中的值必须是常量,而且所有case子句中的值应是不同的。
3.case通常与break语句联用,以保证多路分支的正确实现,多个case可以公用一组执行语句。
循环语句:
1.for循环语句for
2.while循环语句
3.do-while循环语句
4.break和continue语句
break语句,跳出它所在的循环语句或switch语句,并从紧跟该循环语句或switch语句后的第一条语句处执行
continue语句,用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环
第四章数据类型,字符串,数组:
1.数据类型:
基本数据类型:
数值型
整数型:
字节型:
byte(1个字节)
整型:
int(4个字节)
长整型:
long(8个字节)
短整型:
short(2个字节)
实数型:
浮点型:
单精度浮点型:
float(4个字节)
双精度浮点型:
double(8个字节)}
字符型{char(2个字节)}
布尔型{beloon型(1位):
true或者false}
空类型:
NULL;
引用数据类型:
{数组接口类}:
就是将一个堆内存的空间使用权交给了其他对象;
自动类型转换:
低优先级数据转换为高优先级数据:
byte-short-char-int-long-float-double
强制类型转换:
高优先级数据强制转换为低优先级数据
例:
doubleb=3.2222d;
inta=(int)b;
3.字符串:
==与equals的区别:
在Object类中equals(Objectobj)方法与==的比较结果一致的
但是equals是一个方法可以被重写,例如在String类中equals比较的就是字符串的内容
String本身是一个类,在String类中定义的构造方法:
publicString(Stringoriginal)可以接收一个String类的对象,并重新实例化String对象,String还可以采用直接赋值的方式进行对象的实例化
一个字符串是使用“”括起来的那么一个字符串的常量实际上本身就属于String的一个匿名对象
Stringstr="hello";与Stringstr=newString("hello");有什么区别?
、
Stringstr="hello"如果内存已经为"hello"分配了内存空间,那么Str只要指向"hello"内存对象地址;
Stringstr=newString("hello");内存中重新分配一块内存区域给"hello",str指向"hello",也就是内存中有两个hello的对象了,而且指向的地址不一样。
String与StringBuffer的区别?
他们都可以存储和操作字符串;
StringBuffer使用来存储字符串变量,他的对象是可以更改和扩充的,也可以用来存储字符串常量;
String是用来存储字符串常量,存储的字符串是不可以更改的
字符串的内容一旦声明之后则无法修改,实际上字符串变量的改变改变的是内存空间的地址的指向,而本身的字符内容没有任何的变化。
1.根据字符串中的索引找到指定位置的字符:
publiccharcharAt(intindex)
2.将字符串变为字符数组:
publicchar[]toCharArray()
3.将字符数组变为字符串:
将全部的字符数组变为String类型:
publicString(char[]value)
将部分的字符数组变为String类型:
publicString(char[]value,intoffset,intcount)
4.String-字节数组:
publicbute[]gerBytes()
字节数组-String:
全部:
publicString(byte[]bytes)
部分:
publicString(byte[]byres,intoffset,intlength)
5.判断是否以指定的字符串开头:
publicBooleanstartsWith(Stringprefix)
判断是否以指定的字符串结尾:
publicBooleanendsWith(Stringsuffix)
6.替换操作:
publicStringreplaceAll(Stringregex,Stringreplacement)
7.字符串截取:
全部截取:
publicStringsubstring(intbeginIndex)
部分截取:
publicStringsubstring(intbeginIndex.intendIndex)
8.字符串拆分:
publicString[]split(stringregex)
9.字符串查找:
取得指定字符串的位置:
publicintindexOf(Stringstr),publicintindexOf(Stringstr,intfromIndex)此方法返回int型的数据,如果查找到了怎返回位置,查找不到,返回-1
直接查找:
publicBooleancontains(Strings)
10.字符串的其他操作:
去掉左右空格:
publicStringtrim()
取得字符串的长度:
publicintlength()
转大写:
publicStringtoUpperCase()
转小写:
publicStringtoLowerCase()
4.数组:
属于引用数据类型,使用时需要开辟内存空间;
数据类型数组名称[]=new数据类型[长度];
数据类型数组名称[]=null;
数组名称=new数据类型[长度];
关键字new只要一出现,怎肯定表示数据类型是是引用数据类型,要进行堆-栈空间的开辟
二维数组:
动态初始化:
数据类型数组名称[][]=new数据类型[长度][长度]
静态初始化:
数据类型数组名称[][]={{2,3,2}{2,32,2}};
char[]缺省值为0所对应的字符
boolean[]缺省值为false
User[]自定义类型数组缺省值为null
求数组的长度:
ar.length属性
二维数组循环打印:
for(intm=0;mfor(intn=0;nSystem.out.print(h[m][n]);
}
System.out.println();
}
数组拷贝:
System.arraycopy(Objectsrc,
intsrcPos,
Objectdest,
intdestPos,
intlength);
src-源数组。
srcPos-源数组中的起始位置。
dest-目标数组。
destPos-目标数据中的起始位置。
length-要复制的数组元素的数量
第五章类,方法,关键字保留字:
1.类:
类的基本概念:
是用来封装一类对象的状态和方法,类是用来定义对象的模板。
是由属性和方法组成;类的属性全部保存在对内存中,全部的方法保存在全局代码中。
抽象类:
包含一个抽象方法的类称为抽象类,抽象方法是只声明而未实现的方法,所有的抽象方法必须使用abstract关键字声明,所有的抽象类也需要使用abstract关键字声明,对于抽象类,不能直接进行实例化的操作,但是可以声明,如果要想使用抽象类,则必须依靠子类,抽象类是必须被子类继承的,而且被继承的子类需要实现抽象类中的全部抽象方法;
抽象类中允许有构造方法,但是构造方法是不能直接调用的,是交给子类去调用的,子类对象的实例化过程中永远是先调用父类中的构造方法---实际上来讲抽象类就比普通类多了一个抽象方法而已
抽象类中的属性如果要想初始化,则肯定还是依赖于构造方法
内部类:
作用
1.内部类可以很好的实现隐藏,也就是封装性。
一般的非内部类,是不允许有private与protected权限的,但内部类可以
2.内部类拥有外围类的所有元素的访问权限
3.可是实现多重继承
4.可以避免修改接口而实现同一个类中两种同名方法的调用
在一个类的内部还有另外一个类。
内部类的缺点:
是程序的结构混乱。
内部类的唯一优点:
在于可以方便访问外部类中的私有成员。
如果要在外部类中直接使用内部类的实例化对象
外部类.内部类内部类对象=外部类实例.new内部类实例()
一个内部类如果使用static关键字声明的话,则此内部类就将成为外部类,可以直接通过外部类.内部类的形式访问
内部类可以在任意地方使用,如在方法中声明方法中定义的内部类可以直接访问外部类的各个成员,但是如果要访问方法中的参数,则参数中要使用final关键字;
普通代码块{}
构造块:
直接在类中定义的代码块(构造块会重复调用多次;构造块会优先与构造方法执行)
静态块:
用static关键字声明的代码块:
主要目的是用来为静态属性初始化化。
优先于主方法和构造块执行;而且只执行一次;
匿名类:
匿名内部类:
在抽象类和接口的基础上发展起来的,在一般的开发中匿名内部类中使用较少,现在只有两种情况下可以经常看到匿名内部类的使用:
Java图形界面
Spring开发框架
异常类:
Exception
异常与错误:
1.异常是在一个程序执行过程中出现的一个事件,它中断了正常指令的执行
2.偏离了可接受代码的一个动作或实例就是错误
异常结构的分类:
Throwable
ErrorException
未检查异常(运行时)已检查异常(编译时)
对异常处理方式-捕获:
try{
<可能出现异常的代码块>
}catch(Exceptione){
<如果try中代码出现异常,则执行catch中的代码>
}
**注意:
catch()代码块可以存在多个,但是catch中的异常类型应该由小到大
try{
<可能出现异常的代码块>
}catch(Exceptione){
<如果try中代码出现异常,则执行catch中的代码>
}finally{
<无论有无异常都会被执行的代码块>
}
**注意:
try{}finally{}可以搭配使用
对异常的处理-抛出:
throws表明当前函数不处理出现的异常,将异常抛出,交给调用方去处理(处理的方式:
捕获、继续抛出)
throw关键字,表明被捕获的异常没有经过处理直接抛出
在继承关系中,子类覆盖父类的方法,抛出的异常类型不能比父类更宽泛
所谓异常处理,就是指程序在出现问题时依然可以正确的执行完
异常处理格式:
try{可能出现的异常语句}
Catch(异常类,异常对象){异常类,异常对象}{异常处理}..finaly{异常出口}
对于java来讲,当程序出现异常,实际上都是产生了一个类的实例化对象
异常类最大的父类:
Throwable
Error:
一般表示JVM错误,与程序无关
Exception:
一般指的是程序的错误,所以一般开发中如果想要进行程序的处理,基本上都是使用此类表示;
Class类:
包装类:
包装类用于基本数据类型的区别:
1.包装类是对基本数据类型的一种扩展,定义了很多类型之间的转换方法
2.针对一些集合类型,他们要求我们存入集合的是Object,那么基本数据类型不能满足要求,就只能放包装类的对象
数值型:
Integer,Byte,Short,Float,Double,Long都是Nummber的子类
其他类型:
Character,Boolean---Object子类;
装箱操作:
Integeri=newInteger(i);
拆箱操作:
intj=i.intValue();
jDk1.5之后增加了很多新特性如:
foreach可变参数,即自动装箱拆箱操作;
Integeti=I;自动装箱操作
intj=i;自动拆箱操作
Object类:
如果一个类中没有明确指定继承那个父类,则默认情况下就是继承Object类;任何类的对象都可以使用object进行接收,不光可以接收类的引用,只要是引用数据类型都可以使用object类接收
对于一个完整的类来讲,应该覆写Object类中的以下三个方法:
toString:
对象打印时调用publicStringtoString()
equals():
对象比较时调用,实际上String类就已经覆写好了此方法
publicBooleanequals(objectobj)
hasCode()暂时不看
Object可以接收任意的应用数据类型的引用
2.方法:
就是一段可以重复调用的代码段;一个方法可以接受一个数组或者返回一个数组,但是在接受数组的时候一定要注意,数组是引用数据类型,所以方法中对数组所做的一切修改最终都会被保留下来;
方法调用过程:
1.为被调用方法分配临时存储空间
2.将实参复制一份传给形参
3.跳入被调用方法中执行
4.方法体执行完成或遇到return语句,返回主方法,同时被调用方法的临时存储空间被收回
抽象方法:
构造方法:
一个用来初始化对象的一个方法,在每个类中都存在一个构造方法。
构造方法的主要目的是为类中属性初始化;所有的构造方法应该是对象操作前最早调用的;如果一个类中没有明确声明一个构造方法,则会自动生成一个无参的什么都不做的构造方法;当使用关键字new时才会调用类中的构造方法;
要求:
构造方法名称与类名称一致
构造方法定义没有返回值类型的声明
不能在构造方法中使用return返回一个内容
用new+构造方法来创建一个新的对象
构造方法私有化-单例设计,一个类只能产生一个实例化对象;实现的核心:
一个类中必须有构造方法,如果将构造方法私有化之后,那么外部无法产生新的实例化对象了;
重载:
指的是方法名称相同,但是参数的类型和个数不同
方法名相同,参数列表不同
参数列表:
1.参数类型2.参数个数
系统会根据调用时传递的参数自动找到匹配的同名方法进行调用
覆写:
发生在继承的关系中,子类覆写了父类中的相关方法,子类定义了与父类同名的方法,成为方法的覆写;在方法覆写时候注意:
被覆写的方法不能拥有比子类更加严格的访问权限;访问权限private在使用子类实例化对象调用类中被覆写过的方法时,调用的永远是被覆写过的操作,永远不是覆写,而是从新定义;
如果希望调用父类中被子类覆写过的方法,则只能通过super方法()形式调用;
属性的覆盖,子类中声明了父类中同名的方法成为覆盖,但从实际的开发来讲,属性基本上属于private类型,所以覆盖这种概念根本不存在
调用
在使用递归操作的时候一定要注意递归操作要有明确的截止条件,否则会出现异常;
3.关键字关键字列表:
abstractbooleanbreakbytecasecatchcharclasscontinuedefaultdodoubleelseextendsenumfalsefinalfinallyfloatforifimplementsimportinstanceofintinterfacelongnativenewnullpackageprivateprotectedpublicreturnshortstaticsuperswitchsynchronizedthisthrowthrowstransienttruetryvoidvolatilewhile
Java中truefalse不是关键字,而是boolean类型的字面量
所有的关键字都是小写,friendly,sizeof不是java的关键字
Super:
1.调用父类的方法或属性,前提是方法和属性在子类中是可见的
2.super()调用父类中的无参构造
3.在调用父类构造方法的时候必须放在第一句
Abstract:
abstract类:
1.如果一个方法没有方法体,那么该方法一定为abstract方法
2.如果一个类中有一个abstract的方法,那么该类一定为abstract类
3.abstract类不能被实例化
Abstracta=newMyClass();//MyClassextendsAbstract
Final:
声明类:
声明的类不能有子类
声明方法:
声明的方法不能被子类覆写
声明变量:
声明的变量就称为常量,常量是不可以修改的
在java中如果使用final声明一个常量的话,怎常量的标示符必须全部大写使用publicstaticfinal声明的常量称为全局常量
This:
可以表示当前对象;通过this.属性表示当前类中的属性;通过this.方法()表示当前类的方法;通过this()可以调用本类中的其他构造方法,但是要求至少有一个构造方法中没有使用this(),而此构造方法将作为调用的出口,一般这个出口都会使用无参构造完成;而且调用时this()要放在构造方法的首行
Static:
1.修饰变量,变量被所有实例所共享
2.修饰方法,方法内不可以引用非静态成员;但是非静态方法可以引用静态成员
使用static关键字可以声明全局变量,所有对象共同拥有
Static属性或方法可以直接通过类名称调用
Static方法只能调用static属性方法,而不能调用非static的属性或方法
静态属性和方法可以在没有实例化对象的时候调用。
使用static可以统计一个类产生了多少个实例化对象,因为static的属性是所有对象共享的;在开发中还可以使用static进行自动命名操作;
Throws:
在程序中的方法声明处可以使用throws关键字,使用此关