java 基础(一)

Java SE 第九讲
1. 面向对象程序设计的三大基本特征:继承(Inheritence)、封装(Encapsulation)、多态(Polymorphism)
2. 封装:类包含了数据与方法,将数据与方法放在一个类中就构成了封装。
3. 如何定义类?
修饰符 class 类的名字
{
//类的内容(包含了属性与方法)
}
4. 方法。如何定义方法?
修饰符 返回类型 方法名称([参数1, 参数2, 参数3…])
{
//方法体
}
5. main方法是整个Java程序的入口点,如果类的定义中没有main方法,则程序无法执行。
6. 方法定义不能嵌套 ,也就说不能在一个方法中定义另外一个方法。方法只能定义在类中。
7. 关于方法的执行:首先需要定义方法,接下来就可以使用方法(调用方法),当方法调用完毕后,方法可以返回值。方法到底是否返回值是由方法的定义决定的。
8. 如何生成对象?通过类来生成对象(通常使用new关键字来生成对象)。
public class Person
{
}
类名 变量名 = new 类名();
Person person = new Person();
Person person2 = new Person();
Person person3 = new Person();
9. 方法调用需要通过对象来完成,方法调用的形式是:
对象变量.方法名([参数值1, 参数值2, 参数值3….]);
10. 关于方法的注意事项:
1) 在方法定义中,方法的返回类型与return后面的变量或常量类型保持一致。
2) 在方法调用时,给方法传递的参数需要与方法定义时的参数保持一致(参数个数一致,参数类型一致)。
3) 方法定义时的返回类型与接收方法返回值的变量类型保持一致。
11. public int add(int a, int b)
{
return a + b;
}
方法定义时的参数叫做形式参数。
int a = test.add(8, 3);
方法调用时所赋予的具体值叫做实际参数。
12. 关键字void表示方法不返回值。
13. 如果方法不返回值,那么声明方法的时候使用void关键字,在方法定义中可以有两种情况实现不返回值:
a) 不使用return语句。
b) 使用return,但return后面没有任何值或者变量,return后面只有一个分号,表示退出方法,返回到方法的调用端。
使用方式:
return;



例子:运行结果为1, a把值传递给方法,集体怎么操作和a没关系,不影响a



Java SE 第十讲
1. 类中的属性又叫做成员变量(member variable),属性用英文表示为property或者attribute。
2. 对象(Object)又叫做实例(Instance)。生成一个对象的过程又叫做实例化。
3. 命名约定
a) 类: 首字母大写 ,如果一个类名由多个单词构成,那么每个单词的首字母都大写,中间不使用任何的连接符。比如Person类,MemberTest类。
b) 方法: 首字母小写 。如果一个方法由多个单词构成,那么第一个单词的所有字母全都小写,从第二个单词开始,每个单词的首字母大写。比如add,addThreeInt。
c) 属性:命名约定与方法相同。比如age,ageOfPerson。
4. 属性需要定义在类中,又叫做成员变量;而定义在方法中的变量叫做局部变量。
5. 如何定义属性?

public class Person
{
修饰符 类型 属性名称;
}
如何使用属性?与方法一样,使用.运算符。首先需要生成类的实例,然后使用实例+”.”的方式来使用属性。
比如:
Person person = new Person();
person.age
6. 局部变量使用前必须要声明并赋初值;成员变量使用前必须要声明,但可以不赋初值。
7. 成员变量与局部变量的联系与区别:
a) 无论是成员变量还是局部变量,使用前都需要声明(定义)。
b) 对于局部变量来说,使用前必须要初始化;对于成员变量来说,使用前可以不初始化。如果没有初始化成员变量就开始使用,那么每个类型的成员变量都有一个默认的初始值
i. byte short int long 类型的初始值为 0
ii. float double 类型的初始值为 0.0
iii. char 类型的初始值‘ \u0000
iv. boolean 类型的初始值为 false
8. 引用类型(reference type):引用类型是用在对象上的。一个对象可以被多个引用所指向,但同一时刻,每个引用只能指向唯一的一个对象。如果一个对象被多个引用所指向,那么无论哪个引用对对象的属性进行了修改,都会反映到其他的引用当中。
People people =new People() 其中people不是对象,是一个引用,new People()是新生成的对象,people引用来指向他。

成员变量被赋予了初值,当引用对属性进行修改后,则成员变量被修改




例如:


最后的输出结果为20,,30 属性的值被修改。
生成的对象只有一个,但是引用却有两个。 new People() 为新生成的对象,在 People people =new People() 中生成一个引用people,在方法的形式参数中生成另一个引用。其中第二个引用修改了属性的值,那么最后输出的是第一个引用所指向的对象的值,但是这个值之前已经被修改过了,所以输出的是修改后的值。 在方法内赋予参数时,引用只是把自己所指向的地址信息传递给函数。





与之形成对比:

上图程序的输出结果为20,20
因为在change方法的内部新生成了一个对象,方法内的对象和最后输出的对象不是同一个,所以刚开始对象的属性并没有被修改




8、 如果一个Java源文件中定义了多个类,那么这些类中最多只能有一个类是public的,换句话说,定义的多个类可以都不是public的。如果有public类,则main函数一定在public的类中。

例子:输出结果为wangwu


方法重载:表示两个或多个方法,名字相同,但方法参数不同。方法参数不同有两层含义:
1、参数个数不同 2、参数类型不同
注意:方法的返回值对重载没有任何影响。

构造方法重载:只需看参数即可

不同构造方法之间的调用,用this。This()括号中的参数,表示目标构造方法中的参数
例如:在第一个构造方法里面调用第二个构造方法
注意:this必须放在当前构造方法中的第一行语句,也就是说,this语句之前不能有任何可执行的代码。




继承:Java是单继承的,意味着一个类只能从另 一个 类继承(被继承的类叫做父类【基类】,继承的类叫做子类)。继承使用extends关键字。 一个类不能同时继承多个类。

当生成子类对象的时候,Java默认首先调用父类的不带参数的构造方法,生成父类的对象。然后执行子类的构造方法,生成子类对象。【要想生成子类的对象,首先需要生成父类的对象,没有父类对象就没有子类对象】如果父类中没有不带参数的构造方法(只有带参数的构造方法)时,则会报错。没有任何构造方法时会默认不带参数的构造方法则不会报错。


Super表示对父类对象的引用,this表示对当前对象的引用
在子类的构造方法中,可以通过super来指定调用父类的哪个构造方法,这时就不再去默认调用父类不带参数的构造方法。

与this一样,super必须作为构造方法的第一条执行语句,前面不能有任何可执行语句
例如super(1),则表示调用父类中有一个int参数的构造方法





关于继承的3点:
1、父类有的,子类也有 2、父类没有的,子类可以增加
3、父类有的,子类可以改变。

关于继承的注意事项:
  1. 构造方法不能被继承
  2. 方法和属性可以被继承
  3. 子类的构造方法隐式的调用父类不带参数的构造方法
  4. 当父类没有不带参数的构造方法时,子类需要使用super来显式的调用父类的构造方法,super指的是对父类的引用
  5. Super关键字必须是构造方法中的第一行语句


方法重写(override):又叫做覆写,子类与父类的方法返回类型一样,方法名称一样,参数一样,这样我们说子类与父类的方法构成了重写

方法重写与方法重载之间的关系:重载是发生在同一个类内部的两个或多个方法。重写发生在父类与子类之间。

当重写方法时,可以在子类的方法中用super调用父类的方法。
比如在子类的run方法中,用super.run()来调用父类的run方法,在普通方法中super可以不放在第一行


在定义一个类的时候,如果没有显式指定该类的父类,那么该类就会继承于Java.lang.Object类(JDK提供的一个类,Object类是Java中所有类的直接或间接父类)


Java SE 第十一讲

1. 如果一个类包含了属性与方法,那么该类的 每一个对象都具有自己的属性,但无论一个类有多少个对象, 这些对象共享同一个方法
2. 关于方法参数传递的总结:对于Java中的方法参数传递, 无论传递的是原生数据类型还是引用类型, 统一是传值(pass by value)
3. 什么类型的引用就能指向什么类型的对象,比如People类型的引用就能指向People类型的对象,但不能指向Student类型的对象。比如:
People people = new People(); // 正确
People people = new Student(); //错误
4. 构造方法(Constructor): 构造方法用于完成对象属性的初始化工作,构造方法的特点:
a) 构造方法的名字必须与类名完全一致(包含大小写)
b) 构造方法没有返回值,连void也不能出现
c) 如果在定义一个类的时候,没有为类声明构造方法,那么Java编译器 会自动为类添加一个没有参数且方法体为空的构造方法(默认的构造方法)
d) 如果在定义一个类的时候,为类声明了构造方法,那么Java编译器就不会再为类添加构造方法了。
e) 不能显式调用类的构造方法,构造方法通常是通过new关键字隐式调用。
5. new关键字在生成对象时完成了三件事情:
a) 为对象开辟内存空间
b) 调用类的构造方法
c) 将生成的对象的地址返回
6. 默认的构造方法:构造方法没有参数且方法体为空。
7. 使用new来生成对象的时候,后面的小括号()表示构造方法的参数列表, 如果构造方法不接收参数,那么小括号中的内容为空;如果构造方法接收参数,那么 小括号中的实际参数就需要与构造方法定义中的形式参数保持一致(参数数量一致、参数类型一致、按照顺序逐一赋值)。


