写在前言 : 学习资源B站是最好的也是很全面。
1 、现在出去面试,面试官老是会问你一句话Java 怎么样?
不管是大数据岗位还是数据库都会问一句。 回来痛下决心,决定探索下这门语言的精髓,大数据很多框架也都是Java 写的,的确懂一门语言,比较稳妥。路也宽敞!!!不然就和吃饭没筷子,那么尴尬。把每天学习到的 Java知识分享到这里会。直到能自己写个复杂一点Dome得出来。
2、为了监督自己探索这门语言的动力与决心。特此这段话放到前面!!!
3、挑战下自己 到底是笨 还是学不会,还是不想学。 好运
一、 概念:
1、static :静态的
2、static 可以用来修饰:属性、方法、代码块、内部类
3、使用static 修饰属性:静态变量
3.1、属性:按是否使用static 修饰,又分为:静态属性VS 非静态属性(实例变量)
实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值被修改。
静态变量:我们创建了类的多个对象,多个对象共享一个静态变量,当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。
3.2、static 修饰属性的其他说明:
①静态变量随着类的加载而加载。可以通过类.静态变量的方式进行调用。
②静态变量的加载早于对象的创建。
③由于类只会加载一次,则静态变量在内存中只存在一份。存在方法的静态域中。
4、使用static 修饰方法:静态方法
①:随着类的加载而加载.可以通过 “类.静态方法” 的方式进行调用。
②:类.静态方法 、对象. 静态方法 、对象.非静态方法
类.非静态方法是无法调用的。
③:静态方法中,只能调用静态的方法或者属性
非静态方法中,既可以调用非静态方法或属性:也可以调用静态的方法或属性。
5、static 使用注意点:
在静态方法内,不能使用this 关键字、super 关键字、
6、开发中如何确定一个属性是否要声明为static的?
属性是可以被多个对象所共享的,不会随着对象的不同而不同的。
7、开发中,如何确定一个方法是否要声明为static的?
1、操作静态属性的方法,通常设置为static的。
2、工具类中的方法,习惯上设置为static的。比如:math、Arrays…
二、栗子:
package com.work_ZQ3;
/** 单例模式
- 饿汉式
- 线程安全的、
*/
public class SingletonTest1 {
public static void main(String[] args) {
Bank b1 = Bank.getinstance();
Bank b2 = Bank.getinstance();
System.out.println(b1==b2);
}
}
class Bank{
// 1、私有化类的构造器
private Bank(){
}
//2、创建私有化类的对象
private static Bank instance = new Bank();
//3、提供公共的静态方法,返回类的对象
public static Bank getinstance(){
return instance;
}
}
package com.work_ZQ3;
/**单例模式:
-
懒汉式
*/
public class SingletonTest2 {
public static void main(String[] args) {
Order order1=Order.getInstance();
Order order2=Order.getInstance();
System.out.println(order1==order2); // true :比较地址值
}
}
class Order{
//1、私有化类的构造器
private Order(){}
//2、声明当前类对象、没有初始化
private static Order instance = null;
//3、声明为public、static 当前类对象的方法
public static Order getInstance(){
if(instance == null){
instance = new Order();
}
return instance;
}
}
单例设计模式—应用场景
三:类中代码块结构的使用:
1、代码块的作用:用来初始化类、对象
2、代码块如果有修饰的话,只能使用static修饰
3、分类:静态代码块VS 非静态代码块
4、静态代码块:
> 内部可以有输出语句
> 随着类的加载而执行,而且只执行一次。
>作用:初始化类的信息
> 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行。
>静态代码块的执行要优先于非静态代码块的执行。
>静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构。
5、非静态代码块
1、内部可以有输出语句
2、随着对象的创建而执行
3、每创建一个对象,就执行一次非静态代码块
作用:可以在创建对象时,对对象的属性等进行初始化。
4、如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行。
5、非静态代码块内可以调用静态的属性,静态的方法,或非静态的属性、非静态的方法。
6、对属性可以赋值的位置:
1、默认初始化
2、显示初始化 / 5、在代码块中执行。
3、构造器中初始化
4、有了对象以后,可以通过“对象.属性”或“对象.方法”方式。进行赋值。
执行的顺序:1–>2/5–>3–>4
四、总结:
/**
-
它们之间的区别主要如下:
*静态代码块在虚拟机加载类的时候就执行(只执行一次),而非静态代码块每一次new的时候都会执行一次。
*由于静态代码块在虚拟机加载类的时候就执行,因此在非静态代码块在静态代码块后执行 -
静态代码块是以static修饰的代码块,反之没有用static修饰的代码块为非静态代码块,如下所示:
-
静态代码块不能放在main 方法中,会编译错误。。。。。
*/
package com.work_ZQ2;
class Person2{
Person2 p = new Person2();static {
System.out.println(“我是静态代码块被执行。。。。。。。。。”);
}{
System.out.println(“我是非静态代码块。。。。。。。。。”);}
}
public class MyTest extends Person2 {
public static void main(String[] args) {System.out.println("myclass constructor");
}
}
【转载注明出处,还望尊重原创 】
写于:2020-7-12 魔都
【作者水平有限,如有错误欢迎指正 .】
如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论”“收藏”
一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。