Java面向对象(下)-创新互联
Java面向对象(下)
1. static关键字
本文标题:Java面向对象(下)-创新互联
URL标题:http://scgulin.cn/article/ceocse.html
static可以用来修饰类的内部结构(除了构造器):属性、方法、代码块、内部类
创新互联长期为1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为勉县企业提供专业的成都网站建设、网站制作,勉县网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。1.1 静态属性- 用static修饰的属性为静态属性(类变量),非静态变量(或称实例变量)
- 实例变量:每个对象都有属于自己的一套非静态属性,互不影响
- 类变量:所有对象共用的。当通过一个对象修改静态变量,会导致其他变量调用此静态变量时,得到的是修改过的数值。
- 静态变量随着类的加载而加载,早于对象的创建。
而实例变量是在对象创建后才加载的
所以可以通过 “类.静态变量” 的方式进行调用 - 静态变量存储在方法区的静态域中
- 静态属性举例: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 静态方法- 随着类的加载而加载,可以通过 类.方法 来调用方法
- 静态方法中只能调用静态的方法、静态的属性(由生命周期决定)
- 非静态方法既可以调用静态的,也可以调用非静态的
- 在静态的方法内,不能使用this,super关键字
属性
- 该属性是被多个对象共用的,不会随着对象的不同而不同
- 类中的常量也常被修饰为static,如Math.PI
方法 - 操作静态属性的方法,通常为static
- 工具类中的方法,比如Math类、Arrays类、Collections类
- 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式。类似于棋谱。
- 设计模式是独立于语言的(和数据结构类似),对Java、Python等编程设计都适用
- 单例设计模式的类只能由一个对象
实现方式
2.3 饿汉式和懒汉式
- 将构造器设置为private的(这样类的外部就不能创建对象了)
- 在类的内部创建静态的类对象instance
- 声明public的静态方法getInstance(),返回类内部创建的对象
//单例设计模式
//饿汉式
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;
}
}
饿汉式和懒汉式的比较
- 饿汉式:
- 坏处:对象加载时间过长
- 好处:饿汉式是线程安全的
- 懒汉式:
- 好处:延迟对象的创建
- 目前的写法的坏处是线程不安全,到多线程时,可以修改
因为只生成一个对象,所以减少了系统的开销
- main方法是程序的入口
- main方法也是一个普通的静态方法
- main()也可以作为我们与控制台交互的方式
- 代码块又称初始化块,作用是初始化类、对象
- 代码块如果有修饰的话,只能使用static
- 根据是否用static修饰分为:静态代码块、非静态代码块
class Person{//非静态代码块
{
}
//静态代码块
static{}
}
4.1 静态代码块- 内部可以有输出语句
- 随着类的加载而执行,因而只会执行一次
- 可以初始化类的静态属性
- 如果一个类中定义了多个静态代码块,则先声明的静态代码块先执行
- 而所有的静态代码块的执行都先于非静态的代码块(因为静态代码块随着类的加载而执行,先于对象的创建)
- 静态代码块只能调用静态的结构
- 内部可以有输出语句
- 随着对象的创建而执行,每创建一个对象就会执行一次非静态代码块
- 可以在创建对象的时候,对属性进行初始化
- 多个非静态代码块,执行顺序也是先声明先执行
- 非静态代码块既可以调用静态结构也可以调用非静态结构
数字表示赋值的先后顺序
- 默认初始化
- 显示初始化 代码块中初始化
哪个先写,哪个先赋值 - 构造器中初始化
- 使用对象.属性赋值
final —— 最终的(不可修改)
final可以用来修饰类、方法、变量
final类不能有子类,不能被继承
比如String类、System类、StringBuffer类
表示此方法不能被重写
6.3 final修饰变量final修饰变量,此时的变量就称为一个常量
- final修饰属性:可以赋值的位置:显示初始化、代码块初始化、构造器初始化
- final修饰局部变量:表示常量,只能调用,不能修改。
尤其是用final修饰形参时,在方法中只能使用,不能修改
static final修饰属性:全局常量
7. abstract关键字abstract 可以用来修饰类和方法
7.1 抽象类抽象类不能实例化,只能被其他类继承
- 抽象类一定有构造器,便于子类实例化时调用
- 若子类重写了所有的抽象方法,则此子类可以实例化
- 否则,此子类也是抽象类,需要用abstract来修饰
抽象方法只有方法的声明,没有方法体
- 包含抽象方法的类一定时抽象类,反之抽象类中不一定有抽象方法
public abstract void eat();
注意点
- 什么时候用抽象类呢?
举个例子:几何图形这个类就是抽象的,计算面积这种方法只能声明,不能实现。 - abstract不能用来修饰私有方法、静态方法、final的方法、final的类
- 一些抽象类因为有抽象方法,需要将抽象方法重写了才能创建对象
- 目的:匿名子类只需要使用一次(省事)
//假设Person是一个抽象类
//Person中eat方法是抽象方法
//创建匿名子类,把抽象类的抽象方法给实现了
//使用多态将子类对象赋给父类的引用
Person p = new Person(){public void eat(){System.out.println("你要好好吃饭啊");
}
}
7.4 模板方法设计模式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面向对象(下)-创新互联
URL标题:http://scgulin.cn/article/ceocse.html