static关键字(静态修饰符)
被static修饰的成员变量和成员方法从属于类,可以通过类名直接调用。
静态变量的用法:若某个类的所有对象都共享一个成员变量,那么将共享的内容设为静态,这样该类的所有对象都会共享类的静态成员变量。如下图所示
静态变量注意点:
随着类的加载而加载,只加载一次。 ??被所有对象共享
对象内可以更改静态变量的值,类的一个对象更改了静态变量,该类的其他变量再访问时就是更改后的值了。
内存图
静态方法注意点:
静态方法不允许访问非静态内容,若要访问,先创建对象,再通过对象访问。
静态方法中不能使用super和this,super和this是对象相关的内容。
以上两个特点是由于静态内容的加载是在对象加载之前进行而导致的。
静态变量与成员变量的四方面区别:所属不同 调用方式不同 ?存放位置不同 生命周期不同
final关键字:
final修饰的类不可以被继承,但是可以继承其他类。(不希望该类被扩展)
final修饰的方法不可以被重写。子类可以给重写的方法加上final修饰(不允许它的子类去重写该方法)
final修饰的基本类型变量是常量,必须赋值,只可赋值一次。
final修饰引用类型变量,引用数据类型的地址值不可以改变,地址内的对象内容可以改变。
代码块:
局部代码块 在方法中,限定变量的生命周期。
局部代码块内与外部变量重名时,局部变量优先级高。(这里不对,c中可以。Java中不可)
构造代码块 在类中成员位置?先于构造方法执行,构造代码块用来执行,所有对象都需要的 ???初始化动作,每创建一个对象,就会执行一次构造代码块
???使用场景:类有多个构造方法,每个构造方法执行时都要执行相同的代码,
???这段代码就放到构造代码块内。
静态代码块 定义在类的成员位置,使用static修饰代码块它优先于主方法执行、优先于构造代码块执行,只执行一次。常用于给静态变量初始化。
同步代码块 ?多线程时使用
匿名对象:不将对象的地址值赋给变量,只使用一次。
使用场景:方法参数。new出的对象仅仅是为了传给方法作为参数,此时无需保存这个对象 ??的地址,直接在方法参数处new即可。
方法返回值。使用场景与上相同。
思考:匿名对象用完一次就销毁还是等方法执行完毕后销毁。问老师(不随着方法的销毁而销毁,垃圾回收机制检测到不再引用时就销毁。)
在恰当地方使用匿名对象可增加代码的规范性。
包与权限修饰符:
包本质就是文件夹,多级包间用.分割。顶级包命名规范通常是公司域名反写,包名全小写。
package语句一个java文件只可有一个,写在首行,注释不算。
类与类之间的访问:同包下直接访问,不同包下import导包。不同包下的同名类,通过全 ??类名区分。
权限修饰符: public ?protected(不可修饰类) ?默认(啥也不写) ?private(不可修饰类)
范围 | public | protected | default | private |
同一类中 | YES | YES | YES | YES |
同一包中(子类与无关类) | YES | YES | YES | NO |
不同包的子类 | YES | YES | NO | NO |
不同包中的无关类 | YES | NO | NO | NO |
面向对象简单训练:
酒店案例
某酒店的员工种类包括:
入职的员工需要记录个人信息包括:
所有员工都有自己的工作要做,各岗位工作内容包括:
酒店开设VIP服务,酒店的厨师与服务员可以提供VIP服务。(厨师做菜加量、服务员给顾客倒酒)。
要求大家完成的需求包括:
为每个员工属性赋值。
厨师与服务员要实现VIP服务功能。
打印每个员工的信息。
调用每个员工的所有功能。
类设计的UML类图如下: