Java学习笔记上.docx
- 文档编号:25810110
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:20
- 大小:24.45KB
Java学习笔记上.docx
《Java学习笔记上.docx》由会员分享,可在线阅读,更多相关《Java学习笔记上.docx(20页珍藏版)》请在冰豆网上搜索。
Java学习笔记上
1、1.this关键字:
在类的方法中使用this关键字代表该方法的对象的引用。
2.有时使用this可以处理方法中成员变量和参数重名的问题。
3.this可以看作一个变量,它的值是当前对象的引用。
2、方法的重载是指一个类中可以定义有相同的名字,但参数不同(可以是类型或者个数不同)的多个方法,调用时会根据不同的参数列表选择对应的方法。
3、封装:
就是把不想或者不该告诉别人的东西隐藏起来,把可以告诉别人的公开。
做法:
用private等修改属性的访问权限来限制对属性的访问,并为每一个属性创建一对一的取值方法和赋值方法,用于对这些属性的访问。
4、构造方法:
1.使用new加构造方法创建一个新的对象。
2.构造方法是定义在java类中的一个用来初始化对象的函数。
3.构造方法与类同名且没有返回值。
4.this看上去,是用来区分局部变量和成员变量同名的情况,this就是代表本类对象,this代表它所在函数所属对象的引用。
构造函数之间的调用只能通过this();语句来完成。
构造函数之间进行调用时,this()语句只能出现在第一行。
5、构造代码块:
特点:
对象一建立就运行了,而且优先于构造函数执行。
作用:
用来给对象进行初始化的。
构造代码块和构造方法的区别:
构造方法是给对应的对象进行初始化的,构造代码块是给所有的对象进行统一的初始化。
构造代码块中定义的是不同对象共性的初始化内容。
6、1.类名首字母大写。
2.方法和属性小写。
3.由多个单词组成的类名或方法名采用驼峰标识。
类名:
StudentAdminAgeName方法:
studentNameSexAge。
4.常量所有字母大写。
5.包名全部小写。
7、static关键字:
修饰的变量不存储在堆内存和栈内存,而是存储于数据区(也叫方法区、共享区、datasegment)。
作用:
是一个修饰符,用于修饰成员(成员变量、成员方法)。
1.被static修饰后的成员变量只有一份。
2.当成员被static修饰之后,多了一种访问方式,除了可以被对象调用之外,还可以被类名直接调用。
static变量(静态变量、类变量)的特点:
1.随着类的加载而被加载。
2.优先于对象的存在。
3.被所有对象所共享的。
4.可以直接被类名所调用。
非静态变量称为实例变量(由类实例化出来的变量)。
实例变量随着对象的简历而存在于堆内存。
生命周期:
1.类变量的生命周期最长,随着类的消失而消失。
2.实例变量生命周期比类变量短,它是随着对象的消失而消失。
静态方法:
1.静态方法只能访问静态的成员。
2.非静态方法既能访问非静态成员(成员变量和方法),也能访问静态成员。
3.静态的方法中不可以定义thissuper关键字,因为静态优先于对象存在,因此静态方法不可以出现this。
8、什么时候使用静态成员变量:
当属于同一个类的所有对象出现共享数据时,需要将存储这个共享数据的成员变量用static修饰。
9、什么时候使用静态方法:
当功能内部没有访问到非静态的成员时(对象特有的数据),那么该功能可以定义成静态的。
10、main()方法:
public:
公共的,代表该类或者函数访问权限是最大的
static:
静态的,主函数随着类的加载就已经存在了。
void:
代表主函数没有具体的返回值。
main:
main不是java关键字,它是一个有特殊的单词,能够被JVM所识别。
String[]args:
函数的参数,参数类型是一个字符串数组,该数组的元素是字符串。
11、静态代码快:
static{
静态代码块语句;
}
特点:
随着类的加载而执行,并且只会执行一次,并且还优先于主函数。
作用:
用于给类进行初始化。
12、对象的初始化过程:
1.因为newStudent()用到了Student类。
所以会把它从硬盘上加载进入内存。
2.如果有static静态代码块,就会随着类的加载而执行,还有静态成员和普通方法也会随着类的加载而被加载。
3.在堆中开辟空间,分配内存地址。
4.在堆中建立对象特有属性,并同时对特有属性进行默认初始化。
5.对属性进行显示初始化。
6.执行构造代码块,对所有对象进行初始化。
7.执行对应的构造函数,对对象进行初始化。
8.将内存地址给s(栈中的变量)。
13、继承:
(子类,父类(超类、基类))
继承的概述:
1.提高了代码的复用性,简化了代码。
2.让类与类之间产生了继承关系,才有了后面的多态特性的存在。
3.继承关系:
”isa”。
4.子类拥有父类的成员,子类不能拥有父类中被private修饰后的成员。
5.java的多层继承:
在多层继承中,最下层的子类拥有整个继承体系的成员,最上层的父类里面定义所有子类的共性描述。
6.java中不支持多继承,只支持单继承。
因为多继承存在安全隐患,当多个父类定义了相同的成员,子类对象不确定运行哪一个。
但是java保留这种机制,并用了另一方式来体现,多实现。
classStudentextendsPerson{
voidstudy(){
System.out.println(“学习”);
}
}
classPerson{
Stringname;
intage;
}
14、子父类中的成员变量:
this代表当前对象的引用,this.name首先在笨类中找所需要的对象name,如果没有找到,再在父类中找。
super用于访问当前对象的父类成员,super.name直接在父类中找所需变量name。
15、子父类中的函数:
当子类中出现和父类中也一样的函数时,当子类对象调用该函数,运行的是子类中的函数,如同父类中的函数被覆盖一样,这种情况就是函数的另一种特性:
重写(覆盖)。
注意:
1.子类覆盖父类中的方法时,必须要保证子类方法权限大于等于父类,才能覆盖,否则编译出错。
(成员前面没加任何访问权限修饰符,默认访问权限就是default)
2.静态的函数只能覆盖静态(很少用)。
记住:
重载只看同名的方法的参数列表,重写是子父类方法要一模一样。
16、子父类中的构造函数:
有了父类之后构造函数的特点:
在对子类对象进行初始化的时候,父类的构造方法也会运行,那是因为子类的构造函数默认第一行有一条隐式的语句super();
子类每个构造方法第一行都有一个隐式的super();
super();//在子类中调用父类的无参构造方法。
this();//在本类中调用自己的无参的构造方法。
16、对象的转型:
对象的向上转型子类转成父类默认进行。
父类引用指向子类对象!
对象的向下转型父类转成子类强制进行。
instanceof测试左边的对象是否是右边的实例:
是,返回true,否返回false。
17、多态:
可以理解为事物存在的多种体现形态。
多态成员变量的特点:
1.编译期间:
参阅的是引用型变量所属的类(如父类)中是否有调用的方法。
2.运行期间:
参阅对象所属的类(如子类)中是否有调用的方法。
1.多态的体现:
父类引用指向子类对象。
2.多态的前提:
1..必须得类与类之间存在关系,可以是继承关系,也可以使实现关系。
2.必须得有重写,否则多态就没有意义(或者说根本就没有多态的存在)。
3.多态的好处:
大大提高了程序的可扩展性。
4.多态的弊端:
虽然提高了程序的可扩展性,但是只能用父类的引用访问到父类中的成员。
18、importjava.util.Random;//导入随机数类
Randomr=newRandm();
inta=r.nextInt(3);//随机产生int类型(0到3,包含0,不包含3)并赋值给a。
19、匿名对象:
classCar{
Stringcolor;
voidstart(){
}
}
publicclassMainClass{
publicstaiticvoidmain(String[]agrs){
newCar().start();//new对象直接调用方法。
}
}
匿名对象的使用方式:
1.当对对象的方法只调用一次时,我们可以用匿名对象来完成,比较简化。
2.匿名对象可以被当作实参传递。
20、Objet类:
它是java中所有对象的直接或者间接父类,根父类(基类),它里面定义的功能是所有对象都具备的。
当定义一个新类时,没有指明要继承某类,它默认继承Object类。
Object了在java.lang包里面。
toString()方法:
返回该对象的字符串表示。
21、equals()方法:
publicbooleanequals(Objectobj){}//传入参数为Object类型,即所有类型。
x.equals(y);//当对象x和y”相等”时,返回true,否则返回false。
运算符==和Object类里面的equals()方法,其实比较的就是两个对象的地址是否一致。
22、final(最终)是一个修饰符:
1.可以修饰类、函数、变量(成员变量,局部变量)。
2.被fnal修饰后的类不可以被其他类继承。
3.被final修饰的函数不可以被重写。
4.被final修饰后的变量不允许被再次赋值,final修饰变量时,必须赋初值,final修饰的变量称为常量。
注意:
常量的命名规范:
字母全部大写(笔记上面有提到),如果名字由多个单词组成,单词之间用_隔开,如STUDENT_NUMBER。
finalstaticintSTUDENT_NAME=001;//全局常量。
23、抽象类:
abstract:
是一个修饰符,可以修饰方法、类。
1.当我们多个类存在相同的功能时,但是类的主体不同,这时我们向上抽取,只抽取功能的定义,不抽取功能的主体。
抽象类的特点:
1.抽象方法一定要在抽象类中。
2.抽象类和抽象方法必须要被abstract关键字修饰。
3.抽象类不能实例化对象,因为调用抽象的方法没有意义。
4.抽象类中的方法要被使用必须由子类重写抽象类中的方法,然后创建子类对象来调用。
5.抽象类中可以定义非抽象的方法。
有时我们不需要某些类通过new关键字创建对象,可以用abstract将其修饰。
6.子类如果只重写一部分父类的抽象方法,那么子类也是一个抽象类。
如果抽象类中的方法要被使用,必须重写抽象类中的所有抽象方法。
7.值得注意:
抽象类其实和普通的类没有太大的不同,主要区别:
1.抽象类不能通过new关键字来创建对象。
2.抽象类里面可以有抽象方法。
abstractclassAnimal{
abstractvoidsing();//抽象方法,没有大括号和函数主体。
voidshow(){
System.out.println(“抽象类中可以定义非抽象方法!
”);
}
}
classCatextendsAnimal{//创建Cat类,继承抽象类Animal。
voidsing(){
System.out.println(“喵喵的唱歌”);
}
}
classDogextensAnimal{
voidsing(){
System.out.println(“汪汪的唱歌”);
}
}
punlicMainClass{
publicstaticvoidmain(String[]args){
Animala=newCat();//多态!
有继承,有重写,有父类引用指向子类对象
a.sing();//A为引用,因为多态,会执行Cat类的single()方法。
}//父类中必须有sing()方法,否则编译时会报错。
}
24、需求:
求一段代码运行所花费的时间;
原理:
结束时间-开始时间。
System.currentTimeMills():
返回值为long型(以毫秒为计时单位),并且方法为静态方法,可以被类System直接调用,java默认importjava.lang包,所以可以直接使用System类。
模板方法设计模式:
定义功能时,功能的一部分是确定的,而确定的部分在使用不确定的,那么这时就得将不确定的部分暴露出去,由子类去完成。
25、接口:
interface
初步理解:
接口是一个特殊的抽象类,当抽象类中全部是抽象方法时,可以通过接口的形式来体现。
接口中成员的格式(只有这两种成员,抽象和常量):
1.publicstaticfinalStringNAME=”小李”;//全局常量。
2.publicabstractvoidshow();//抽象方法。
3.注意:
1.接口中只能出现public访问修饰符。
2.接口不可以创建对象,因为里面有抽象方法,需要被子类实现,子类把接口中的所有抽象方法实现后,子类才能实例化对象。
(接口在内存中都没有对象存在,接口没有构造方法。
)
interfaceSmoket{
publicstaticfinalStringNAME=”小李”;
publicabstractvoidshow();
}
classStudentimplementsSmoket{//实现接口。
publicvoidshow(){
System.out.println(“实现接口中的抽象方法”);
}
}
publicMainClass{
publicstaticvoidmain(String[]agrs){
Students=newStuden();
s.show();
}
}
26、interfaceSmoket{
voidsmoket();//接口中的方法默认有public,abstract修饰符。
}
interfaceGame{
voidcomputerGame();
}
classStudentimplementsSmoket,Game{//多实现,接口名用英文逗号隔开
publicvoidsmoket(){//子类方法访问权限要>=父类/接口中的方法权限。
System.out.println(“实现smoket()方法”);
}
publicvoidcomputerGame(){
System.out.println(“实现computerGame()方法”);
}
}
publicMainClass{
publicstaticvoidmain(String[]agrs){
Students=newStudent();
s.smoket();
puterGame();
}
}
接口、类之间的关系:
类与类之间是继承关系,接口与类之间是实现关系,接口与接口之间有继承关系。
接口之间的继承和类之间的继承类似。
27、接口:
提高了我们功能的扩展性,因为它降低了事物与事物之间的耦合性(关系紧密程度)。
父类中定义的是多个类中共性基本功能,接口中定义的是扩展功能。
接口的好处:
可以多实现,也就是一个类可以实现多个接口。
classPerson{
Stringname;
intage;
}
interfaceSmoket{
publicabstractsmoket();
}
classStudentextensPerson{
}
classWorkerextendsPersonimplementsSmoket{
publicvoidsmoket(){
System.out.println(“实现smoket()方法”);
}
}
28、包(package),包可以理解为文件夹。
作用:
1.对类进行分类管。
2.给类提供了多层命名空间。
注意:
1.类名的全称:
包名.类。
2.定义包的语句一定要在代码第一行。
packagepack;//包名字母全部小写。
classMainClass{
publicstaticvoidmain(String[]args){
}
}
packagea.b//a包里面有一个b包
javac–d.MainClass.java//编译时同时在当前目录下创建包的文件夹。
通常为了使包名具备唯一性,通常用url做包名。
访问权限修饰符权限作用范围:
publicprotecteddefaultprivate
同一个类okokokok
同一个包okokok
子类okok
不同包中ok
类只能被public和default访问权限修饰符修饰。
当一个记事本中定义了多个类,只能出现一个public的类。
29、jar包:
就是java里面的压缩包。
(jar.exe:
打包jar文件的)
jarcvfTool.jarnet//把net包打包成Tool.jar文件,cvf为三个参数。
30、int[]arr=newint[5];
int[]arr={1,4,23,67,12};//声明数组并且初始化。
importjava.util.Scanner;//导入Scanner类。
Scannerinput=newScanner(System.in);//创建Scanner对象input。
inta=input.nextInt();
int[]arr=newint[10];
System.out.println(arr.length);//打印数组长度,结果为10。
31、异常处理:
是处理错误的机制。
importjava.util.*;
publicMainClass{
publicstaticvoidmain(String[]agrs){
inta,b,c;
Scannerinput=newScanner(System.in);
try{//把可能出现异常的代码,放到try大括号里面。
a=input.nextInt();
b=input.nextInt();
c=a%b;//a对b取余。
System.out.println(“余数为”+c);
}
catch(Exceptione){//catch有参数,一般异常这么处理即可。
System.out.println(“上面的代码运行错误时会输出这句话!
”);
}
System.out.println(“程序下面的代码顺利执行。
”);
}
}
finally:
起到异常处理的出口作用,用在try….catch语句的最后,无论是否出现异常,finally中的语句都会被执行。
……
try{
可能出现异常的代码;
}
catch{
对异常进行处理;
}
finally{
无论是否出现异常都会执行;
}
……
32、Equals方法:
publicMainClass{
publicstaticvoidmain(String[]args){
}
}
classA(
privateinti;
A(inti){
this.i=i;
}
publicbooleanequals(Aa){//重写Object类的equals()方法。
if(this.i==b.i){
returntrue;
}
else{
returnfalse;
}
}
)
classBextendsA{
privateintj;
C(intj){//子类构造方法。
super(j);//调用父类有参构造方法。
this.j=j;
}
publicbooleanequals(Aa){//子类重写A类equals方法。
if(this.j==b.j){//上一句,A类引用指向B类对象,为多态。
returntrue;
else{
returnfalse;
}
}
publicMainClass{
publicstaticvoidmain(String[]args){
Bb1=newB(20);
Bb2=newB(20);
System.out.println(b1.equals(b2));//结果输出true
}
33、集合类:
集合类是一些特殊的类,专门用来存放其他类的对象的“容器”。
主要是完成一些数据库和数据结构的功能。
集合类的分类(主要):
1.List结构集合类
ArrayListLinkedListVectorStack
2.Map结构集合类
HashMapHashTable
3.Set结构集合类
HashSetTreeSet
4.Queue结构集合类和Queue接口
importjava.util.*
classStudent{
privateStringname;
privateintnum;
privateintcourse;
Student(Stringname,intnum,intcourse){
this.name=name;
this.num=num;
this.course=course;
publicStringgetName(){
returnname;
}
publicintgetNum(){
returnnum;
}
publicintgetCourse(){
returncourse;
}
}
}
ArrayListarr;
System.out.println(“arr.size()”);//输出arr的大小。
Students1=newStudent(“小明”,001,90);
Students2=newStudent(“小红”,002,95);
Students3=newStudent(“小华”,003,96);
Students4=newStudent(“小花”,004,99);
arr.add(s1);//把s1添加到ArrayList对象arr中。
arr.add(s2);//ArrayList里面的编号和数组一样,从下标0开始。
arr.add(s3);
for(inti=0;i Students0=(Student)arr.get(i);//arr.get()是ArrayList类里面取元素的方法。 System.out.println(“第(i+1)个学生: ”“姓名: ”+s0.getName()+”学号: ”+s0.getNum()+”成绩: ”+s0.getCourse()); //arr.get(i)依次取出元素放到s0里面,需要进行强转。 } arr.remove(i);//删除第i个元素(i从0开始)。 arr.add(1,s4);//把s4添加到下标为1的位置,后面的元素下标依次加一。 34、LinkedList: LinkedListlin=newLin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 学习 笔记