69.static关键字

Java中的static关键字

接下来零星的讲一些有关Java编程的一些高级特性,以及Java编程的第三大面向对象特性——多态。

 

这里先来讲讲static关键字。

 

在Java中,可以将一些成员限制为和类相关的,而不是和实例相关的。实现这个目的的方法是,在类的成员如方法、属性乃至自由代码块前面加上“static”这个修饰符。


实例变量用于描述单个实例的状态,而类变量用于描述类的状态,和具体的实例无关。

 

实例方法用于操作实例变量并维护特定实例的状态,而类方法并不了解单个实例的状态。


在Java中,static最常用的地方是用在Java应用程序的入口方法main()前面用于修饰main()方法,表示main()方法是一个类方法。

 

我们在执行一个应用程序的时候,解析器将会去寻找这个main()方法,之所以将它设置为类方法,是因为,在调用这个main()方法之前,还没有任何对象存在,所以,如果不将它设置为类相关的,则没有办法得到任何的对象,也就无法调用这个main()方法。


我们来看另外一个static的例子:

public class TestStatic {
 public static int count=0;
 
 public TestStatic() {
  count++;
 }
 
 public static int getCount() {
  return count; 
 }
 
 public static void main(String args[]) {
  
  TestStatic ts1=new TestStatic();
  System.out.println(ts1.count);
  
  TestStatic ts2=new TestStatic();
  System.out.println(ts2.count);
  //System.out.println(TestStatic.count);  
  //System.out.println(TestStatic.getCount());
 }
}


在这个程序中,定义了一个静态变量count,并定义了一个静态方法来获取。每次在构造这个类的实例的时候,都将这个count加上1。

 

因为这个变量是类变量,所以,每次在调用构造方法来构造类的实例的时候,都会将这个变量加上1。因为它是和类相关的,所以,它会在原来的基础上加上1,而不是每次都对它进行初始化成0。

 

运行这个程序,将得到如下的结果:
1
2

如果将这个程序的静态变量count和静态方法getCount()都改成非静态的(只需将变量和方法前的static都去掉),重新编译运行,则可以得到下面的结果:
1
1


这是因为,如果将静态变量count前的static去掉,则这个变量变成了非静态变量,也就是实例变量,这样,每次调用构造器进行类的实例化时,将重新对这个变量进行初始化,因此,每次它都是从0开始计算,然后在构造器中对其加1,这样,打印出来的结果就是1了。


在这个程序中,也可以不通过实例名来访问变量count或方法getCount(),因为这两个成员都是类成员,可以直接通过类名加“.”来调用它们。将程序中的两个打印语句的注释去掉,就可以向控制台输出如下的结果:
1
2
2
2


最后需要指出的是,static不可用于修饰构造器


注意:虽然static修饰的成员是类成员,但是,同样可以通过实例名来调用static修饰的类成员,就像调用其他的实例成员一样。