JAVA SE Lesson 1
1. 类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念。先有类,然后由类来生成对象(Object)。对象又叫做实例(Instance)。
2. 类由两大部分构成:属性以及方法。属性一般用名词来表示,方法一般用动词来表示。
3. 如果一个java源文件中 定义了多个类,那么这些类中最多只能有一个类是public的,换句话说, 定义的多个类可以都不是public的
4. 在Java中进行方法的参数传递时,无论传递的是原生数据类型还是引用类型, 参数传递方式统一是传值(pass by value)。Java中没有传引用(pass by reference)的概念。
5. 方法重载(Overload)。表示两个或多个方法名字相同,但方法参数不同。方法参数不同有两层含义: 1)参数个数不同。2)参数类型不同。 注意:方法的返回值对重载没有任何影响。
6. 构造方法重载:只需看参数即可。如果想在一个构造方法中调用另外一个构造方法,那么可以使用this()的方式调用, this()括号中的参数表示目标构造方法的参数。this()必须要作为构造方法的第一条语句,换句话说,this()之前不能有任何可执行的代码
7. 继承(Inheritence): Java是单继承的,意味着一个类只能从
另一个类继承(被继承的类叫做父类【基类,base class】, 继承的类叫做子类),Java中的继承使用extends关键字。
8. 当生成子类对象时, Java默认首先调用父类的不带参数的构造方法,然后执行该构造方法,生成父类的对象。接下来,再去调用子类的构造方法,生成子类的对象。【要想生成子类的对象,首先需要生成父类的对象,没有父类对象就没有子类对象。比如说:没有父亲,就没有孩子】。
9. super关键字:super表示对父类对象的引用。
10. 如果子类使用super()显式调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法而不会再去寻找父类的不带参数的构造方法。与this一样,super也必须要作为构造方法的第一条执行语句,前面不能有其他可执行语句
11. 关于继承的3点:
a) 父类有的,子类也有
b) 父类没有的,子类可以增加
c) 父类有的,子类可以改变
12. 关于继承的注意事项
a) 构造方法不能被继承
b) 方法和属性可以被继承
c) 子类的构造方法隐式地调用父类的不带参数的构造方法
d) 当父类没有不带参数的构造方法时,子类需要使用super来显
式地调用父类的构造方法,super指的是对父类的引用
e) super关键字必须是构造方法中的第一行语句。
13. 方法重写(Override): 又叫做覆写,子类与父类的方法返回类型一样、方法名称一样,参数一样,这样我们说子类与父类的方法构成了重写关系。
14. 方法重写与方法重载之间的关系: 重载发生在同一个类内部的两个或多个方法。重写发生在父类与子类之间
15. 当两个方法形成重写关系时, 可以在子类方法中通过super.run()形式调用父类的run()方法,其中super.run()不必放在第一行语句,因此此时父类对象已经构造完毕,先调用父类的run()方法还是先调用子类的run()方法是根据程序的逻辑决定的。
16. 在定义一个类的时候,如果没有显式指定该类的父类,那么该类就会继承于java.lang.Object类(JDK提供的一个类,Object类是Java中所有类的直接或间接父类)。
17. 多态(Polymorphism):我们说子类就是父类(玫瑰是花,男人是人),因此多态的意思就是: 父类型的引用可以指向子类的对象


Parent p = new child()   当使用多态方式调用方法时,首先检查父类中是否有sing()方法, 如果没有,则编译错误;如果有,再去调用子类中的sing()方法。
父类中必须有sing()方法,子类中可以没有。子类没有的话,调用的则是子类从父类继承的sing()方法
 
多态就是父类型的引用指向子类的对象。 当父类想要实现不同的功能,实现不同的具体身份时,可以创建子类来重写父类中的方法。当调用某个具体的身份或功能时,就把创建的父类引用来指向某个具体的子类对象。同时也可以直接创建子类的引用来指向子类的对象,因为子类的引用可以自动转换成父类的引用,也就是向上类型转换
 
比如在传引用的时候,使用多态,就可以在方法的参数里统一设置使用父类的引用,当具体实现时,就把父类的引用指向某个具体的子类对象。而 不必再分别创建方法生成子类的引用分别指向其对象
 
 
父类引用指向哪个子类的对象,那么这个引用就可以转换成该子类的引用,而不能转换成其他子类的引用
比如:animal a = new dog()可以转换dog d = (dog) a但是不能转换 cat c = (cat) a(但此时编译不会报错,在运行时会报错)
 
多态是发生运行时,而不是编译的时候
 
一共有两种类型的强制类型转换:
  1. 向上类型转换:(upcast):比如说将cat类型转换成animal类型,即将子类型转换为父类型。对于向上类型转换,不需要显式指定。
  2. 向下类型转换:比如将animal类型转换成cat类型。即将父类型转换成子类型  。对于向下类型转换,必须要显式指定(强制类型转换) 
 
