封装,就是隐藏对象的属性和实现细节,仅对外提供公共访问的方式
封装有什么好处?
隐藏了自身的属性以及实现细节,只提供公共的访问方式给别人,这样也就提高了安全性
也提高了代码的复用性(把要重复做的事情封装在一起做)
封装的原则是:将不需要对外开放的内容都隐藏起来,只给别人一个方法来调用自己
private关键字:
是一个权限修饰符,可以用来修饰成员变量和成员方法,被它修饰以后就只能在本类被访问
this关键字:
代表当前对象的引用,用它可以来区分一个重名的成员变量和局部变量
构造方法:
用来给对象的属性进行初始化
构造方法名与类名必须是一样的,构造方法是没有返回值类型的(连void都没有)
字面上我们不用写return语句,因为系统会默认给构造方法一个return语句,样式为return;
在一个基本类中,可以有多个构造方法,这就构成了方法重载
重载:发生在同一个类中,方法名字都一样,参数列表不一样(包括个数,类型,顺序),与返回值类型无关
创建对象时,如果这个基本类没有给出构造方法,系统就会默认给出一个无参构造器
但是,如果这个类有一个或多个有参构造器时,系统就不会给你一个无参构造器了,此时必须自己写一个无参构造器
创建一个对象在内存中是怎么进行的:
假设有一个基本类Teacher,并且带有一个无参构造器
创建Teacher类的对象就是: Teacher t = new Teacher();
这句话在内存中是这么运行的:
1.Teacher.class加载进内存中的方法区
2.声明一个Teacher类型的引用t
3.在堆区创建Teacher对象
4.给这个对象进行默认初始化
5.Teacher类的构造方法进栈,利用构造方法对该对象的属性进行显示初始化,初始化以后,构造方法弹栈
6.将这个对象的地址值赋给引用s,引用s通过这个地址就可以访问到这个对象了
static关键字:(与类有关的)
从字面上看,意思就是静态的,这个类是随着类的加载而加载的,并且在对象创建之前就已经存在了(因为类优先于对象存在,没有类怎么去创建该类对象);
静态资源会被这个类的所有对象共享,静态的方法可以通过(类名.静态方法名)来调用
静态方法:static修饰的方法
静态方法中是没有 this关键字的
因为静态是随着类而加载的,而this是随着对象创建而存在的,静态是优先于对象存在的
静态方法只能访问静态成员(静态成员变量以及静态成员方法)
而非静态方法既可以访问静态成员又可以访问非静态成员
静态变量:static修饰变量,又叫类变量
静态变量与成员变量的区别?
两者所属不同:静态变量属于类;但是成员变量属于对象;所以静态变量又叫类变量,成员变量又叫实例变量或者对象变量
两者在内存中的位置不同:静态变量存在于方法区里面的静态区 ; 而成员变量存在于堆区
两者出现时间不同:静态变量随着类加载而加载,随着类消失而消失;成员变量随着对象的创建而存在,随着对象消失而消失
两者调用方法不同:静态变量可以用类名或者对象名来调用;成员变量只能通过对象名调用
代码块 :
含义:在java中,用{ }括起来的代码就是代码块
分类:根据代码块的位置和声明不同,可以分为:局部代码块,构造代码块,静态代码块,同步代码块
局部代码块:{ }表示
在方法中出现,用来限定变量的生命周期,可以及早释放里面的变量,提高内存的利用率
构造代码块:{ }表示
也叫初始化块,在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行,也就是说:没创建一次对象都会执行一次,并且还优先于构造函数执行
静态代码块 static { }表示
在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。一般用于加载驱动,它还优先于主方法执行
同步代码块:后续线程会重点讲