6-1 关键字 :static
static 关键字的使用:
1、static:静态的
2、static 可以用来修饰:属性、方法、代码块、内部类
3、使用 static 来修饰属性: 静态变量
3.1属性: 按是否使用 static 又分为静态属性和非静态属性(实例变量)
实例变量: 我们创建了类的多个对象,每个对象独立拥有一套类中的实例变量(非静态属性)
静态变量:类的多个对象共享同一个 静态变量; 意味着:修改某一个对象的静态变量后,其他对象调用也都是修改后的
3.2 static 修饰属性的其他说明:
1、静态变量随着类的加载而加载
;可以通过“类.静态变量”的方式进行调用
2、静态变量的加载早于对象的创建
3、由于类只会加载一次,则静态变量在内存中也只会存一份;存在方法区的静态域中
4、 类变量 实例变量
类 yeah no
对象 yeah yeah
3.3 静态属性举例: System.out; Math.PI;
4、使用 static 来修饰方法:静态方法
a.随着类的加载而加载,可以通过“类.静态方法”的方式进行调用
b. 静态方法 非静态方法
类 yeah no
对象 yeah yeah
c.静态方法中只能调用静态的方法或属性
非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性
5、static 注意点:
5.1 在静态的方法内,不能使用 this 关键字、super 关键字
5.2 关于静态属性和静态方法的使用,我们都应该从生命周期的角度去理解
6、开发中,如何确定一个属性是否要声明为 static 的
>属性是可以被 多个对象所 共享的,不会随着对象的不同而不同的
>类中常量也常常声明为 static
开发中,如何确定一个方法是否要声明为 static 的
>操作静态属性的方法 通常设置为静态的 (static)
>工具类中的方法 习惯上 声明为静态方法 (static)
单例设计模式:采用一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且只提供一个取得其对象实例的方法
单例模式的 实现 方式:
一、饿汉式 (上来就创建好类的对象)
public class SingletonTest {
public static void main(String[] args) {
Bank bank1=Bank.getInstance();
Bank bank2=Bank.getInstance();
System.out.println(bank1==bank2); //证明这两个 bank为同一个对象
}
}
//饿汉式
class Bank{
//1、私有化类的构造器
private Bank(){
}
//2、内部创建类的对象
//4、要求此对象也必须声明为静态的
private static Bank instance= new Bank();
//3、提供公共的静态的方法,返回类的对象
public static Bank getInstance(){
return instance;
}
}
二、懒汉式(类的对象用的时候再造)
package com.jackson.java2;
public class SingletonTest2 {
public static void main(String[] args) {
Order order1=Order.getInstance();
Order order2=Order.getInstance();
System.out.println(order1==order2); //证明两个为同一个对象
}
}
//懒汉式
class Order{
//1、私有化类的构造器
private Order(){
}
//2、声明当前类对象,没有初始化
//4、此对象也必须声明为 static
private static Order instance=null;
//3、声明 public 的 static 的返回当前类对象的方法
public static Order getInstance(){
if(instance==null){ //只创建一个对象
instance=new Order();
}
return instance;
}
}
三、区分饿汉式和 懒汉式
饿汉式:
坏处:对象加载时间过长
好处:饿汉式式线程安全的
懒汉式:
好处:延迟对象的创建
坏处:目前的写法的坏处:线程不安全----->到多线程内容的时候,再修改
6-2 Main () 方法的理解
main()方法的使用说明:
1、main()方法作为程序的入口
2、main()方法也是一个普通的静态方法
3、main()方法也可以 作为我们与控制台交互的方式
6-3 类的成员之四: 代码块 (或初始化块)
一、代码块作用:用来初始化类、对象
二、代码块如果有修饰的话,只能用 static
三、分类: 静态代码块 vs 非静态代码块
静态代码块
>内部可以有输出语句
>随着类的加载而执行,并且只执行一次
>作用:初始化类的一些信息
>如果一个类中定义了多个静态代码块,,则按声明的先后顺序执行
>静态代码块的执行要有优先于非静态代码块的执行
>静态代码块内只能调用静态的属性或方法,不能调用非静态的结构
非静态代码块
>内部可以有输出语句
>随着对象的创建而执行
>每创建一个对象,就执行一次非静态代码块
>作用:可以在创建对象时,对对象的属性等进行初始化
>非静态代码块可以调用静态的与非静态的结构
总结:由父及子,静态先行
对属性可以赋值的位置:
a.默认初始化
b.显式初始化
c.构造器中初始化
d.有了对象以后,可以通过“对象.属性”或者“对象.方法”的方式,进行赋值
e.在代码块中赋值
执行的先后顺序:a-b/e(这俩得看谁先写了 谁先执行)-c-d
6-4 关键字: final
final:最终的
1、final 可以用来修饰的结构:类、方法、变量
2、final 用来修饰一个类: 此类不能被其他类所继承(通俗一点的话:绝育了,没子类)
比如:String 类、System 类、StringBuffer 类等
3、final 修饰一个方法: 方法不能被重写了
4、final 用来修饰变量: 此时的变量就称为“常量”
4.1、final 修饰属性:可以考虑赋值的位置有:显式初始化、代码块中赋值(初始化)、构造器中初始化
4.2、final 修饰局部变量:尤其是 final 用来修饰行参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参,一旦赋值之后,只能在方法体内使用此形参,不能进行重新赋值
static final :用来修饰属性: 全局常量
总结
最近摆了很多天,作息有点日夜颠倒,浪费了大量时间,同时也落下来了大量的工作量,最近一周得要好好努力!!!
今日鸡汤
用每天的小小胜利,来为更大的胜利铺路
共勉!!!