4. 抽象类(abstract class):使用了abstract关键字所修饰的类叫做抽象类。 抽象类无法实例化,也就是说,不能new出来一个抽象类的对象(实例)。
5. 抽象方法(abstract method):使用abstract关键字所修饰的方法叫做抽象方法。抽象方法需要定义在抽象类中。相对于抽象方法,之前所定义的方法叫做具体方法(有声明,有实现)。
6. 如果一个类包含了抽象方法,那么这个类一定是抽象类。
7. 如果某个类是抽象类,那么该类可以包含具体方法(有声明、有实现)。
8. 如果一个类中包含了抽象方法,那么这个类一定要声明成abstract class,也就是说,该类一定是抽象类;反之,如果某个类是抽象类,那么该类既可以包含抽象方法,也可以包含具体方法。
9. 无论何种情况, 只要一个类是抽象类,那么这个类就无法实例化
10. 在子类继承父类(父类是个抽象类)的情况下,那么该子类必须要实现父类中所定义的所有抽象方法;否则,该子类需要声明成一个abstract class
11. 接口(interface):接口的地位等同于class, 接口中的所有方法都是抽象方法 。在声明接口中的方法时, 可以使用abstract关键字,也可以不使用。通常情况下,都会省略掉abstract关键字。
12. 可以将接口看作是特殊的抽象类( 抽象类中可以有具体方法,也可以有抽象方法,而接口中只能有抽象方法,不能有具体方法 )。
13. 类可以实现接口。实现使用关键字implements表示,代表了某个类实现了某个接口。
14. 一个类实现了某个接口,那么该类必须要实现接口中声明的所有方法。如果该类是个抽象类,那么就无需实现接口中的方法了。
15. Java是单继承的,也就是说某个类只能有唯一一个父类;一个类可以实现多个接口,多个接口之间使用逗号分隔。
16. 多态:所谓多态,就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。关于接口与实现接口的类之间的强制类型转换方式与父类和子类之间的强制类型转换方式完全一样。
17. static关键字:可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类(后面的课程讲)
18. static修饰属性: 无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化。如果一个成员变量是static的,那么我们可以通过类名.成员变量名的方式来使用它(推荐使用这种方式)。
19. static修饰方法:static修饰的方法叫做静态方法。对于静态方法来说,可以使用类名.方法名的方式来访问。
20. 静态方法只能继承,不能重写(Override)。子类不能重写父类的静态方法,只能继承或者是隐藏。  在继承中不能重写父类的静态方法。
21. final关键字:final可以修饰属性、方法、类。
22. final修饰类: 当一个类被final所修饰时,表示该类是一个终态类,即不能被继承
23. final修饰方法:当一个方法被final所修饰时, 表示该方法是一个终态方法,即不能被重写(Override)
24. final修饰属性:当一个属性被final所修饰时, 表示该属性不能被改写
25. 当final修饰一个原生数据类型时,表示该原生数据类型的值不能发生变化(比如说不能从10变为20);如果final修饰一个引用类型时,表示该引用类型不能再指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。
26. 对于final类型成员变量,一般来说有两种赋初值方式:
a) 在声明final类型的成员变量时就赋上初值
b) 在声明final类型的成员变量时不赋初值,但在类的所有构造方法中都为其赋上初值。
27. static代码块:静态代码块。静态代码块的作用也是完成一些初始化工作。 首先执行静态代码块,然后执行构造方法 。静态代码块在类被加载的时候执行,而构造方法是在生成对象的时候执行;要想调用某个类来生成对象,首先需要将类加载到Java虚拟机上(JVM),然后由JVM加载这个类来生成对象。
28. 类的静态代码块只会执行一次,是在类被加载的时候执行的,因为每个类只会被加载一次,所以静态代码块也只会被执行一次;而构造方法则不然,每次生成一个对象的时候都会调用类的构造方法,所以new一次就会调用构造方法一次。
29. 如果继承体系中既有构造方法,又有静态代码块,那么首先执行最顶层的类的静态代码块,一直执行到最底层类的静态代码块,然后再去执行最顶层类的构造方法,一直执行到最底层类的构造方法。注意:静态代码块只会执行一次
30. 不能在静态方法中访问非静态成员变量 ;可以在静态方法中访问静态的成员变量。可以在非静态方法中访问静态的成员变量。
31. 总结:静态的方法只能访问静态的变量;非静态的方法可以访问一切变量。
32. 不能在静态方法中使用this关键字。 因为在访问时可能不存在具体对象,所以不能用this

猜你喜欢

转载自blog.csdn.net/pzq915981048/article/details/80628183