Java理论学时第三节。课后作业。
如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?
运行结果。
根据我的总结,它们三个的优先级是:构造方法 > 字段初始值 > 初始化块。
当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。
public class InitializeBlockDemo
{
/**
* @param args
*/
public static void main(String[] args)
{
InitializeBlockClassSon obj=new InitializeBlockClassSon();
System.out.println(obj.field);
obj=new InitializeBlockClassSon(300);
System.out.println(obj.field);
}
}
class InitializeBlockClass
{
{
field = 200;
}
public int field;
public InitializeBlockClass(int value)
{
this.field = value;
}
public InitializeBlockClass()
{
}
}
class InitializeBlockClassSon extends InitializeBlockClass
{
public int field1 = 1000;
public InitializeBlockClassSon(int value)
{
this.field1 = value;
}
public InitializeBlockClassSon()
{
}
}
运行结果。
由结果可知,定义的子类不管对其赋不赋值,得到的结果都是父类初始化块的值(前提是父类中没有字段初始值)。
静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员
class StaticDemo
{
static int x = 1;
int y = 2;
static public void display(int flag)
{
System.out.println(x + flag);
}
public int getY()
{
return y;
}
}
public class ShowStatic
{
public static void main(String[] args)
{
StaticDemo a = new StaticDemo();
int flag = a.getY();
StaticDemo.display(flag);
}
}
因为静态方法在对象初始化的时候就已经被调用,所以直接访问实例变量的时候实例变量还不存在而发生错误。避免的方法是在main函数中定义一个局部变量获取实例变量的值,然后在静态方法中调用局部变量。
但这只做到了如何在静态方法中访问类的实例成员数据,而不是如何在静态方法中访问类的实例成员。
请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?。
class Student
{
static int number = 0;
String name;
public Student()
{
number++;
}
public Student(String n)
{
name = n;
number++;
}
public void showNumber()
{
System.out.println("你已经创建了" + number + "对象。");
}
}
public class ShowNumber
{
public static void main(String[] args)
{
Student a = new Student("ycx");
a.showNumber();
}
}
Java理论学时第三节。课后作业。的更多相关文章
- java理论学时第七节。课后作业。
对AboutException.java的理解.在try中如果发出某类系统识别的错误,会以throw的形式抛出,在catch中可以将其截获,不显示在前端,可以选择执行别的代码. ArrayIndexO ...
- Java理论学时第五节。课后作业。
随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 设计思路:先声明一个数组,再利用for循环对每一个元素赋随机生成的值,在求所有数的和,再根据要 ...
- Java理论学时第四节。课后作业。
请查看String.equals()方法的实现代码,注意学习其实现方法. public class StringEquals { public static void main(String[] ar ...
- Java理论学时第六节。课后作业。
package Fuction; class Grandparent { public Grandparent() { System.out.println("GrandParent Cre ...
- Java理论学时第二节。课后作业。
枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象,相同的值则引用同一个对象. 可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals ...
- Java理论学时第一节。课后作业。
设计思路:用nextFloat()函数将从键盘输入的值分别赋给多个变量,然后直接输出相加结果. 流程图: 源代码: 实验结果:
- 大道至简第一章和java理论学时第一节。感受。
这周上了本学期的第一节java课程.课件上说了一些学习java的基本思想.举了个“愚公移山”的例子.这可能就像刚接触一门新的语言,来练习输出“HelloWorld”一样,已成惯例. “愚公移山”的这个 ...
- java第十二周课后作业0523
1.编写一个程序,实现字符串大小写的转换并倒序输出.要求如下(1)使用for循环将字符串“ Hello world”从最后一个字符开始遍历(2)遍历的当前字符如果是大写字符,就使用 toLower C ...
- JAVA第三周课后作业
JAVA课后作业 一.枚举类型 代码: enum Size{SMALL,MEDIUM,LARGE}; public cl ass EnumTest { public static void main( ...
随机推荐
- Spring mvc项目导出jar包无法识别正常映射问题
笔者的代码很简单,平常的配置文件,web.xml如下 <servlet> <!--名称 --> <servlet-name>springmvc</servle ...
- Java并发-volatile的原理及用法
Java并发-volatile的原理及用法 volatile属性:可见性.保证有序性.不保证原子性.一.volatile可见性 在Java的内存中所有的变量都存在主内存中,每个线程有单独CPU缓存内存 ...
- C#做一个写txt文件流的测试,为什么配置低的机器写入的还快
测试机:笔记本i7 8G 固态硬盘 由于采取读码写入txt方式, 读码频率挺高,文件名为日期格式,当前采用每次读码打开文件写入的方式, 为什么没用sb,因为怕断电情况的数据丢失.所以采取每条存入的方式 ...
- Informatica_(5)高级应用
五.高级应用21.任务分区 分区是通过并行处理来提供PowerCenter的执行效率. 分区类型包括:Database partitioning.Hash Auto-keys.Hash User-ke ...
- Oracle_SQL(4) DDL 表和约束
数据库对象分为占存储空间的对象和不占存储存储空间的对象.占存储空间的对象主要包括:表.索引等.select distinct segment_type from dba_segments order ...
- 解决sublime3不能编辑插件default settings的问题
一.遇见问题 今天给sublime安装了View In Browser,想更改一下默认启动的浏览器 preferences-Package settings-View In Browser-setti ...
- SQL注入漏洞的原理
在平常生活中,我们登陆某网页,常常需要输入用户名和密码,点击登陆,即可登陆成功. 对于黑客来说,不需要用户名和密码,只输入 admin '— 也可以登陆成功. 黑客利用的这种漏洞就是SQL Injec ...
- 关于python的字符编码
理论特别多,金角大王讲的非常细致和深入浅出. 我来个简短的总结: python2的编码:默认是ascii,可以改变成gbk,utf-8等,但是用什么编码写的,就存储成什么编码.如果搬到linux,默认 ...
- linux 常用命令(三)ssh
linux 常用命令(三)SSH 一.SSH 安装及免密登陆 (1) SSH 安装并配置 CentOS 默认已安装了 SSH client.SSH server,打开终端执行如下命令进行检验 rpm ...
- 买茶叶想到的哪个比较便宜 x1/y1 >x2/y2 x代表多少钱 y代表 多少克 无聊的试炼
茶叶1 128元 200克 茶叶2 330元 160克 当然这个哪个便宜 一眼就知道了,这里不过抛砖引玉 128元 330元 200克 160克 我们把价钱用x表示 多少克 ...