word文档怎么替换关键字(word文档怎么查找关键字并替换)
829
2022-05-30
目录
1、声明static属性
2、声明static方法
3、分析主方法
3、static应用案例
1、声明static属性
static关键字,主要描述全局的概念,利用该属性可以定义属性和方法,但是90%情况下很少直接编写static。
现在假设定义一个只描述中国人的类,类中包含:姓名、年龄、国家,按之前的概念设计如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Person perA = new Person("张三",10);
Person perB = new Person("李四",20);
Person perC = new Person("王五",10);
System.out.println(perA.getInfo());
System.out.println(perB.getInfo());
System.out.println(perC.getInfo());
}
class Person{
private String name;
private int age;
String country = "中华人民共和国"; //该属性暂时不封装
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getInfo(){
return "姓名:"+this.name+",年龄:"+this.age+",国家:"+this.country;
}
}
以上代码很简单,但是分析内存关系时就会发现问题:
以上红色标记的是重复的信息,在对象数量少的情况下没什么问题,但是在数据量大的情况下要修改属性信息,比如20亿,20亿对象要修改country属性,那是巨大的操作量~对整个代码 的维护很不友好。
造成以上问题的根源主要是:类中的普通属性是每一个对象独自拥有的,这样的设计不符号当前的环境,最好是将country设置为公共属性,所有对象都共享此属性,这时就可以通过static关键字实现。
【举例】:使用static关键字实现
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Person perA = new Person("张三",10);
Person perB = new Person("李四",20);
Person perC = new Person("王五",10);
perA.country = "中国-唐朝";
System.out.println(perA.getInfo());
System.out.println(perB.getInfo());
System.out.println(perC.getInfo());
}
class Person{
private String name;
private int age;
static String country = "中国"; //该属性暂时不封装
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getInfo(){
return "姓名:"+this.name+",年龄:"+this.age+",国家:"+this.country;
}
}
由以上结果可知,修改了一个对象的属性后,所有对象的属性都一起更改,这样的属性称为公共属性,该属性必须通过static关键字定义,对于公共属性的内容保存不会在堆栈中,而是保存在全局数据区中,所有的方法保存在全局代码区之中。内存分析如下:
但是有这样一个问题,既然static属于全局属性,那么由一个对象进行修改很明显不合适,最好的做法是利用所有对象的一个最高代表进行操作,即类。对于static定义的属性可以由类.属性直接调用。这是比较标准的操作:
Person.country = "中国-唐朝";
此时类中存在static和非static属性:
所有的普通属性都是在对象实例化的时候进行内存分配;
而static可以在没有实例化对象产生的情况下直接使用。
System.out.println(Person.country);
Person.country = "中国-北宋";
System.out.println(Person.country);
System.out.println(new Person("张三",20).getInfo());
由以上操作可知,虽然static属性定义在类中,但它是完全独立的,不受对象实例化的控制。
大多数情况下类的设计都会使用非static属性,只有表示公共 属性或与类实例化无关的情况下才会考虑使用static。
2、声明static方法
利用static定义的属性可以直接通过类名称进行访问,static也可以用于方法的定义上,这个方法也同样可以由类名称直接进行调用。
【举例】:定义static方法
class Person{
private String name;
private int age;
private static String country = "中华人民共和国"; //该属性暂时不封装
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getInfo(){
return "姓名:"+this.name+",年龄:"+this.age+",国家:"+this.country;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
Person.country = country;
}
}
static的方法依然不受实例化的限制,所以可以直接由类名称直接调用。但是此类的方法就存在有两种了:static与非static,两者之间的访问就会出现问题,有如下语法规定:
所有非static方法可以直接调用此类中的static方法或static属性。
static方法不能直接调用此类中的非static方法或非static属性。
【什么时候使用static方法】:
类设计过程中,90%都使用非static方法;
若类中没有任何属性,此类不需要定义普通方法,只需要定义static方法(比如开发中常用的自定义工具类,无需实例化对象,无需开辟无用的内存空间);
3、分析主方法
最早讲解方法定义的时候,实际上给出了两种方案:
某方法定义在主类中,由主方法直接调用,格式:public static 返回值类型 方法名称(){};
某方法定义在子类中,由实例化对象直接调用,格式:public 返回值类型 方法名称(){};
实际开发中,主类基本不会写太多方法,大部分方法都会封装在类中。
Java中的主方法是最长的:
static:执行类的时候输入:"java 类名称",表示由类直接调用;
void:主方法是程序的起点,无返回值;
main:系统定义好的方法名称;
String args[]:表示程序执行时的输入参数,初始化输入参数。
3、static应用案例
static在一些系统类库中大量出现,这些可能是因为定义static方法所导致。本次重点看static属性,该属性的一个最好的特点是公共属性,所有对象均可以对其进行修改。
【举例】:实现一个对象个数的统计
所有新的实例化对象产生时都会调用构造方法,可以在其中增加一个统计功能。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new Person();
new Person();
}
class Person{
private static int count = 0;
public Person() {
System.out.println("对象个数:"+count++);
}
}
【举例】:为属性自动命名
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println(new Person().getName());
System.out.println(new Person("张三").getName());
}
class Person{
private static int count = 0;
private String name;
public Person(){
this("无名氏-"+count++);
}
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4、总结
1)类的设计过程中,首先可以不去考虑static属性或方法;
2)使用static方法,大部分情况下有两种可能性:
希望不受类实例化的控制;
类中没有普通属性;
作于202004061520,已归档
———————————————————————————————————
本文为博主原创文章,转载请注明出处!
若本文对您有帮助,轻抬您发财的小手,关注/评论//,就是对我最大的支持!
祝君升职加薪,鹏程万里!
Java
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。