1.static属性的用途
· static被称为静态,可以用来修饰类的属性和方法。
·如果类的某个属性,不管创建多少个对象,属性的存储空间只有唯一的一个,那么这个属性就应该用static修饰,被static修饰的属性被称为静态属性。
2.静态成员的访问
(1)对象.静态成员
System.out.println(emp1.count);
(2)类.静态成员
System.out.println(Emp.count);
问题:为什么几种不同的访问方式下,静态属性count的值都一样?
(1)静态成员是属于类的。
(2)类的对象可以共享类的静态成员。
用途:
·如果某个方法不需要与某个特定的对象绑定,那么该方法可以使用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);
}
}
区别:静态方法与非静态方法的调用
静态方法的调用:类.方法名()
非静态方法的调用:先实例对象,在对象.方法名()
//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"))
定义: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
我是实例块
我是实例块
我是实例块
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();
}
}
我希望我的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
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个具有一些属性的模型: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
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
我不知道为什么,但是当我设置这个设置时它无法编译设置: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.
所以这可能有点令人困惑,但请耐心等待。简而言之,我想遍历具有特定键值的所有属性,然后如果值不为空,则将它们插入到模板中。这是我的代码:属性:#===DefaultfileConfigurations#default['elasticsearch']['default']['ES_USER']=''default['elasticsearch']['default']['ES_GROUP']=''default['elasticsearch']['default']['ES_HEAP_SIZE']=''default['elasticsearch']['default']['MAX_OP
假设我有以下类(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)
我想为我的Task模型创建一个status属性,该属性将按以下顺序指示它在三部分进度中的位置:打开=>进行中=>完成。它的工作方式类似于亚马逊包裹的交付方式:已订购=>已发货=>已交付。我想知道设置此属性的最佳方法是什么。我可能是错的,但创建三个独立的bool属性似乎有点多余。实现此目标的最佳方法是什么? 最佳答案 Rails4有一个内置的enummacro.它使用单个整数列并映射到键列表。classOrderenumstatus:[:ordered,:shipped,:delivered]end状态映射如下:{ordered:0,
我正在尝试将一个资源属性的默认值设置为另一个属性的值。我正在为我正在构建的tomcat说明书定义一个资源,其中包含以下定义。我想要可以独立设置的“名称”和“服务名称”属性。当未设置服务名称时,我希望它默认为为“名称”提供的任何内容。以下不符合我的预期:attribute:name,:kind_of=>String,:required=>true,:name_attribute=>trueattribute:service_name,:kind_of=>String,:default=>:name注意第二行末尾的“:default=>:name”。当我在Recipe的新block中引用我