1面向对象的三条主线
a:类及其类的构成成分:属性,方法,构造器,代码块,内部类
b:面向对象编程的特征:封装性,继承性,多态性(抽象性)
c:其它的关键字:this import package static final abstract ............
2.类组成成分:
1.属性:(成员变量 Field)
2.方法:(成员方法,函数,Method)
3.构造器(constructor 构造方法)
类的属性:成员变量vs局部变量
a;相同点:
a定义的格式: 变量类型 变量名 =初始化值;b都有作用域
不同点:
1.声明的位置不同:a成员变量:类的里边,方法的外边;b局部变量 :方法的里边,方法的形参部分,代码块中
2.成员变量的修饰符有四个:public private protect 缺省
局部变量没有专门的修饰符,他和方法的修饰符保持一致
3.初始化值:一定会有初始化值
成员变量在声明的时候,如果不显示初始化值,那么不同的类型他一定会默认不同的初始化值
short byyte int long====>0
double float=====>0.0
char====>空格
boolean====>false
引用类型=====>null
局部变量:声明的时候必须显示初始化的值(局部变量没有默认的初始化值)
4.二者在内存中存放的位置不同:成员变量在堆内存 局部变量在栈内存
变量的总结
1.按照数据类型的划分:基本数据类型vs引用数据类型
2.按照声明的位置不同:成员变量vs局部变量
2.方法
2类初始化的内存解析
a:内存的划分结构:
栈内存:局部变量 对象的引用名 就是这个p对象名 数组的引用名 (Person p=new Person())
堆内存:成员变量 new出来的“东西“
方法区:含字符串常量
静态域:声明为static的常量
3.方法重载和方法重写
a:方法重载的条件:在一个类中,方法名相同,参数列表不同(1参数的类型不同,2参数的个数),方法重载和返回值无关!'
b:方法重写override:子类的方法和父类的一模一样,连返回值都一样.
4.匿名类的对象:创建的类都是匿名的
a:当考虑到我们只需要调用一次类的对象的时候,由于没有对象名指向堆内存 ,没有办法引用,之后垃圾回收器进行回收将把可以考虑使用匿名的方式来创建类。
b:创建的匿名类的对象只能调用一次!
5 :可变个数形参的方法:
a:格式:对于放法的形参:数据类型...形参名
b:可变个数形参的方法与同名的方法构成方法的重载
c:可变个数形参的方法在调用的时候,参数的个数从0开始,到无穷都可以
d:使用可变个数形参的方法是和方法使用数组的形参是一致的;
e:若方法存在可变个数的形参,那么可变个数的形参一定是放在参数的最后,(int...num,int i),当如果传参数传一个1的话,那么程序就不知道这个1到底是可变参数传的1 还是i传的1 ,所以可变参数要放在末尾
f:在一个方法中,最多声明一个可变参数。(int...num,String..str)如果有一个或者多个可变形参的话,那么就会造成和e同等类类型的错误。
例子:当利用可变参数的方法求和时的代码
6.方法参数的传递(重点)
形参:方法声明是,小括号内的参数
实参:调用方法的时候,实际传入参数的值;
参数传递的规律:java中参数传递都遵循值传递机制
a:形参是基本数据类型:将实参的值传递给形参的基本输入类型的变量(只是将值传递给了形参,形参和实参即使都同是i,j一个名字)
b:形参是引用数据类型:将实参的引用类型变量的值(对应的堆空间对象实体的地址值)传递给形参的引用类型变量
7.四大权限修饰符
8.this关键字
1.使用在类中,可以用来修饰属性,方法,构造器
2.表示当前对象或者当前正在创造的对象
3.当形参和成员变量的名字一致时,如果在方法内部需要使用成员变量,必须添加this来表明该变量是类成员
4.在任意的方法内,如果使用当前类的成员变量或成员方法可以在前边添加this,来增强程序的阅读性。
5. a在构造器中使用this(形参列表)要声明在构造器的首行!
b类中若存在n个构造器,那么最多有n-1个构造器中使用了this!
b类中若存在n个构造器,那么最多有n-1个构造器中使用了this!