java03类与对象相关问题
1.使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向他查询“你已经创建了几个对象”
1 package 第四五周;
2
3 public class Duixiangshu {
4 private static int n;
5
6 public Duixiangshu()
7 {
8 n++;
9 }//构造函数
10
11 public static int value()
12 {
13 return n;
14 }
15
16 public static void main(String[] args) {
17 // TODO 自动生成的方法存根
18 Duixiangshu a1=new Duixiangshu();
19 Duixiangshu a2=new Duixiangshu();
20 Duixiangshu a3=new Duixiangshu();
21 Duixiangshu a4=new Duixiangshu();
22 Duixiangshu a5=new Duixiangshu();
23 System.out.println("已创建对象个数为 :"+Duixiangshu.value());
24 }
25
26 }
运行结果:

2. 静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员,请编写代码验证你的猜想。
1 package 第四五周;
2
3 public class Shilibianliang {
4 int x=3;
5 static int y=4;
6 public static void main(String[] args) {
7 // TODO 自动生成的方法存根
8 Shilibianliang sl=new Shilibianliang();
9 System.out.println("实例成员"+sl.x);
10 System.out.println("静态成员"+y);
11 }
12
13 }
运行截图:

3.以下代码为何通不过编译

解答:
因为Foo类中自行定义了构造函数,而且是有参数的构造函数,但在主函数创建对象的却没有参数,导致无法创建对象,无法对其进行初始化,所以
没有通过编译。若自行定义构造函数,则创造对象时参数必须匹配。
4.请运行下列示例,观察输出结果,总结出“静态初始化块的执行顺序”。
1 package 第四五周;
2
3 class Root
4 {
5 static{
6 System.out.println("Root的静态初始化块");
7 }
8 {
9 System.out.println("Root的普通初始化块");
10 }
11 public Root()
12 {
13 System.out.println("Root的无参数的构造器");
14 }
15 }
16 class Mid extends Root
17 {
18 static{
19 System.out.println("Mid的静态初始化块");
20 }
21 {
22 System.out.println("Mid的普通初始化块");
23 }
24 public Mid()
25 {
26 System.out.println("Mid的无参数的构造器");
27 }
28 public Mid(String msg)
29 {
30 //通过this调用同一类中重载的构造器
31 this();
32 System.out.println("Mid的带参数构造器,其参数值:" + msg);
33 }
34 }
35 class Leaf extends Mid
36 {
37 static{
38 System.out.println("Leaf的静态初始化块");
39 }
40 {
41 System.out.println("Leaf的普通初始化块");
42 }
43 public Leaf()
44 {
45 //通过super调用父类中有一个字符串参数的构造器
46 super("Java初始化顺序演示");
47 System.out.println("执行Leaf的构造器");
48 }
49
50 }
51
52 public class Chushihua {
53
54 public static void main(String[] args) {
55 // TODO 自动生成的方法存根
56 new Leaf();
57 }
58
59 }
运行截图:

总结:
先执行静态初始化块,再依次执行每个类的普通块和构造器。
5.请依据代码运行结果,自行总结Java字段初始化的规律。
1 package 第四五周;
2
3 class InitializeBlockClass
4 {
5 {
6 filed =200;
7 }//初始化块
8 public int filed =100;
9 public InitializeBlockClass(int value)
10 {
11 this.filed=value;
12 }//带参数的构造函数
13 public InitializeBlockClass()
14 {
15
16 }//不带函数的构造函数
17 }
18 public class Chushihuakuai {
19
20 public static void main(String[] args) {
21 // TODO 自动生成的方法存根
22 InitializeBlockClass a=new InitializeBlockClass();
23 System.out.println("filed = :"+a.filed);
24 InitializeBlockClass b=new InitializeBlockClass(300);
25 System.out.println("filed = :"+b.filed);
26 }
27
28 }
运行截图:

