程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

java(0)

标签  

暂无标签

日期归档  

Java学习笔记-18:关键字

发布于2021-06-12 15:03     阅读(582)     评论(0)     点赞(4)     收藏(3)


关键字

Static(和类的生命周期一致,相当于c++中的全局变量)

  • 静态的

  • 可用来修饰属性,代码块,方法,内部类,存在方法区的静态区域里。

  • 非静态属性:一个类中,每个对象都有自己的一套非静态属性,改变一个对象的属性值不会改变其他对象的属性值。

  • 而静态属性则相反。

  • 例如,若一个相同类中都有age属性,用static修饰,当用其中一个对象修改这个属性,则其他对象中的相同属性的值也被修改!

    package com.hyb.KeyWord;
    
    public class Static {
        public static void main(String[] args) {
            Static aStatic = new Static();
            Static bStatic = new Static();
            aStatic.a=10;
            System.out.println(bStatic.a);//0
            aStatic.b=10;
            System.out.println(bStatic.b);//0
            aStatic.c=10;
            System.out.println(aStatic.c);//10
            System.out.println(bStatic.c);//
    
    
        }
        int a;
        int b;
        static int c;
    }
    
  • 静态变量随着类的加载而记载,早于对象的创建,所以我们可以通过<类名.静态变量名>直接调用,但非静态变量不能直接调用,要new一个对象,用对象调用。

    //上述类访问c
    Static.c=10;
    
  • 类加载一次,则静态变量也只加载一次

  • 那么我们什么时候用static修饰我们的方法呢?

    1. 随着类的加载而记载,所以我们也可以直接拥类来调用,当然new一个对象也可调用他
    2. 但静态方法中,只能调用静态方法和静态属性,而非静态方法中,既能调用静态的,也可调用非静态的。
    3. 在静态方法中,this和super关键字不能使用,因为没有父类
  • 那我们在开发中怎么确定一个属性和方法用static呢?

    1. 属性可以被多个对象共享,不会随着对象的不同而不同
    2. 操作静态属性的方法通常设置为静态的
    3. 工具方法的使用,也可以用static,直接拥<类.方法>来调用
    package com.hyb.KeyWord;
    
    public class Static {
        public static void main(String[] args) {
            Static aStatic = new Static();
            Static bStatic = new Static();
    
    
            System.out.println(aStatic.getId());
            System.out.println(bStatic.getId());
            System.out.println(a);
        }
        private static int a=10;
        public int id=10;
    
        public Static() {
    
            id = ++a;
        }
    
        public int getId() {
            return id;
        }
    
    
    }
    
  • static单例设计模式:

    所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对

    某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。

    如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构

    造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生

    类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无

    法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,

    静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象

    的变量也必须定义成静态的。

    package com.hyb.KeyWord;
    //饿汉式
    import javax.sound.midi.Soundbank;
    import java.sql.SQLOutput;
    
    public class SingleTest1 {
    
        public static void main(String[] args) {
            Student student1=Student.getStudent();
            Student student2=Student.getStudent();
            System.out.println(student1==student2);//true是同一个对象
    
        }
    }
    class Student{
        //建造稀有构造器
    
        private Student() {
    
        }
        //new一个static的对象
        private static Student student=new Student();
        //提供一个获取该实例的方法
    
        public static Student getStudent() {
            return student;
        }
    }
    
    package com.hyb.KeyWord;
    //懒汉式
    public class SingleTest2 {
    	public static void main(String[] args) {
            Techer techer1=Techer.getTecher();
            Techer techer2=Techer.getTecher();
            System.out.println(techer1==techer2);//true
        }
    }
    class Techer{
        //声名一个私有的构造器
        private Techer(){
    
        }
        //声名对象,但没有初始化
        private static Techer techer=null;
        //提供new一个对象的方法
    
        public static Techer getTecher() {
            //必须要有判断,因为对象只能被new一次
            if(techer==null){
                techer = new Techer();
            }
            return techer;
        }
    }
    

    懒汉式效率上一般比饿汉式长,因为饿汉式是先创建对象,让对象的加载时间过长,而懒汉式是要用的时候才创建对象。但饿汉式是线程安全的,什么是线程安全呢?通俗来讲,就是当一个人在抢票,刚进去看到票没有被卖出,但这个时候另一个人也刚好进来了,也可能会判定这张票是没被卖出的。

    在设计中,一般在以下的情况做成单例模式:

    网站的计数器,一般也是单例模式实现,否则难以同步。

    应用程序的日志应用,一般都使用单例模式实现,这一般是由于共享的日志

    文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。

    数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。

    项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置文件数据,都生成一个对象去读取。

    Application 也是单例的典型应用

    Windows的Task Manager (任务管理器)就是很典型的单例模式

    Windows的Recycle Bin (回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例

final关键字

package com.hyb.KeyWord;
//Final关键字可以修饰的结构(最终的)
/*修饰类
1.表示最终的类,此类不能被继承,String,System,StringBuffer类都是final修饰的
* final修饰方法
1.不能被重写
*final修饰一个变量
1.修饰属性,表示常量,可在显示初始化,代码块,构造器中,但不能定义为默认初始化中或者在方法中赋值
2.修饰局部变量也表示常量
3.修饰形参,只能被调用,一旦赋值以后便不能重新被修改
4.在new对象的语句中赋值,这里可new不同的对象,赋多个不同的值,这是可以的,因为不同的对象,但下一次在相同的对象下就不可以赋值了
*
static final修饰属性表示全局常亮
 */
public class Final {
}

原文链接:https://blog.csdn.net/weixin_47303191/article/details/117715867



所属网站分类: 技术文章 > 博客

作者:java王侯

链接:http://www.javaheidong.com/blog/article/222395/05c8a83150928d884a90/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)