2.面向对象__参数传递_重载_成员变量局部变量_构造器_静态初始化块

面向对象:
经过类来直接描述现实世界中客观存在的事物
基本特征:封装,继承,多态
在Java语言中,除了8个基本数据类型值以外,一切都是对象。
初始化块总在构造器执行以前被调用,静态初始化块用于初始化类 。

构造器是一个类建立对象的根本途径,若是一个类没有构造器,这个类一般没法建立实例。若是类没有编写构造器,系统会为该类提供一个默认的构造器。一旦程序员为一个类提供了构造器,系统将再也不为该类提供构造器。
构造器之间调用只能用this调用,而且调用必须做为构造器执行体的第一条语句。

参数传递机制
Java参数传递方式只有一种:
值传递
,将实际参数值的副本传入方法内,
参数自己不会受到任何影响

形参个数可变方法:

'''java

public void mainMethod() {
this.test(new String[]{"111", "222"});
}

public void test(String... names) {
for (String name : names) {
System.out.println(name);
}
}

'''程序员

方法可接受任意多个参数值,多个参数值被当成数组传入。可变形参只能放在方法参数最后一个,因此一个方法最多只能有一个可变形参。

方法重载
同一个类里定义多个同名方法,
形参列表不一样便可

成员变量和局部变量

成员变量:(
不需显示初始化,在类的准备阶段或建立类实例的时候进行默认初始化
  • 实例变量
  • 类成员变量(static修饰)
局部变量:(
除了形参外都必须显示初始化
  • 方法形参(方法签名中定义的变量)
  • 方法内局部变量(方法内部定义的变量)
  • 代码块局部变量(在代码块中定义的局部变量)
形参初始化:
当在类或实例对象调用方法时,系统会在该方法栈区内为全部的形参分配内存空间,并将实参值赋给形参。
成员变量初始化及内存中运行机制
class Person{
public String name;
public static int age;
}

class PersonTest{
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person();
p1.name = "zhangsan";
}
}
1. 第一次使用Person,先加载Person.class类并进行初始化,系统会在堆中为该类分配空间,并建立Class对象
2.建立实例对象
Person p1 = new Person()
,实例变量 name在建立实例时分配内存空间并初始化值的
p1.name = "zhangsan"


局部变量的初始化和内存中的运行机制
局部变量定义后必须通过显示初始化后才能使用,定义局部变量后,系统并未为这个变量分配内存空间,直到等到程序为这个变量赋初始值时,系统才会为局部变量分配内存,并将初始化值保存早这块内存中
局部变量不属于任何类或实例,它老是保存在方法的栈内存中
栈内存中的变量无须系统垃圾回收,每每随方法或代码块的运行结束而结束,局部变量的做用域从初始化该变量开始,直到方法或代码块运行结束。由于局部变量只保存基本类型的值或对象引用,所以局部变量所占的内存比较小。
封装

将对象的成员变量和实现细节隐藏起来,不容许外部直接访问。
将方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操做
访问控制级别 由小到大: private --> default --> protected --> public

private
default
protected
public
同一个类中
同一个包中

子类中


全局范围



Java默认为全部源文件导入java.lang包下的全部类,因此在Java程序中使用String,System类时都无须使用import语句来导入这些类。

继承
每一个子类只有一个直接父类。
方法重写要遵循“两同两小一大”规则
两同:方法名和形参列表相同
两小:返回值类型,子类比父类更小或相等,抛出异常,子类比父类更小或相等
一大:方法访问权限,子类的访问权限应比父类的访问权限大或相等

建立子类对象时,不只会为子类对象的实例变量分配内存,也会为从
父类继承的实例变量分配内存

当调用子类构造器初始化子类对象时,父类构造器总会在子类构造器以前执行,以此类推。建立任何Java对象,
最早执行的老是java.lang.Object类的构造器

建立任何对象老是
从该类所在继承树最顶层类的构造器开始执行
,而后依次向下执行,最后才执行本类的构造器。

多态
父类引用指向子类对象。在进行对象转换前,使用
instanceof 进行判断来避免异常
初始化块
一个类里能够有多个初始化块,前面定义的初始化块先执行,后面定义的初始化块后执行。
初始化块的修饰符只能是static,使用static修饰的初始化块被称为静态初始化块。
建立Java对象时,老是先调用初始化块,在执行构造器方法以前执行。
public class Test{
{
a = 6
;
}
int a
= 9
;
public static void main(String[] args){
System.out.println(new Test().a); // 9
}
}
int a = 9 ;比 代码块a=6后执行。
Java在建立对象时,
系统会
先为该对象的全部
实例变量
分配内存
接着对
这些实例变量进行初始化,顺序为: 初始化块或声明时指定的初始值(按源代码中出现顺序执行),再执行构造器里指定的初始值。
注意:实际上初始化块只是一个假象,编译后的class类中,初始化块的代码会被编译到每一个构造器中,且位于构造器的全部代码以前。

静态初始化块
JVM第一次主动使用某个类时,在类
准备阶段
为全部
静态成员变量分配内存空间
,在
初始化阶段
初始化成员变量,静态代码块与声明初始化按照源代码顺序执行
相关文章
相关标签/搜索