java判断题及答案关于Java基本数据类型的数据在内存中占据的字节数,哪种说法是正确的? A. byte(1个字节) B. short(2个字节) C. char(1个字节) D. float(4个字节) E. long(4个字节) F. double(4个字节) 分数 2 作者 周雪芹 单位 山东理工大学 Java中,以下表达式说法正确的是:( )。 A. int a=20;a++; a的值是21。 B. int a=20;int b=a++; b的值是21。 C. int a=20;int b=++a; b的值是21。 D. int a=3++; a的值是3。 分数 2 作者 马俊 单位 兰州大学 以下哪些字符串可以用作Java程序中的标识符? A. _number B. 3number C. #number D. $number 分数 2 作者 马俊 单位 兰州大学 Java语言中,下列表达式中哪些条件表达式的结果是真? A. (36+6)/7>=5 B. !false&&!(4%2-4==4)&&7*4-5>20 C. !(4>2&&4<6) D. !(45>23&&72/7==0) 分数 1 作者 吕行军 单位 河北农业大学 Java中,以下哪些是引用数据类型 A. 数组 B. int C. 接口 D. boolean E. 枚举 F. 类 分数 2 作者 孔德桢 单位 浙大城市学院 对于如下的代码片段,执行b.func()之后,值为27的表达式有 class A { int i, j; public void fun() { i++; j++; } } class B extends A { static int j; public void func() { int j = 2; for (i = 0; i < 10; i++) { j += 3; fun(); } if (j < 30) { super.j = j; } else { /**/ B.j = j; } } } class Main { public static void main(String[] args) throws Exception { B b = new B(); A a = b; b.func(); } } A. b.i + b.j B. ((A)b).i + ((A)b).j; C. a.i + a.j D. b.i + a.j 分数 2 作者 孔德桢 单位 浙大城市学院 下列有关匿名对象的说法,正确的有 A. 匿名对象只能继承一个类或实现一个接口 B. 匿名对象可以有构造函数 C. 匿名对象不能被重复构造 D. 每个匿名对象都具有独一无二的类型 分数 2 作者 周雪芹 单位 山东理工大学 关于super关键字,以下说法哪些是正确的?( ) A. super关键字可以调用父类的构造方法 B. super关键字可以调用父类的普通方法 C. super关键字与this不能同时存在于同一个构造方法中 D. super关键字与this可以同时存在于同一个构造方法中 分数 2 作者 郑如滨 单位 集美大学 接口和抽象类描述正确的有 A. 抽象类没有构造函数 B. 接口没有构造函数 C. 抽象类不允许多继承 D. 接口中的方法可以有方法体 分数 2 作者 周雪芹 单位 山东理工大学 关于Java中的抽象类,哪些说法是正确的?( ) A. 抽象类中可以含有抽象的方法,也可以含有非抽象的方法。 B. 含有抽象方法的类一定是抽象类。 C. 抽象类是不能用new操作来生成对象的,只能被子类继承。 D. 抽象类的子类如果实现了父类的所有抽象方法,它就是一个普通的类。如果没有实现抽象方法,则它还是抽象类。 分数 2 作者 周雪芹 单位 山东理工大学 接口中定义常量(变量)时,默认含有哪些修饰符?( ) A. public B. static C. final D. void 分数 2 作者 马俊 单位 兰州大学 Java语言中关于接口和抽象类描述正确的有? A. 抽象类没有构造函数 B. 接口没有构造函数 C. 抽象类不允许多继承 D. 接口中的方法可以有方法体 分数 2 作者 周雪芹 单位 山东理工大学 面向对象程序设计的三大特征是:( )。 A. 封装 B. 继承 C. 多态 D. 隐藏 分数 2 作者 周雪芹 单位 山东理工大学 下面的语句哪个能够创建一个String类对象? A. String str1="mooc"; B. String str2=new String(); C. String str3=new String("sdut"); D. String str4="abc"+"123"; 分数 2 作者 马俊 单位 兰州大学 Java语言中,下列有关使用String类的语句中哪几项是正确的? A. String s[]={"Zero","One","Two","Three","Four"}; B. String s[5]=new String[]{"Zero","One","Two","Three","Four"}; C. String s[]=new String[]{"Zero","One","Two","Three","Four"}; D. String s[]=new String(){"Zero","One","Two","Three","Four"}; 分数 2 作者 周雪芹 单位 山东理工大学 Java虚拟机为了提升性能,减少内存的开销,避免字符串对象的重复创建,开辟了一块特殊的内存空间——字符串池,它用来存放( )条件的字符串对象。 A. 字符串常量 B. 有限个字符串常量进行加运算的结果 C. 字符串对象调用intern方法返回的字符串对象 D. 其他对象调用toString方法返回的结果 分数 2 作者 周雪芹 单位 山东理工大学 String类对象的创建方式包括:( )。 A. String str1="imooc"; B. String str2=new String(); C. String str3=new String("imooc"); D. String str4="abc"+"123"; E. String str5=str1.toUpperCase(); 分数 2 作者 周雪芹 单位 山东理工大学 现在字节数组如下,如何得到每个字节所对应的字符? byte[] bytes= {97,98,99,100,65,66,67,68,69}; //打印输出:abcdABCDE A. System.out.println(new String(bytes)); B. System.out.println(new String(bytes,0,bytes.length)); C. System.out.println(bytes.toString()); D. System.out.println(Arrays.toString(bytes)); 分数 2 作者 周雪芹 单位 山东理工大学 JAVA中如何将基本数据类型的数据转换成字符串? 以整型数据为例,现有一个整数: int i=100; 下面哪种方式能够得到字符串“123”? A. String str1=i+""; B. String str2=String.valueOf(i); C. String str3=Integer.toString(i); D. String str4=String.format("%d", i); 分数 2 作者 周雪芹 单位 山东理工大学 对String类型的字符串String str="123";,调用str对象的( )方法,得到int类型的十进制整型数值 123? A. int i1=Integer.parseInt(str); B. int i2=new Integer(str); C. int i3=Integer.parseInt(str, 10); D. int i4=str.toInteger(); 分数 2 作者 周雪芹 单位 山东理工大学 下列哪些方法属于java.lang.Math类( )? A. random() B. sqrt() C. abs() D. pow() E. exp() F. ceil() G. floor() 分数 2 作者 马俊 单位 兰州大学 Java语言中下列方法属于java.lang.Math类的有哪些? A. random() B. abs() C. sqrt() D. sin() 分数 2 作者 周雪芹 单位 山东理工大学 迭代器接口(Iterator)所定义的方法有( )。 A. hasNext() B. next() C. remove() D. nextElement() 分数 2 作者 周雪芹 单位 山东理工大学 List类型的对象list可以以几种形式输出其内容( )? A. System.out.println(list.toString()); B. for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } C. for (Object obj : list) { System.out.println(obj); } D. Iterator it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } 分数 2 作者 周雪芹 单位 山东理工大学 对于Set类型的对象set,可以以几种形式输出其内容( )? A. System.out.println(set.toString()); B. for (int i = 0; i < set.size(); i++) { System.out.println(set.get(i)); } C. for (Object obj : set) { System.out.println(obj); } D. Iterator it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } 分数 2 作者 周雪芹 单位 山东理工大学 在JAVA集合框架中,下面哪些类型所表示的对象是有序的?( ) A. HashMap B. HashSet C. TreeMap D. LinkedList E. LinkedHashMap 分数 2 作者 周雪芹 单位 山东理工大学 Java中的数组在声明并分配了空间之后,关于其数组元素,哪些说法是正确的?( ) A. 数组元素未人为赋值之前不能进行访问 B. 数组元素都有默认值 C. 基本数据类型中数值类型数组,元素默认值为0;布尔类型数组,元素默认值为false。 D. 引用数据类型的数组,其数组元素默认值为null
最新发布
12-03
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值