总结:
若构造有参数的对象,则调用有参数的构造函数,成员数值由构造函数中的函数体决定。如果调用没有参数的构造函数,成员数值由初始化块外的语句决定,
如果初始化块外没有赋值语句,则以初始化块决定。
java03类与对象相关问题的更多相关文章
- python语法学习第十天--类与对象相关的BIF、魔法方法
一些相关的BIF: issubclass(class,classInfo)#判断是否为子类,classInfo可以为多个类的元组,其中一个是,返回true,一个类也被认为是自己的子类,object是所 ...
- 类和对象:一些相关的BIF - 零基础入门学习Python040
类和对象:一些相关的BIF 让编程改变世界 Change the world by program 一些类和对象相关的 BIF 今天我们来谈谈跟类和对象相关的一些BIF(内置函数): issubcla ...
- Objective-C Runtime 运行时之一:类与对象(转载)
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...
- Runtime 运行时之一:类与对象
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时能够更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交 ...
- Java类和对象详解,以及相关知识点
了解类和对象前,简单提及面向对象程序设计.面向对象程序设计就是通过对象来进行程序设计,对象表示一个可以明确标识的实体.例如:一个人.一本书.一个学校或一台电脑等等.每个对象都有自己独特的标识.状态和行 ...
- php有关类和对象的相关知识1
有关类和对象的相关知识 类的自动加载 类的自动加载是指,在外面的页面中,并不需要去“引入”(包含)类文件,但是程序会在需要一个类的时候就自动去“动态加载”该类. 什么叫做“需要一个类”?通常是这样的情 ...
- Python小白学习之路(五)—【类和对象】【列表】【列表相关功能】
类和对象 (简单的了解一下这个概念,初步有个印象,这个概念很重要,后面会着重讲) 类:具有相同属性和方法的对象的集合: 对象:万物皆对象: 概念很抽象(每当我看不到概念的时候,我就会通过举例来理解) ...
- php有关类和对象的相关知识2
与类有关的魔术常量: __CLASS__,:获取其所在的类的类名. __METHOD__:获取其所在的方法的方法名. class A{ function f1(){ echo __CLASS__: / ...
- 前端学PHP之面向对象系列第一篇——类和对象
× 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...
随机推荐
- THINKPHP_(3)_TP6中实现多层关联,第一个表关联第二个表查询出的数据,再关联第三个表
问题: (1)canxunDanwei数据表对应的模型中有一个关联是: public function canxunDanwei() { return $this->belongsTo('\ap ...
- MLIR中间表示和编译器框架
MLIR中间表示和编译器框架 TensorFlow生态系统包含许多在软件和硬件堆栈的多个级别上运行的编译器和优化器.作为TensorFlow的日常用户,使用不同类型的硬件(GPU,TPU,移动设备)时 ...
- 如何使用TVM Pass红外线
如何使用TVM Pass红外线 随着Relay / tir中优化遍数的增加,执行并手动维护其依赖关系变得很棘手.引入了一个基础结构来管理优化过程,将其应用于TVM堆栈中IR的不同层. Relay / ...
- gpgpu-sim卡分配程序设计实例分析
gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...
- python_reques接口测试框架,Excel作为案例数据源
一.框架菜单 1.1 common模块 1.2 其他 二.Excel接口测试案例编写 三.读取Excel测试封装(核心封装) excel_utils.py 读取Excel中的数据 import o ...
- IOS小组件(8):App与Widget数据共享
引言 Widget是一个迷你版的App,IOS有沙盒机制,不同App之间无法直接共享数据.组件和主App之间其实就是不同App的关系,所以也无法通过userdefaults.standard来传数 ...
- NX二次开发-获取WCS标识
函数:UF_CSYS_ask_wcs() 函数说明:获取工作坐标系对象的标识. 用法: 1 #include <uf.h> 2 #include <uf_csys.h> 3 e ...
- 常用的16个Java实用工具类,Java开发人员请收藏!
在Java中,实用程序类是一个定义一组执行常用功能的方法的类.这篇文章展示了最常用的Java实用程序类及其最常用的方法.类列表及其方法列表都按流行度排序.该数据基于GitHub随机选择的50,000个 ...
- java面试技巧及层次。
不断的积累,从打算找工作之日起,就要坚持在每天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了. 答题时,先答是什么,再答有什么作用和要注意什么,这里给人的 ...
- 【模拟8.09】轰炸行动(bomb) (tarjan缩点和拓扑排序)
很显然的tarjan嘛......拓扑也很容易想到 我是不会说我因为懒把拓扑改成DFS结果扔了40分然后就是纯板子了 因为我们一条路径的点如果不是一个一个炸,同时炸两个,他们一定会相互到达.... 找 ...