Java学习基础知识.docx
- 文档编号:11744877
- 上传时间:2023-03-31
- 格式:DOCX
- 页数:28
- 大小:28.09KB
Java学习基础知识.docx
《Java学习基础知识.docx》由会员分享,可在线阅读,更多相关《Java学习基础知识.docx(28页珍藏版)》请在冰豆网上搜索。
Java学习基础知识
Java学习基础知识
J2SE
Java的标准开发平台。
是J2EE和J2ME的基础,CoreJava开发基于该平台
J2EE
Java的企业己开发平台,Java的主要应用方向,大型系统的开发都是在该平台的完成,Web开发也属于其中的一部分
J2ME
Java的微系统开发平台,是一个正在成长的平台,主要用于资源有限的设备上的Java的开发,如手机,PDA等
J2SE:
标准开发包
J2EE:
J2SE标准开发包+J2EE开发包运行在服务器上
J2ME:
J2SE标准开发包的一部分+J2ME标准开发包+J2ME特定设备开发包
机器环境JDK5.0
Java的环境开发
JDK:
Java开发包,包含JVM(虚拟机)、J2SE基本开发包、实用工具(编译、运行、生成文档等)三部分
操作步骤:
1、安装JDK
2、设置环境变量
Java_HOME:
Java开发需要的环境变量,值为JDK安装的根目录
PATH:
系统环境变量,在保留原来的值的基础上增加JDK安装的根目录下的bin的目录
CLASSPATH:
Java开发需要的环境变量,当前值为“.”,表示当前目录
如:
JDK安装在C:
/j2sdk1.4.2中
JAVA_HOME=C:
/j2sdk1.4.2
PATH=原来的值;%JAVA_HOME%/binWindows
PATH=原来的值:
$JAVA_HOME/binUNIX/LINUX
CLASSPATH=.
注意:
环境变量的值WINDOWS下大小写无关,UNIX/LINUX下大小写敏感
在Windows中先载入系统变量,在载入用户变量,如果同名会覆盖系统变量
Java的优点:
1.开发效率高(相比C++)原因:
没有指针、代码中不进行内存管理、完全面向对象的语言;由JVM和垃圾回收机制实现内存管理,代码中只使用new通知JVM进内存分配,其他操作全部隐式进行;C++必须考虑对C的向下兼容性,所以语言特性中包含少量过程化内容,而Java没有这个顾虑,能够实现完全面向对象的语言,从而开发中不用考虑任何过程化的思想
2.一处编写,处处运行(跨平台);主要是通过JVM特性和语言本身的特性实现
3.多线程传统的开发语言的多线程是操作系统级的多线程,Java是唯一实现语言级多线程的操作语言,是实现跨平台的关键语言特性;
JVM(虚拟机)
实现Java代码运行和跨平台特性实现的关键元素可以通过软件或者硬件实现,常用的是软件方式
有多个版本,针对不同的操作系统,上层通过相同的接口和Java运行代码(字节码bytecode)交互,下层通过不同的接口和具体操作系统交互内部实现类似于一台真正的机器,有独立的内存、寄存器等部件(虚拟实现)
垃圾回收机制
实现对象在内存中的管理和回收
管理主要表现在判定哪些对象具备被回收的条件(垃圾)和实现内存碎片整理
垃圾对象的判定:
没有任何对象的引用指向的对象称为垃圾对象
垃圾回收机制启动时,会对所有垃圾对象进行回收
垃圾回收底层是通过低优先级的守护线程(系统线程)实现的,一般在程序代码运行的间隙启动
任何情况下垃圾回收不能强制执行,可以通过System.gc()和Runtime.gc()促使其执行,实质上是提高了垃圾回收线程的优先极
Java的执行流程:
1.源代码:
文本格式,扩展名为.java
2.目标代码(字节码):
源代码编译后得到,二进制格式,扩展名为.class
特点:
和具体操作系统无关,只和JVM有关
3.JVM执行目标代码
a、通过类加载器将class文件载入内存
b、使用代码安全校验机制对class文件进行检查
c、使用解释器或者即时代码编译器进行执行
解释器:
对字节码文件进行逐行解释执行
即时代码编译器:
第一次执行时解释执行,同时将解释后的目标文件(和具体平台有关的二进制文件)存储虚拟机中,之后的执行直接执行该目标文件,不再通过解释器,效率可以大大提高
Java代码的基本单位是类
定义格式:
[修饰符]class类名{....}
public类的类名和文件名相同
源文件中可以包含任意数量的类,但至多只能有一个public类
源文件编译后,每个类对应一个class文件,文件名和类名相同
源文件中如果没有public类,文件名任意命名
*/
publicclassFirstPro
{
/*
入口方法,格式固定,JVM执行该类时执行该方法
*/
publicstaticvoidmain(String[]args)
{
System.out.println("HelloFirst!
");
}
}
classSecondPro
{
publicstaticvoidmain(String[]args)
{
System.out.println("HelloSecond!
");
}
}
源代码中包含的一级元素只有package、import和class三种,顺序必须是package、import、class
package只能出现一次,import和class可以出现多次
注释:
在源代码中存在,但编译是会被忽略的文本
1.单行注释:
//注释
2.多行注释:
/*注释*/或者/*注释……*/
单行注释和多行注释的文本内容任意,没有任何格式要求
3.文档注释:
/**注释*/
有一定的语法格式要求,主要功能是对源代码功能的说明,注释完成后,与前两种注释在代码中查看的方式不同,是通过javadoc工具将代码注释抽取后生成html文件进行查看,所有的java标准化文档都是通过这种方式产生的
代码语法
“;”是唯一表示语句结束的符号
所有的空格,包括Tab、换行对代码没有影响
特殊关键字
1.goto&const是关键字,不能使用在标识符命名中,但没有任何语法意义,称为保留关键字
2.true&false不是关键字,不能使用在标识符命名中,原因是作为boolean类型的值使用
Java的数据类型:
一、基本数据类型:
4类8种
1.boolean
只有true和false两个有效值,表示是或否
2.char
字符类型,表示单个字符,使用'字符'方式表示
内部使用16位unicode(标准化保存方式)方式保存,中英文字符占用相同的空间
注意:
字符和字符串在java中的意义是完全不同的,字符串使用String类型保存,表示若干个字符序列,是引用类型数据
3.整数类型,包括byteshortintlong四种
byte:
8bit
short:
16bit
int:
32bit默认类型
long:
64bit
注意:
所有整数类型都是有符号的,用于存储数据的bit数是总bit数减1
4.浮点数类型:
包括float和double两种
float:
32byte
double:
64bit默认类型
注意:
所有浮点数类型都是有符号的
运行结果类型的判定
double>float>long>int>short>byte
通用规则:
两个数进行运算时,按照大的类型决定结果类型
特殊规则:
如果结果类型小于int,按照int决定结果类型
标识符命名约定
1.类/接口/其他同级语法元素
每个单词首字母大写,其余小写如:
Account、MyAccount
2.方法/属性/局部变量
除第一个单词外,其余单词首字母大写如:
userName、myName
3.包
全部小写如:
com.briup.md01
4.常量
全部大写,单词间通过“_”分隔如:
MAX_VALUE
5.除循环变量使用i、j、k等字母进行命名外,其他变量都应使用有意义的名称
二、引用数据类型(对象类型)
类(Class):
将对象抽象化得到类,是对象的模板
对象(Object):
在问题描述中的名词通常可以使用对象进行描述,对象是具体的引用(对象的引用)
引用(Referencetype)(对象的引用):
Java不允许直接对对象进行操作,所有对象操作都通过指向对象的引用进行
注意:
类可以产生任意数量的对象,这些对象之间除了类型相同外,没有任何直接的关系
类的成员(Member):
属性和方法的总称
类由三部分组成
1.属性
定义在类中,表示类的信息
格式:
[修饰符]属性类型属性名称;
2.方法
表示类的行为
3.构造器
用于创建类的对象
变量的分类
1、局部变量
定义在方法或构造器中的变量(方法和构造器的参数也是局部变量)
生命周期从定义开始,到相应的语法块结束终止
没有默认初始值,必须先赋值后使用
2、实例变量(属性)
定义在类中,表示类的信息
生命周期从对象创建开始(new),到对象生命周期结束终止(被垃圾回收)
有默认初始值,初始值如下:
数字类型(byte、short、int、long、float、double):
0
char:
/u0000
boolean:
false
所有引用类型:
null
null的含义是该变量没有指向任何的对象,对于值为null的变量,除了输出和执行连接操作外,不能执行任何操作
赋值
1、一般操作:
=
2、复合赋值运算符
+=、-=、*=等,表示运算加赋值
如:
num+=10;相当于num=num+10;
自增/减:
++/--
对于变量本身,++/--执行加1和减1的操作
但对于整个表达式,++/--前置和后置的效果是不同的
如:
intnum=10;
intresult1=num++;//后置,先操作后自增
intresult2=++num;//前置,先自增后操作
相等性判断运算符:
==/!
=
1、比较基本类型:
值相同返回true,不同返回false
2、比较引用类型:
指向相同对象返回true,不同返回false
如:
Teachert1=newTeacher(1001,"steven",30,true);
Teachert2=newTeacher(1001,"steven",30,true);
Teachert3=t1;
System.out.println(t1==t2);//false
System.out.println(t1==t3);//true
赋值转换规则
double>float>long>int>short>byte
1、范围小的值或变量赋值给范围大的变量
自然转换
2、范围大的值或变量赋值给范围小的变量
强制转换
如:
doubled=100.9;
inti=(int)d;
特例
1、int数赋值给byte和short类型变量时,在不超出类型存储范围的情况下,可以执行自然转换
如:
byteb1=100;//正确
byteb2=128;//错误
intnum=100;
byteb3=num;//错误(num不是数值,是变量,所以不可以)
2、char类型在存储中采用的方式和整数类型相同,也可以执行类型转换,和short类型进行转换时,双向赋值都需要强制转换
移位操作符
1、>>:
右移
在高位补入符号位
移1位相当于执行除以2,不会影响符号位
2、>>>:
无符号右移
在高位补入0
如果被移位数是负数,则会对符号进行反转,结果不再相当于除以2,使用较少
3、<<:
左移
在低位补入0
左移1位相当于执行乘2,不会破坏符号位
100
00000000000000000000000001100100
Java使用补码表示负数
负数等于正数取反后加1
如:
-100
对100取反
11111111111111111111111110011011
加1
11111111111111111111111110011100(-100的补码)
八进制表示:
0开头
十六进制表示:
0X或0x开头
如:
0770x4
位操作符:
对2进制位进行操作
&:
位与,操作的两个位都为1,结果为1,其余都为0
|:
位或,操作的两个位都为0,结果为0,其余都为1
~:
位取反,~0=1、~1=0,单目运算符
^:
位异或,操作的两个位相同结果为0,不同为1
如:
10001100100
5000110010
&00100000
|01110110
^01010110
~10010011011
逻辑操作符
操作的对象是boolean类型,结果也是boolean类型
&:
逻辑与,两个操作数都是true,结果为true,其余为false
|:
逻辑或,两个操作数都是false,结果为false,其余为true
!
:
逻辑非,单目操作符,!
true=false,!
false=true
&&:
短路逻辑与,判断逻辑和逻辑与相同,区别在于当左边的操作数为false时将不执行右边的操作
||:
短路逻辑或,判断逻辑和逻辑或相同,区别在于当左边的操作数为true时将不执行右边的操作
程序语言的执行流程
1、顺序执行
2、判断执行:
根据条件选择执行代码
使用if或switch结构进行控制
if语句可以实现所有的判断结构
switch语句只能实现部分判断结构,但在一些特定问题上比if结构具有更好的代码可读性
通常在判断分支大于三个时考虑使用switch
3、循环执行:
反复执行某段代码,通过条件控制执行的次数
使用for、while和do..while结构进行控制
for和while都是现判断后执行,循环代码可能一次都不执行,两种循环功能是完全相同的,但在特定问题中各有长处
do...while循环先执行后判断,循环代码至少要执行一次,实际应用中需求较少
改变循环的执行逻辑
break:
跳出当前循环
continue:
结束当前循环的当次循环
当前循环:
与break或者continue最接近的循环
数组
用于存放相同类型的多个数据的容器
所有的数组都是对象(引用类型)
数组包含一个内建属性length,保存数组的长度
使用语法:
数组名(引用名).length
不能对该属性进行赋值
优点:
运行效率高
缺点:
在创建对象时必须指定元素个数,无法动态扩展
方法定义:
1.
修饰符,常见的是访问权限修饰符,如public
注意:
修饰符在没有显示定义的情况下,有默认权限修饰符
2.
返回类型,指定方法返回值的类型,如果方法不返回任何值则定义为void,在方法中通过return关键字执行值的返回
3.
方法名称,遵循标识符规则
4.([argument_list])
参数列表,表示调用方法时传入的参数
格式:
参数类型参数名称,参数类型参数名称,……
5.[throw
定义方法可能抛出的异常
方法调用
必须对应定义的参数进行传递,保证参数类型和顺序的匹配
参数传递
1.方法中的参数作为当前方法的局部变量
2.基本类型参数传递值,引用类型参数传递引用(地址信息),传递后的结果是两个引用指向相同的对象
封装
属性的功能
1.存储信息
2.取值
3.赋值
public权限的属性同时具备三个功能
封装的实现方式
1.属性权限改为private(只能在类内部访问,对于类外部只限功能1)
2.提供get方法进行取值操作(功能2)
3.提供set方法进行赋值操作(功能3)
封装的作用
1.保护代码中不必要向外开放的细节,提高开发的可控程度
2.在set和get方法中可以通过判定对属性的存取操作进行有效性验证
this关键字:
表示当前对象
使用方法:
1.当前对象的属性:
this.属性名称
2.调用当前类的构造器:
this(参数)
注意:
只能在构造器的第一个有效语句使用
super关键字:
表示父类对象
1.调用父类对象的方法:
super.方法名(参数)
2.调用父类的构造器:
super(参数)
构造器
特殊的方法,在对象创建时被调用(new)
与方法的区别(外观)
1.名称和类名相同
2.没有返回类型
与方法的区别(功能)
1.方法可以执行任何功能,构造器只能完成对象的创建(默认)和对象属性的初始化(代码实现)
2.方法在任何位置和条件下被调用,构造器只能通过new调用
定义语法
<修饰符><名>([参数列表])[异常抛出定义]{
构造体(内容)
}
构造器的重载(overloading)
在一个类中可以定义多个构造器,目的是提供更灵活的对象创建手段
判定标准为:
参数类型不同
方法的重载(overloading)
在一个类中可以定义多个同名方法,目的是提供更灵活的调用手段,减少不必要的类型转换
判定标准:
方法同名不同参(类型)
publicvoidprint(intx,floaty){...}
publicvoidprint(floatx,inty){...}
publicintprint(intx,floaty){...}//不能和第一个同时出现
publicintprint(doublex,inty){...}
默认构造器
当类中没有显示定义构造器时,系统会分配默认构造器,保证能够创建该类的对象
默认构造器的形式是无参数无内容,只能执行对象创建,不能对属性进行有效的初始化
对象初始化的完整步骤:
Mydatemd=newMydate(1982,2,5);
1.为引用分配空间
2.为对象分配空间,同时执行隐式初始化
3.执行显式初始化
4.执行构造体
5.在引用的空间中写入对象的地址信息
第六天
单继承:
每个类只能定义一个父类
多继承
每个类可以定义多个父类
java使用单继承机制
优点:
避免不确定性(从多个类继承同一方法的多个实现方式)
缺点:
功能受到一定的限制(使用接口interface进行弥补)
继承的设计原则
1.必须符合isa机制
子类isa父类
如:
ManagerisaEmployee
2.从功能的角度考虑是否有必要设计为继承关系
多态
1.引用类型可以操作的对象类型为本类或子类,但同时能操作一个对象
2.对象可以被不同类型的引用操作(同时)
3.引用的类型可以进行转换,对象的类型无法进行转换
权限修饰符:
+:
public
-:
private
#:
protected
static关键字:
1.属性
存储在静态存储区域中,相当于类范围的全局属性。
类的所有对象可以对该类的静态属性进行存取
静态属性与具体对象无关,只与类有关
静态属性初始化在类加载的时候执行
类加载在发生以下情况时执行,但只会执行一次
a.创建类的对象
b.访问类的静态元素(属性、方法),普通属性创建一次对象执行一次初始化,静态属性只初始化一次,与具体创建的对象数无关
2.方法
与具体的对象无关,只与类有关,所以在使用时不需要创建对象也可以使用,实际也可以使用
实际开发中用于一些“工具”方法,减少调用时无意义的对象创建工作
工具方法:
方法的功能只与传入参数相关,与具体对象无关
访问语法:
类名.方法名(参数)
注意:
普通方法覆盖普通方法,静态方法覆盖静态方法
3.静态初始化块
用于对静态变量进行初始化,在类加载时执行一次
语法:
直接包含在类中,和属性、方法、构造器平行
static{...}
final关键字:
1.属性:
常量
2.局部变量:
局部常量
3.类:
无法继承的类
4.方法:
无法覆盖的方法
5.静态属性:
类常量
**加上final的类不能被继承**
抽象类(Abstractclass)
1.可以禁止对象的创建,一般在上层类中使用较多(需要继承关系实现多态性的应用,但该类并没有真正的实际逻辑含义)
2.抽象类中可以定义属性和构造器,语法和普通类相同
3.抽象类中可以定义普通方法,语法和普通类相同
4.抽象类中可以定义抽象方法,一般对于没有内容的方法可以定义为抽象方法
语法:
[修饰符]abstract返回类型方法名称(参数)[异常抛出];
5.抽象类中可以没有抽象方法;如果类中存在抽象方法,该类必须定义为抽象类
6.类从父类继承抽象方法后,必须将所有抽象方法覆盖(对抽象方法的覆盖又称为实现),如果没有实现所有的抽象方法,则该类必须也声明成抽象类
interfaceA{
voidfirst();
}
interfaceB{
voidfirst();
}
classC{
publicvoidfirst(){....}
}
classDextendsCimplementsA,B{
}
不管有几个抽象的方法,只要覆盖就可以了
类和接口之间的关系
1.类和类:
extends关键字,单继承
2.类和接口:
implements关键字,多重实现
3.接口和接口:
extends关键字,多重继承
语法:
interface接口名extends接口1,接口2,....{
......
}
访问权限:
1.private:
类权限或私有权限,只能在类内部使用
2.default:
包权限或默认权限,相同包下可以访问
3.protected:
包权限+继承权限,相同包下可以访问,不同包下如果存在继承关系,在子类中也可以访问
4.public:
公有权限,任何情况都能使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 学习 基础知识