1.面向对象——分类思维模式
2.面向过程——步骤式解决问题,不易修改
3.宏观——面向对象 微观——面向过程
4.类与对象关系:类是对象的模板,对象是类的实例。
5.同个类的每个对象共享其方法
6Java除基本变量类型外的类型,都称为引用类型。
7内存分析
7.1.栈(先进后出,自动分配不连续的空间)
放置:局部变量(形参也是局部变量)
7.2.堆(
先进先出,不连续)
放置:new出来的对象
8.重载在于方法形参的个数,类型,排序的不同
8.1 只有返回值不同不构成方法的重载 。
8.2 返回值不同且形参的个数,类型,排序的不同构成方法重载 。
9.this关键字
用法
9.1处理方法中成员变量和参数重名的情况
9.2调用重载构造方法,避免相同的初始化代码,只能在构造方法(在类的普通函数中不能用this(参数)调用重载构造方法)中用,并且必须位于构造方法的第一句。
注意
9.3this不能用于static方法
9.4类中 “方法(类 this)” 中 “类 this()” 无意义,相当于 “方法()”。
10.static关键字,静态成员变量
10.1被类的所以实例共享(多个对象调用要排队调用),类载入是显示初始化(没创建对象时,就在内存空间了)
10.2可以通过 类名. 或 实例对象. 调用
10.3静态方法中不能访问非静态成员
10.4成员方法里不能定义静态变量
11.Java中只有单继承,接口可以多继承
12.Java修饰符限制范围(对类里的静态成员同样起作用)
12.1类名的限制修饰符只有,public,default (即缺省,什么也不写)。
12.3接口的限制修饰符只有(private)不能用,在类中写接口可以用protected
访问级别 | 访问控制修饰符 | 同类 | 同包 | 子类 | 不同的包 |
公开 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | (继承) |
默认 | default | √ | √ | -- | -- |
私有 | private | √ | -- | -- | -- |
13.方法重写
13.1 .在子类中可以根据需要对从基类中继承来的方法进行重写。
13.2重写方法不能使用比被重写方法更严格的访问权限。
13.2可调用重写的方法,也可调用父类没重写的方法不过要用super关键字。
14.super是指向父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。
15.继承中的构造方法
15.1子类的构造方法中必须调用父类的构造方法
15.2子类可以在构造方法时用super调用父类的构造方法
(2)如果调用super,必须写在子类构造方法的第一行。
15.3如果子类的构造方法中没有显示调用基类的构造方法,则系统默认调用基类无参数的构造方法
15.4如果子类构造方法中既没有显式调用基类的构造方法,而基类(基类中定义了有参构造函数,但没自行添加无参构造函数)中又没有无参的构造方法,则编译器出错
15.4子类的普通方法用super调用父类方法,但不能调用父类构造方法
16. Object类是所有Java类的根基(父)类
16.1 Object类中定义有public String toString()方法
16.2Object类中定义有:public boolean equals(Object obj)方法
16.3如String,Date等类创建重写了equals方法,x.equals(y)只要x,,y两引用对象(可以是不同实例对象)同属一个类且属性值相等,即判断相等。
16.4String重写了toString方法的,直接输出它的值,而不是地址。
17.(扩展知识)System.out.println与System.err.println的区别https://blog.youkuaiyun.com/u014753393/article/details/49259215
18.1在进行String与其它类型数据的连接操作时(如:System.out.println(“info”+person)),将自动调用该对象类的 toString()方法
18.2+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会将另一个操作数(与18.1同理)转换成字符串再连接。
19.final修饰的变量(成员变量,局部变量)不能被改变。
19.1final修饰的方法不能被重写。
19.2 fianl修饰的类不能被继承
20.对象转型
20.1一个基类的引用变量可以指向其子类,可以将这个基类引用再强转成子类引用,
20.2满足20.1时,一个基类不可以访问子类特有的变量和成员。可以将这个基类引用再强转成子类引用,再访问。
20.3可以使用 引用变量 instanceof 类名 来判断该引用变量所指对象是否属于该类或该类的子类。
20.4子类对象可以当做基类(父类)的对象来使用,称为向上转型,反之称为向下转型。
20.5子类引用不能指向父类引用,但父类引用指向子类引用的可以用强转为子类引用再赋给子类引用(编译无错)
21.抽象类
21.1关键字为abstract
21.2含抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。
21.3抽象类不能被实例化
21.4抽象方法只需要声明,不需要实现。
22.接口
22.1定义interface ;继承 implements
22.2特殊的抽象类,方法全为抽象方法。
22.3接口不能实例化,但可以声明引用变量类型
22.3接口中只能包含静态常量,和抽象方法。
22.4常量必然是public static final。不加这些修饰符也是这样。
22.5方法必然是public abstract。不加修饰符,也是这样。
22.6 一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。
22.7接口完全支持多继承。和类的继承类似,子接口扩展某个父接口,将会获得父接口中所定义的一切。
22.8接口引用指向实现类对象,方便扩展(想增添或修改其他实现类对象,省代码,方便扩展)
23一个同时继承抽象类和接口的类,如果抽象类中抽象方法与接口中方法同名,类将无法实现这个同名方法
我在了解静态模块24静态块
回顾1章11.如果源文件有多个类,只能有一个类是public类;如果有一个类是public类,那么源文件的名字必须与这个类名字完全相同,如果没有public类,源文件的名字只要和某个类的名字相同。
public class E{
static{
System.out.println("我是E的静态块");
}
static void f(){
System.out.println("我是E中的静态函数");
}
public static void main(String[] args) {
A a=new A();
System.out.println("我在了解静态模块");
}
}
class A {
static {
System.out.println("我是A中的静态块");
}
static void f(){
System.out.println("我是A中的静态函数");
}
}
结果
我是E的静态块
我是A中的静态块
24以下代码共创建了几个对象?
String s1=new String("hello");
String s2=new String("hello");
String s3=s1;
String s4=s2;
[答案]
2个 3个//()里的“hello”隐藏声明了个对象,new创建一个对象来存“hello”的地址,
=地址传给sl引用