Java笔记Word文档格式.docx
《Java笔记Word文档格式.docx》由会员分享,可在线阅读,更多相关《Java笔记Word文档格式.docx(33页珍藏版)》请在冰点文库上搜索。
而String表示字符串,定义时用双引号,可以存储一个或多个字符,如Stringname="
tom"
char是基本数据类型,而String是一个类,具有面向对象的特征,可以调用方法,如name.length()获取字符串的长度。
Java中变量的使用规则
1、Java中的变量需要先声明后使用
2、变量使用时,可以声明变量的同时进行初始化;
也可以先声明后赋值
3、变量中每次只能赋一个值,但可以修改多次
4、main方法中定义的变量必须先赋值,然后才能输出
5、虽然语法中没有提示错误,但在实际开发中,变量名不建议使用中文,容易产生安全隐患,譬如后期跨平台操作时出现乱码等等
自动类型转换是需要满足特定的条件的:
1.目标类型能与源类型兼容,如double型兼容int型,但是char型不能兼容int型
2.目标类型大于源类型,如double类型长度为8字节,int类型为4字节,因此double类型的变量里直接可以存放int类型的数据,但反过来就不可以了
强制类型转换:
(数据类型)数值
强制类型转换可能会造成数据的丢失,数值上并未进行四舍五入,而是直接将小数位截断。
常量,我们可以理解为是一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变。
语法:
final类型常量名=值;
程序中使用常量可以提高代码的可维护性。
例如,在项目开发时,我们需要指定用户的性别,此时可以定义一个常量SEX,赋值为"
男"
,在需要指定用户性别的地方直接调用此常量即可,避免了由于用户的不规范赋值导致程序出错的情况。
常量名一般使用大写字符。
注释:
一般来说,对于一份规范的程序源代码而言,注释应该占到源代码的1/3以上。
因此,注释是程序源代码的重要组成部分,一定要加以重视哦!
Java中注释有三种类型:
单行注释、多行注释、文档注释
文档注释以/**开头以*/结束;
多行注释以/*开头以*/结束;
单行注释以//开头行末结尾;
使用文档注释时还可以使用javadoc标记,生成更详细的文档信息:
@author标明开发该类模块的作者
@version标明该类模块的版本
@see参考转向,也就是相关主题
@param对方法中某参数的说明
@return对方法返回值的说明
@exception对方法可能抛出的异常进行说明
第3章运算符
运算符是一种“功能”符号,用以通知Java进行相关的运算。
譬如,我们需要将变量age的值设置为20,这时候就需要一个“=”,告诉程序需要进行赋值操作。
Java语言中常用的运算符可分为如下几种:
Ø
算术运算符Ø
赋值运算符Ø
比较运算符Ø
逻辑运算符Ø
条件运算符
条件运算符(?
:
)也称为“三元运算符”。
语法形式:
布尔表达式?
表达式1:
表达式2
运算过程:
如果布尔表达式的值为true,则返回表达式1的值,否则返回表达式2的值
运算符优先级
比较运算符
1、>
、<
、>
=、<
=只支持左右两边操作数是数值类型
2、==、!
=两边的操作数既可以是数值类型,也可以是引用类型
第四章条件语句
Switch语句:
1、switch后面小括号中表达式的值必须是整型或字符型
2、case后面的值可以是常量数值,如1、2;
也可以是一个常量表达式,如2+2;
但不能是变量或带有变量的表达式,如a*2
3、case匹配后,执行匹配块里的程序代码,如果没有遇见break会继续执行下一个的case块的内容,直到遇到break语句或者switch语句块结束
第六章数组
数组定义格式:
数据类型[]数组名
数据类型数组名[]
分配空间:
数组名=new数据类型[数组长度]
例如:
Arrays类是Java中提供的一个工具类,在java.util包中。
该类中包含了一些方法用来直接操作数组,比如可直接实现数组的排序、搜索等
1.排序:
可以使用sort()方法实现对数组的排序,只要将数组名放在sort()方法的括号中,就可以完成对该数组的排序(按升序排列)。
2.将数组转换为字符串:
可以使用toString()方法将一个数组转换成字符串,该方法按顺序把多个数组元素连接在一起,多个元素之间使用逗号和空格隔开。
3.fill给数组赋值:
通过fill方法。
4.equals比较数组:
通过equals方法比较数组中元素值是否相等。
5.binarySearch二分查找:
使用二分搜索法来搜索指定数组的范围
使用foreach操作数组
foreach并不是Java中的关键字,是for语句的特殊简化版本,在遍历数组、集合时,foreach更简单便捷。
从英文字面意思理解foreach也就是“for每一个”的意思,那么到底怎么使用foreach语句呢?
第7章方法
方法,就是用来解决一类问题的代码的有序组合,是一个功能模块。
一般情况下,定义一个方法的语法是:
其中:
1、访问修饰符:
方法允许被访问的权限范围,可以是public、protected、private甚至可以省略,其中public表示该方法可以被其他任何代码调用,其他几种修饰符的使用在后面章节中会详细讲解滴
2、返回值类型:
方法返回值的类型,如果方法不返回任何值,则返回值类型指定为void;
如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用return语句返回值
3、方法名:
定义的方法的名字,必须使用合法的标识符
4、参数列表:
传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开
根据方法是否带参、是否带返回值,可将方法分为四类:
无参无返回值方法Ø
无参带返回值方法
带参无返回值方法Ø
带参带返回值方法
无参无返回值方法
如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法。
方法的使用分两步:
第一步,定义方法
下面代码定义了一个方法名为show,没有参数,且没有返回值的方法,执行的操作为输出“welcometoimooc.”
注意哦:
1、方法体放在一对大括号中,实现特定的操作
2、方法名主要在调用这个方法时使用,需要注意命名的规范,一般采用第一个单词首字母小写,其它单词首字母大写的形式
第二步,调用方法
当需要调用方法执行某个操作时,可以先创建类的对象,然后通过
来实现。
无参带返回值的方法不包含参数,但有返回值。
下面的代码,定义了一个方法名为calSum,无参数,但返回值为int类型的方法,执行的操作为计算两数之和,并返回结果
在calSum()方法中,返回值类型为int类型,因此在方法体中必须使用return返回一个整数值。
调用带返回值的方法时需要注意,由于方法执行后会返回一个结果,因此在调用带返回值方法时一般都会接收其返回值并进行处理。
第二季
类与对象
成员变量默认有初始值,局部变量必须要先自己定义初始值;
两类变量同名时,局部变量具有更高的优先级(就近原则)。
1.成员变量:
在类中定义的,描述对象的属性(有什)
2.局部变量:
在类的方法中定义,在方法中临时保存数据
两者的区别:
成员变量可以被本类中的所有方法使用,也可以在其他的和当前类有关系中的类中使用,局部变量只能在当前的方法中去使用
两者的细节性差别:
(1)作用域问题:
局部变量的仅限于定义它的方法,成员变量在整个类中都可用.
(2)变量初始值问题:
注意在局部变量中必须给其赋初始值之后才能够对其使用,而成员变量可以不赋初始值(3)变量同名问题:
同一个方法中,定义的局部变量不能同名,不同方法中定义局部变量是可以重名(4)变量优先级问题:
成员变量和局部变量同名时
构造方法
1、使用new+构造方法创建新对象
2、构造方法是定义在Java类中的一个用来初始化对象的方法,创建对象时执行了构造方法。
3、构造方法包括无参和有参构造方法,后者不但可以创建对象,还可以给实例对象赋初值。
Java的默认值为0
4、当没有指定构造方法时,系统默认添加无参的构造方法
5、当有指定构造方法时,无论是有参还是无参的构造方法,都不会自动添加无参的构造方法
6、构造方法的重载:
方法名相同,单参数不同的多个方法,调用时会自动根据不同的参数选择相应的方法
new+构造方法创建一个新的对象(创建对象的时候,执行的是构造方法);
构造方法是定义在java类中,用来创建和初始化对象(当创建一个对象的时候,执行构造方法时)的方法;
构造方法与类同名且没有返回值,有参构造方法与无参构造方法;
Telphonephone=newTelphone();
当类中没有构造方法,系统会自动生成个无参构造方法,反之,就用构造方法创建对象;
可以用无参构造方法创建对象,也可以用有参构造方法创建对象。
后者不仅可以创建对象还可以给对象中实例变量赋初值;
Static讲解
1.Static之静态变量
大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。
然而在某些时候,我们更希望该类所有的对象共享同一个成员。
此时就是static大显身手的时候了!
!
Java中被static修饰的成员称为静态成员或类成员。
它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。
静态成员可以使用类名直接访问,也可以使用对象名进行访问。
当然,鉴于他作用的特殊性更推荐用类名访问~~
使用static可以修饰变量、方法和代码块。
要注意哦:
静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!
~~
2.static之静态方法
1、静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。
如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。
2、在普通成员方法中,则可以直接访问同类的非静态变量和静态变量
3、静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法
3.static之静态初始化块
在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。
如果使用static修饰初始化块,就称为静态初始化块。
需要特别注意:
静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
我们来看一段代码:
通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。
由于静态初始化块只在类加载时执行一次,所以当再次创建对象hello2时并未执行静态初始化块。
封装特性:
只能通过规定的方法访问数据get()set()
封装的实现步骤:
1.修改属性的可见性:
设为private
2.创建get/set方法:
用于属性的读写
3.在get/set方法中计入属性的控制语句:
对属性值的合法性进行判断。
包的作用:
1.管理JAVA文件
2.解决文件名冲突问题
定义包:
package包名
注:
必须放在Java源程序的第一行
包名间可以使用“.”号隔开
eg:
com.imooc.MyClass
包的使用:
1.import关键字
importcom.imooc.music.MyClass
2.java中,包的命名规范是全小写字母拼写。
3.使用的时候不但可以加载某个包下的所有文件
com.imooc.*
也可以加载某个具体子包下的所有文件
eg:
com.imooc.music.*
访问修饰符
this关键字
1.this关键字代表当前对象
this.属性操作当前对象的属性
this.方法调用当前对象的方法
2.封装对象的属性的时候,经常会使用this关键字
*eclipse中可以直接生成setter/getter方法,具体操作步骤为:
Source->
GenerateGettersandSetters
内部类
1.内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
2.内部类的方法可以直接访问外部类的所有数据,包括私有的数据
3.内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
内部类可分为以下几种:
成员内部类静态内部类方法内部类匿名内部类
成员内部类
内部类中最常见的就是成员内部类,也称为普通内部类。
我们来看如下代码:
从上面的代码中我们可以看到,成员内部类的使用方法:
1、Inner类定义在Outer类的内部,相当于Outer类的一个成员变量的位置,Inner类可以使用任意访问控制符,如public、protected、private等
2、Inner类中定义的test()方法可以直接访问Outer类中的数据,而不受访问控制符的影响,如直接访问Outer类中的私有属性a
3、定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去new一个内部类对象,即:
内部类对象名=外部类对象.new内部类();
4、编译上面的程序后,会发现产生了两个.class文件
其中,第二个是外部类的.class文件,第一个是内部类的.class文件,即成员内部类的.class文件总是这样:
外部类名$内部类名.class
1、外部类是不能直接使用内部类的成员和方法滴
可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。
2、如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用this关键字。
静态内部类是static修饰的内部类,这种内部类的特点是:
1、静态内部类不能直接访问外部类的非静态成员,但可以通过new外部类().成员的方式访问
2、如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;
如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
3、创建静态内部类的对象时,不需要外部类的对象,可以直接创建内部类对象名=new内部类();
继承的初始化顺序:
1.先初始化父类,再初始化子类
2.先执行初始化对象中属性,再执行构造方法中的初始化。
final关键字:
最终,最后
final修饰类,该类不容许修改
final修饰方法,该方法不允许被重写
final修饰属性,属性不能在其他位置修改它的值(只能赋值一次)
final修饰变量,变量被赋值一次后变成常量
super关键字:
在对象的内部使用,可以代表父类对象
访问父类的属性:
super.age
访问父类的方法:
super.eat();
子类的构造的过程中必须调用其父类的构造方法。
1.如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法;
2.如果显示的调用构造方法,必须在子类的构造方法的第一行;
3.如果子类构造方法中既没有显式调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。
Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类。
Object类中的方法,适合所有子类。
toString()方法(实例:
用于System.out.println(x)输出对象的时候,输出的是哈希码):
在Object类里定义的toString()方法,用于返回对象的哈希code码(对象地址字符串-用来唯一区分对象,如身份证)。
可以重写toString()方法表示出对象的属性,快速在类中重写toString()方法的操作:
GeneratetoString()。
equals()方法,作为object类中重要方法之一,其本身是比较两个对象的地址是否相同。
而在实际使用中,我们大多时候需要比较的是两个对象的属性值是否相同,这样我们就得重写equals方法。
要达到我们的目的我们需要:
1、首先比较两个引用的地址是否相同,如相同,那么同一个地址存储的值必定相同;
2、对象是否为空值,若为空值,那一定不同;
3、比较两个类对象是否相同,如果不相同那值肯定不同(这里需要注意类对象与类的对象区别:
类对象是指我们创建的新的类对象,其有哪些属性、方法等;
而类的对象是指对象的具体属性值。
)4、将比较对象转化为相同的类类型进行属性值比较。
多态:
对象的多态
1、引用多态:
父类的引用可以指向本类的对象
父类的引用可以指向子类的对象
如果父类引用指向一个子类的对象,那么通过父类引用,只能调用父类所定义的允许继承的方法。
如果子类重写了继承父类的方法,那么会调用子类中的方法。
2、方法多态:
创建本类对象时,调用的方法为本类方法
创建子类对象时,调用的方法为子类重写的方法或者继承的方法
引用类型转换:
1、向上类型转换(隐式/自动类型转换),小类型转换为大类型(无风险)2、向下类型转换(强制类型转换),大类型转换为小类型(有风险)3instanceof运算符用来解决对象引用类型转换的安全性问题。
对象是传址引用,基本数据是传值引用。
Dogdog=newdog();
Animalanimal=dog;
向上类型转换(子类引用转换父类引用)
Dogdog2=(Dog)animal;
向下类型转换(父类引用强制转换为子类引用)
Catcat=(Cat)animal无法进行类型转换,会报错。
因为animal其实是引用指向dog类型对象,因此1编译时cat类型2运行时dog类型
instanceof是Java中的关键字,为二元运算符,作用是判断左边的对象是否是右边类的实例,返回值为布尔类型数据。
可以用来判断继承中子类的实例是否为父类的实现。
首先,从意义上讲,父类一般表示较抽象的概念,而子类表示更具体的概念。
一旦你创建子类的实例,就表示你已经了解了它的具体特性,即便你向上转型,也只是表示你暂时不关注具体的特性,但这个实例仍然是具体化的。
就好比你管理一家公司,你一开始为所有员工制定了某项规章制度,后来发现A部门比较特殊,给他们另行制定了这项规章,这就相当于你为“员工”这个父类派生了“A部门员工”这个子类,并覆写了执行该规章的方法。
现在你要号召该所有员工去执行该规章,你会向他们统一发号施令,但是A部门员工默认情况下仍然会按照你为他们制定的特别规章来实施,除非你刻意强调他们也按一般规章。
其次,在程序正确性的保证上,父类可以是一个抽象类,它的某个方法是虚函数,并没有给出实现,该方法在子类里才被实现。
这个时候,你把一个子类向上转型再调用这个函数,如果去调用父类方法的话,程序就会面对这个没有被实现的虚函数而无法执行。
所以,仍然要调用子类覆写的方法。
最后,从实现角度讲,向上转型之后,只不过改变了指针或者对象引用的类型,但它们所指向的内存中的实际对象的类型并没有改变,依然是子类的类型,所以调用方法仍然会是子类的。
抽象类定义
1、语法定义:
抽象类钱使用abstract关键字修饰,则该类为抽象类。
2、应用场景:
a、在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法
b、从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。
3、作用:
限制规定子类必须实现某些方法,但不关注实现细节。
4、使用规则:
a、abstract定义抽象类
b、abstract定义抽象方法,只有声明,不需要实现
c、包含抽象方法的类是抽象类
d、抽象类中可以包含普通的方法,也可以没
接口语法
第三季
异常
处理异常:
try-catch以及try-catch-finally;
抛出异常;
自定义异常;
异
catch(Exceptione){
e.printStackTrace();
//输出异常的具体信息
}
当try语句中出现异常是时,会执行catch中