Java笔记01.docx
《Java笔记01.docx》由会员分享,可在线阅读,更多相关《Java笔记01.docx(21页珍藏版)》请在冰豆网上搜索。
![Java笔记01.docx](https://file1.bdocx.com/fileroot1/2022-10/27/0835ef56-25fb-4085-be4a-5859d7d1b50e/0835ef56-25fb-4085-be4a-5859d7d1b50e1.gif)
Java笔记01
v在计算机中,程序(program)是为实现特定目标或解决特定问题而使用计算机语言编写的命令序列的集合,为实现预期目的而进行操作的一系列语句和指令
v如:
vJAVA提供一种系统级的线程跟踪内存使用情况,并在JVM空闲时检查并释放那些可被释放的存储空间
vJAVA垃圾回收机制在程序运行过程中自动运行,程序员不需要干预,也无法精确控制
vJRE包用来构建一个能够运行Java应用程序的环境,它包括核心API、集成API、用户界面API、发布技术、JVM五部分构成,全称JavaRuntimeEnvironment。
vJDK包是用来构建开发、编译、运行Java应用程序的软件包,它包含JDK开发包与JRE运行包,全称是JavaDevelopmentKit。
vjdk1.5(5.0):
Tiger,老虎
vjdk1.6(6.0):
Mustang,野马
vJavaSESDK包虽有自带的JRE,但功能不强,应重新安装一个JRE,最好是同一个版本的。
vPATH路径下的程序和命令,可以随处执行。
v在运行java程序时,会在CLASSPATH路径下搜索引用的类。
v集成开发环境(IDE)是一类软件,它将程序开发环境和程序调试环境集合在一起,帮助程序员开发软件
vjava项目组织的一般规则如下:
v窗口→显示视图→包资源管理器:
v1.src目录:
存放包和源文件
v2.JRE系统库目录:
存放程序运行必须的系统库文件
v窗口→显示视图→导航器:
3.bin目录:
存放可执行的字节码文件
局部变量:
定义在方法内或代码块内({}括起的部分)。
成员变量:
方法或代码块外,但在类内定义的。
由于Java是纯面向对象编程语言,不存在类外的任何元素,所以类外不能定义变量,因此没有其它编程语言中全局变量一说了。
按所属数据类型来分
值类型,又称作基本数据类型。
引用类型,指向原始值的指针地址。
堆的优势是动态分配内存大小,因为动态分配内存,生存期也不必事先告诉编译器,缺点就是要在运行时动态分配内存,存取速度较慢;
栈的优势是存取速度比堆要快,仅次于直接位于CPU中的寄存器,另外,栈数据可以共享。
但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
Java中的字符采用Unicode编码(16Bit/全角字)
计算机采用的默认编码为ASCII码(8bit/半角字)。
v骆驼式命名法(Camel-Case):
由一个或多个单词连结在一起
v匈牙利命名法:
把变量名按:
”属性+类型+对象”描述的顺序组合起来,以使程序员作变量时对变量的类型和其它属性有直观的了解,如:
HN命名的一种规范:
v帕斯卡命名法,大驼峰式命名法”(UpperCamelCase):
当变量名和函数名称是由二个或二个以上单字连结在一起,而构成的唯一识别字时,单字之间不以空格断开或连接号(-)、底线(_)连结,第一个单字首字母采用大写字母,后续单字的首字母亦用大写字母,例如:
FirstName、LastName。
每一个单字的首字母都采用大写字母的命名格式
doubleb=Math.pow(i,2);//求i的2次方。
doublec=Math.max(i,j);//比较i、j两数取其大的。
doubled=Math.random();//获取0与1之间的随机数。
switch后面小括号中表达式的值必须是整型(byte、char、short、int)或枚举类型,即switch结构只能处理条件是整型变量或字符变量的等值判断,而多重if语句特别适合某个变量处于某个区间时的情况
1.命名规则:
以大小写字母、下划线(_)、美元符号($)开头的大小写字母、下划线(_)、美元符号($)、数字组成,不可以是保留字、关键字。
2.源文件名与其内的public权限的类名相同,即在一个拥有多个类的同一源文件中只能有一个public权限的类,若没有公共类,类名可以与其内的任何一个类名同名或为其他名字。
3.在java中关键字goto、const没有任何意义,关键字assert是在JDK1.4引进的,关键字enum是在JDK1.5之后引进的。
4.
5.
6.
7.
8.强制类型转换要慎用
9.自动转换类型:
把任何基本数据类型的值与字符串进行连接运算,基本数据类型的值都将自动转换为字符串类型
当有多种数据类型混合运算时,系统自动将数据类型转换为容积最大的数据类型进行运算。
容积大的数据类型转换为容积小的数据类型时需要强制转换,但副作用是可能会造成精度损失或数据溢出。
把浮点类型转换为整型将被直接截断小数部分。
char型转换为int型时,其值对应的是该字符的Unicode码编码地址值;同理在将int型转换为char型时,会根据截取的整型值作为Unicode码编码地址,查找对应的字符;整型值如果大于65535则会溢出。
10.优先级:
由右至左:
!
、+、-、~、++、--、?
:
、=
11.强制类型转换要慎用
12.数组的声明形式一:
a.声明一维数组:
数据类型【】数组名=null;
声明二维数组:
数据类型【】【】数组名=null;
b.分配内存给数组:
数组名=new数据类型【长度】;
数组名=new数据类型【行的个数】【列的个数】;
数组的声明形式二:
数据类型【】数组名=new数据类型【长度】;
数据类型【】【】数组名=new数据类型[行的个数][列的个数]
静态初始化:
数据类型【】数组名={初值0,初值1,初值2};
数据类型【】【】数组名={{初值0,初值1},{初值3},{初值4,初值5,初值6}};//根据每行元素的个数,只在需要的地方开辟空间
初值0
初值1
不开辟空间
初值3
不开辟空间
不开辟空间
初值4
初值5
初值6
13.静态方法的定义格式:
publicstatic返回值类型方法名称(类型参数1,类型参数2,……){
程序语句
[return表达式];
}
静态方法可以由主方法直接使用
方法的命名一般是第一个单词的首字母小写,其后的每个单词的首字母大写,类名首字母应大写。
方法的重载只是在参数的个数或类型上不同,而方法(函数)名是相同的。
14.return;直接结束方法,返回被调用处。
15.函数名(数据类型…参数)//设置可变参数的方式
16.for(数据类型变量名称:
数组名称){}
17.类图的一般格式:
类名
访问权限属性名称:
属性类型
<>表示构造函数
+表示public权限-表示private权限#表示protected
访问权限属性名称:
属性类型
类名称采用斜体表示一个抽象类
O或o-表示接口
《Implement》表示接口
表示A实现接口B
18.在程序中,一般的,对象保存在栈内存之中,属性保存在堆内存之中,方法保存在全局代码区之中,且在全局区中的内容是所有对象共享的。
19.通过this.方法()可以明确指明是本类中的方法。
20.匿名对象:
如:
new类名(参数1,参数2,……);即直接在堆内存开辟空间,缺少在栈内存的引用。
21.引用传递:
参数为对象,这样可以通过对象改变其内的属性,并且在引用中,对象可以引用其本身。
22.使用this可以调用本类中的方法、表示类中的属性、调用本类的构造方法、表示当前对象(即当前正在调用方法的对象)。
23.Static可以声明全局属性,即:
一般的,全局数据区保存static类型的属性,全局代码区保存所有方法的定义,堆内存保存每个对象的具体属性,栈内存保存访问堆内存的地址……。
若要修改static声明的属性值,一般使用“类名称.属性=修改后的值”直接修改。
Static声明的方法也可以使用“类名称.方法()”直接使用。
静态方法或属性在对象实例化之前就可以调用了,而非静态方法或属性必须在对象实例化之后才能被调用,所以静态方法无法使用非静态方法或属性。
24.由于每一个实例化对象在操作的时候必须调用构造方法完成,所以直接在构造方法之中增加一个static属性即可实现计数。
25.Main是系统规定好默认调用的方法名称,执行的时候,默认找到main方法名称。
主方法是程序的起点,所以不需要任何返回值。
String[]args表示的是运行时的参数,参数传递的形式为:
java类名称参数1参数2参数3……
26.单态设计模式的核心就是将类的构造方法私有化,之后在类的内部产生实例化对象,并通过类的静态方法返回实例化对象的引用。
27.对象数组中的每个元素必须单独实例化,否则内容就为null。
28.使用内部类可以直接使用其所在外部类的私有属性。
可以使用static定义内部类为外部类,其他类可以使用“new外部类名称.内部类名称().内部类的方法名称()”的方式通过外部类访问其内部类。
也可以直接使用“外部类.内部类内部类对象=外部类实例.new内部类();”的方式使用内部类。
如果一个方法中的参数或其内定义的变量要被其内的内部类访问时,该参数或变量要定义为final类型。
29.继承(extends),主要是为了扩展类的功能,java中一个子类只能继承一个父类,且不允许多重继承,但可以多层继承。
30.被子类覆写(override)的方法不能拥有比父类方法更加严格的访问权限:
(最低的访问权限)private31.在子类覆写父类的方法中可以使用“super.方法名();”的方式访问父类中被子类覆写的方法。
32.
33.super表示从子类调用父类的指定操作,如:
调用属性、方法、构造……。
34.
this和super本身都可以调用构造方法,而且调用的时候都必须放在构造方法的首行,即不可能同时出现在某个构造函数里。
35.使用final声明的类不能有子类,声明的方法不能被子类覆写,声明的变量成为常量,常量是不可以修改的,且常量在声明时必须为其明确的指定内容,一般的,使用final声明的变量名全部使用大写字母。
全局常量使用staticfinal声明。
36.只要包含抽象方法的类就必须是抽象类,抽象类和抽象方法都要使用abstract关键字声明,抽象方法只需要声明而不需要实现,抽象类必须被子类继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法。
abstractclass抽象类名称{
属性;
访问权限返回值类型方法名称(参数){
[return返回值];
}
访问权限abstract返回值类型方法名称(参数);
//在抽象方法中是没有方法体的。
};
37.final定义的类是不能有子类的(终态类不能被继承),而抽象类是必须有子类的(抽象类必须被继承,且子类要覆写抽象类中的所有抽象方法),所以abstract不能使用final,抽象类中可以有构造方法,且子类实例化对象时,先调用抽象类(父类)的构造方法。
38.接口内部都是公共的全局常量和抽象方法,在定义接口时,内部的方法可以省略publicabstract,内部的常量可以省略publicstaticfinal。
接口的使用也必须有子类,若子类不是抽象类,必须覆写接口中的全部抽象方法,通过implements实现。
39.一个子类同时继承抽象类和实现接口的格式如下:
class子类extends抽象类implements接口A,接口B,……{}
一个接口虽然不能继承