目录
一.static关键字:
1.static修饰的属性
称为类属性,类变量,所有对象共享
对于country属性来说,有很多对象的属性都一样,可以用static修饰这个属性,该属性就称为静态属性
当一个实例变量被static关键词修饰 ,他就表示类的属性,该类的所有的对象共享这个属性,每个对象的属性值也一样,static修饰的属性在jvm方法区中存储。
方法区存储类中的所有方法,常量,静态变量。
*方法内部不可以定义一个static变量,因为方法中定义的变量全是局部变量,局部变量都在栈中存储,不可能定义了一个既在栈中也在方法区中存储的变量(编译错误)
static修饰的属性,直接通过类名称就可以访问,无需通过对象来访问
final与static
final修饰的age称为成员常量,在堆中存储
static修饰的country称为静态变量,在方法区中存储
类中定义常量,一般使用全局常量,通常用static和final共同修饰 ,定义时必须赋值。
常量的命名规则:所有单词全部大写,多个单词使用下划线分隔
static final String BEST_SCHOOL ="清华大学"
总结:
static变量称为类属性 ,在方法区中存储,该类的所有对象共享此变量
类中定义常量,一般使用全局常量,通常用static和final共同修饰 ,定义时必须赋值。
要使用类属性,通常直接通过类名称.属性名称 不推荐使用对象调用类属性,不规范。
2.static修饰方法
称为静态方法
static修饰的方法也是通过类的名称直接使用方法,没有对象就能访问。
主方法为程序的入口,如果主方法是个成员方法,需要通过对象调用,
主方法要能调用起来,使用静态方法直接调用,无需产生对象。
在静态方法中只能调用静态方法或者静态属性,static家族之间可以互相调用。不能直接调用成员方法和成员属性,成员方法和成员属性必须通过对象来调用。
成员方法中既可以调用成员方法,也可以调用静态方法(此时已经产生对象,一定可以访问静态域)
3.static不能直接修饰一个外部类(编译出错)
二.this关键字
this表示当前对象的引用
1.调用当前对象的成员变量
2.调用当前对象的方法
调用普通成员方法
构造方法的互相调用(可以减少重复的代码)
示例代码:
若不同参数的构造方法之间出现了重复的调用,
可以使用this(参数)调用其他的构造方法
this调用其他的构造方法时必须放在当前构造方法的首行
this调用构造方法不能成环,上例如果在将this(name)引入第一个构造函数,会形成第一二个构造函数之间的死循环。
3.表示当前对象的引用
当前的属性或者方法是那个对象调用的,this就代指这个对象。
当前是per调用print这个方法,所以this就代指per这个对象
三. 封装
封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的,只要知道如何使用就行了,这样就降低了类使用者的学习和使用成本,从而降低了复杂程度。
封装使类具有保护性和易用性
在Java中,所谓的权限修饰符是指修饰的属性,方法,类的可见范围有多大;
一共有四种权限修饰符,可见范围从小到大依次为
private<default(不用写什么权限都没有就为default)<protect<public(公开的)
private(私有的)
被private修饰的属性和方法,只在当前类的内部可见。对外部完全隐藏。
如果主方法存在与类的内部,private修饰的属性在主方法内部是可见
想在类的外部使用这些私有属性 就要使用类提供的getter和setter
getter用于取值 setter用于修改值
四.构造方法
构造方法是类中非常特殊的一类方法,使用关键词new实例化对象时实际上就就是调用该类的构造方法
使用关键词new实例化对象时,大致分为以下两步
1.为对象在堆中分配空间
2.调用对象的构造方法为对象成员变量赋值
构造方法语法规则
1.方法名称与类名称完全相同
2.构造方法没有返回值声明
3.一个类中至少存在一个构造方法,若没有明确显示定义,编译器会生成一个默认的无参构造。
public test1作为类的无参构造方法
当类中自定义了构造方法,默认的构造方法就不再生成
构造方法可以重载,构造方法是为了给类中的变量赋值的,此时的重载只可能是参数的个数不同。
五. 代码块
指的就是使用{}括起来的一段代码,称为代码块。
根据定义代码块的位置以及关键字的不同分为四种代码块
1.普通代码块
定义在方法中,使用{}括起来的代码块
2.成员代码块
定义在类里面,使用{}括起来的代码块,也叫构造快
构造块:直接定义在类里,不加任何的修饰的代码块,优先于构造方法执行,有几个对象就调用几次。
3.静态代码块
定义在类中,使用static修饰的代码块,在类加载时执行一次
主类中的静态代码块优先于主方法执行。JVM要执行主方法,首先得加载主类,主类一加载,静态块就执行了。
*静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。
*静态代码块执行完毕后, 实例代码块(构造块)执行,再然后是构造函数执行。
4.同步代码块
指的是被Java中Synchronized关键词修饰的代码块