jjzjj

07. 特性修饰符——static属性

一直流浪 2023-09-23 原文

1、static属性

1.static属性的用途

· static被称为静态,可以用来修饰类的属性和方法。

·如果类的某个属性,不管创建多少个对象,属性的存储空间只有唯一的一个,那么这个属性就应该用static修饰,被static修饰的属性被称为静态属性。

2.静态成员的访问

(1)对象.静态成员

System.out.println(emp1.count);

(2)类.静态成员

System.out.println(Emp.count);

问题:为什么几种不同的访问方式下,静态属性count的值都一样?

(1)静态成员是属于的。

(2)类的对象可以共享类的静态成员。

2、static方法

用途:

·如果某个方法不需要与某个特定的对象绑定,那么该方法可以使用static修饰,被static修饰的方法称为静态方法。

·基本结构如下:

访问权限 static修饰符 返回值类型 方法名称

public static void sellticket(){
  System.out.println("所有车票都是12306卖的");
}

静态方法的定义

public class Math {
    public static int add(int a ,int b) {
        return a + b;
    }
}

静态方法的调用:类.方法名()

public class Client {
    public static void main(String[] args) {
        int c = Math.add(1,2);
        System.out.println(c);
    }
}

区别:静态方法与非静态方法的调用

静态方法的调用:类.方法名()

非静态方法的调用:先实例对象,在对象.方法名()

3、常用系统中的静态方法

                //Math类的静态方法
        System.out.println( Math.abs(-1));
        System.out.println(Math.random());
        
        //Math类中的静态属性
        System.out.println(Math.PI);
        System.out.println(Math.E);
        
        //包装类中的静态属性
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Integer.MAX_VALUE);
        
        //包装类中的静态方法
        System.out.println(Integer.valueOf(10));
        System.out.println(Integer.parseInt("10"))

4、static块

定义:static块和static的属性以及方法的性质是相同的,用static修饰的代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块。

区别在于语法不同

static块语法:

直接在代码块前,加上关键词static即成为静态块。

static{
      System.out.println("123");
}

static块的用途:

·静态块只有在类加载的时候被执行一次,不管创建多少个对象,都不会再执行。

·如果一个类加载的时候,总要预先做一些事情,则可以放在静态块中。例如,读取一个属性文件,进行一些常规配置,写一些日志等。

·一个类可以有多个静态块,按照顺序执行。

public class Demo {
    
    public static int count;
    
    {
        //实例块
        System.out.println("我是实例块");
    }
    
    static {
        //静态块
        //初始化静态属性
        Demo.count = 1;
        
        System.out.println("我是静态块1");
    }
    static {
        //静态块
        System.out.println("我是静态块2");
    }
    static {
        //静态块
        System.out.println("我是静态块3");
    }
}

public class Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Demo demo1 = new Demo();
        Demo demo2 = new Demo();
        Demo demo3 = new Demo();
        
        //1.静态块在类加载的时候加载一次,和对象的创建个数无关
        //2.静态块在实例块之前调用
        //3.如果一个类中有多个静态块,它们会顺序执行    
    }
}

运行结果:
我是静态块1
我是静态块2
我是静态块3
我是实例块
我是实例块
我是实例块

5、静态类(只能是内部类,外部类不允许static修饰)

static类基本语法:

public class Outer {
    
    //静态内部类
    static class Inner{
        
    }
}

public class Client {
    public static void main(String[] args) {
        //语法:外部类.内部类,是把外部类当作特殊的包名来使用
        Outer.Inner inner =new Outer.Inner();
    }
}

static父子类继承:

public class Message {
//父类
    static class TextMessage extends Message{
        //子类
    }
    
    static class VoiceMessage extends Message{
        
    }
}


public class Client {
    
    public static void main(String[] args) {
        //外部类.内部类
        //父类.子类
        Message.TextMessage textMessage =new Message.TextMessage();
    }
}

静态内部类是外部类的实例

//接口:飞
public interface FlyAble {
    
    //静态内部类,是外部类型的实现类
    static class Bird implements FlyAble{
        
    }
    
    static class Leaf implements FlyAble{
        
    }
}

public class Client {
    public static void main(String[] args) {

                //外部类.静态内部类
        //接口.静态内部类
        FlyAble.Bird bird = new FlyAble.Bird();
        FlyAble.Leaf leaf = new FlyAble.Leaf();
    }
}

有关07. 特性修饰符——static属性的更多相关文章

  1. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  2. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  3. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

  4. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  5. ruby-on-rails - Rails 模型——非持久类成员或属性? - 2

    对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs

  6. ruby - Sinatra set cache_control to static files in public folder编译错误 - 2

    我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.

  7. ruby - Chef Ruby 遍历 .erb 模板文件中的属性 - 2

    所以这可能有点令人困惑,但请耐心等待。简而言之,我想遍历具有特定键值的所有属性,然后如果值不为空,则将它们插入到模板中。这是我的代码:属性:#===DefaultfileConfigurations#default['elasticsearch']['default']['ES_USER']=''default['elasticsearch']['default']['ES_GROUP']=''default['elasticsearch']['default']['ES_HEAP_SIZE']=''default['elasticsearch']['default']['MAX_OP

  8. ruby - 获取数组中的值并最小化某个类属性的最优雅的方法是什么? - 2

    假设我有以下类(class):classPersondefinitialize(name,age)@name=name@age=ageenddefget_agereturn@ageendend我有一组Person对象。是否有一种简洁的、类似于Ruby的方法来获取最小(或最大)年龄的人?如何根据它对它们进行排序? 最佳答案 这样做会:people_array.min_by(&:get_age)people_array.max_by(&:get_age)people_array.sort_by(&:get_age)

  9. ruby-on-rails - 为模型创建状态属性 - 2

    我想为我的Task模型创建一个status属性,该属性将按以下顺序指示它在三部分进度中的位置:打开=>进行中=>完成。它的工作方式类似于亚马逊包裹的交付方式:已订购=>已发货=>已交付。我想知道设置此属性的最佳方法是什么。我可能是错的,但创建三个独立的bool属性似乎有点多余。实现此目标的最佳方法是什么? 最佳答案 Rails4有一个内置的enummacro.它使用单个整数列并映射到键列表。classOrderenumstatus:[:ordered,:shipped,:delivered]end状态映射如下:{ordered:0,

  10. ruby - Chef LW 资源属性默认值如何引用另一个属性? - 2

    我正在尝试将一个资源属性的默认值设置为另一个属性的值。我正在为我正在构建的tomcat说明书定义一个资源,其中包含以下定义。我想要可以独立设置的“名称”和“服务名称”属性。当未设置服务名称时,我希望它默认为为“名称”提供的任何内容。以下不符合我的预期:attribute:name,:kind_of=>String,:required=>true,:name_attribute=>trueattribute:service_name,:kind_of=>String,:default=>:name注意第二行末尾的“:default=>:name”。当我在Recipe的新block中引用我

随机推荐