028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Java面向对象(下)-创新互联

Java面向对象(下) 1. static关键字

static可以用来修饰类的内部结构(除了构造器):属性、方法、代码块、内部类

创新互联长期为1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为勉县企业提供专业的成都网站建设、网站制作,勉县网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。1.1 静态属性
  1. 用static修饰的属性为静态属性(类变量),非静态变量(或称实例变量)
  1. 静态变量随着类的加载而加载,早于对象的创建。
    而实例变量是在对象创建后才加载的
    所以可以通过 “类.静态变量” 的方式进行调用
  2. 静态变量存储在方法区的静态域中
  3. 静态属性举例:System.out , Math.PI
class Chinese{String name;
    int age;
    static nation;
}
class Test{public static void main(String[] args){//不用创建对象,就可以调用静态变量
        //因为静态变量随着类的加载而加载
        Chinese.nation = "CHINA";
    }
}
1.2 静态方法1.3 什么时候声明为static

属性

  1. 该属性是被多个对象共用的,不会随着对象的不同而不同
  2. 类中的常量也常被修饰为static,如Math.PI
    方法
  3. 操作静态属性的方法,通常为static
  4. 工具类中的方法,比如Math类、Arrays类、Collections类
2.单例设计模式 2.1 什么是设计模式2.2 单例设计模式
  1. 将构造器设置为private的(这样类的外部就不能创建对象了)
  2. 在类的内部创建静态的类对象instance
  3. 声明public的静态方法getInstance(),返回类内部创建的对象
2.3 饿汉式和懒汉式
//单例设计模式
//饿汉式
public class SingletonTest1 {public static void main(String[] args) {Bank b1 = Bank.getInstance();
        Bank b2 = Bank.getInstance();
        //地址值相同,说明这个类只有一个对象
        System.out.println(b1 == b2);
    }
}

class Bank {//私有化类的构造器
    private Bank() {}

    //内部创建类的对象
    private static Bank instance = new Bank();

    //声明public,static的getInstance方法,返回内部创建的类
    public static Bank getInstance() {return instance;
    }
}
//单例模式
//懒汉式
public class SingletonTest2 {public static void main(String[] args) {Order order1 = Order.getInstance();
        Order order2 = Order.getInstance();
        System.out.println(order1 == order2);
    }
}

class Order{private Order(){}

    private static Order instance = null;

    public static Order getInstance(){if(instance == null){instance = new Order();
        }
        return instance;
    }
}

饿汉式和懒汉式的比较

2.4 单例模式的使用场景

因为只生成一个对象,所以减少了系统的开销
image.png

3. main方法的理解
  1. main方法是程序的入口
  2. main方法也是一个普通的静态方法
  3. main()也可以作为我们与控制台交互的方式
4. 代码块(初始化块) 类的成员之四
  1. 代码块又称初始化块,作用是初始化类、对象
  2. 代码块如果有修饰的话,只能使用static
  3. 根据是否用static修饰分为:静态代码块、非静态代码块
class Person{//非静态代码块
    {
    }
    //静态代码块
    static{}
}
4.1 静态代码块
  1. 内部可以有输出语句
  2. 随着类的加载而执行,因而只会执行一次
  3. 可以初始化类的静态属性
  4. 如果一个类中定义了多个静态代码块,则先声明的静态代码块先执行
  5. 而所有的静态代码块的执行都先于非静态的代码块(因为静态代码块随着类的加载而执行,先于对象的创建)
  6. 静态代码块只能调用静态的结构
4.2 非静态代码块
  1. 内部可以有输出语句
  2. 随着对象的创建而执行,每创建一个对象就会执行一次非静态代码块
  3. 可以在创建对象的时候,对属性进行初始化
  4. 多个非静态代码块,执行顺序也是先声明先执行
  5. 非静态代码块既可以调用静态结构也可以调用非静态结构
5. 对属性赋值

数字表示赋值的先后顺序

  1. 默认初始化
  2. 显示初始化 代码块中初始化
    哪个先写,哪个先赋值
  3. 构造器中初始化
  4. 使用对象.属性赋值
6.final 关键字

final —— 最终的(不可修改)
final可以用来修饰类、方法、变量

6.1 final修饰类

final类不能有子类,不能被继承
比如String类、System类、StringBuffer类

6.2 final修饰方法

表示此方法不能被重写

6.3 final修饰变量

final修饰变量,此时的变量就称为一个常量

  1. final修饰属性:可以赋值的位置:显示初始化、代码块初始化、构造器初始化
  2. final修饰局部变量:表示常量,只能调用,不能修改。
    尤其是用final修饰形参时,在方法中只能使用,不能修改
6.4 static final

static final修饰属性:全局常量

7. abstract关键字

abstract 可以用来修饰类和方法

7.1 抽象类

抽象类不能实例化,只能被其他类继承

7.2 抽象方法

抽象方法只有方法的声明,没有方法体

public abstract void eat();

注意点

  1. 什么时候用抽象类呢?
    举个例子:几何图形这个类就是抽象的,计算面积这种方法只能声明,不能实现。
  2. abstract不能用来修饰私有方法、静态方法、final的方法、final的类
7.3 抽象类的匿名子类
//假设Person是一个抽象类
//Person中eat方法是抽象方法

//创建匿名子类,把抽象类的抽象方法给实现了
//使用多态将子类对象赋给父类的引用
Person p = new Person(){public void eat(){System.out.println("你要好好吃饭啊");
    }
}
7.4 模板方法设计模式

image.png

import java.time.format.TextStyle;

import javax.sound.midi.SysexMessage;

//模板方法设计模式
public class TemplateTest {public static void main(String[] args) {Template test = new SubTemplate();
        test.spendTime();
    }
  
}


//一个计算代码运行时间的类模板
abstract class Template{public void spendTime(){long start = System.currentTimeMillis();

        code();
        
        long end = System.currentTimeMillis();

        System.out.println("代码运行的时间为"+(end - start));
    }

    public abstract void code();
}


class SubTemplate extends Template{@Override
    public void code() {// TODO Auto-generated method stub
        for(int i = 2;i<=1000;++i){boolean isPrime = true;
            for(int j = 2;j<=Math.sqrt(i);++j){if((i%j==0)){isPrime = false;
                }
            }
            if(isPrime){System.out.println(i);
            }
        }
        
    }

}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


标题名称:Java面向对象(下)-创新互联
标题链接:http://www.tsicrk.com/article/ceocse.html

其他资讯

让你的专属顾问为你服务

2.7677s