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类与对象相关问题的更多相关文章

  1. python语法学习第十天--类与对象相关的BIF、魔法方法

    一些相关的BIF: issubclass(class,classInfo)#判断是否为子类,classInfo可以为多个类的元组,其中一个是,返回true,一个类也被认为是自己的子类,object是所 ...

  2. 类和对象:一些相关的BIF - 零基础入门学习Python040

    类和对象:一些相关的BIF 让编程改变世界 Change the world by program 一些类和对象相关的 BIF 今天我们来谈谈跟类和对象相关的一些BIF(内置函数): issubcla ...

  3. Objective-C Runtime 运行时之一:类与对象(转载)

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...

  4. Runtime 运行时之一:类与对象

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时能够更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交 ...

  5. Java类和对象详解,以及相关知识点

    了解类和对象前,简单提及面向对象程序设计.面向对象程序设计就是通过对象来进行程序设计,对象表示一个可以明确标识的实体.例如:一个人.一本书.一个学校或一台电脑等等.每个对象都有自己独特的标识.状态和行 ...

  6. php有关类和对象的相关知识1

    有关类和对象的相关知识 类的自动加载 类的自动加载是指,在外面的页面中,并不需要去“引入”(包含)类文件,但是程序会在需要一个类的时候就自动去“动态加载”该类. 什么叫做“需要一个类”?通常是这样的情 ...

  7. Python小白学习之路(五)—【类和对象】【列表】【列表相关功能】

    类和对象 (简单的了解一下这个概念,初步有个印象,这个概念很重要,后面会着重讲) 类:具有相同属性和方法的对象的集合: 对象:万物皆对象: 概念很抽象(每当我看不到概念的时候,我就会通过举例来理解) ...

  8. php有关类和对象的相关知识2

    与类有关的魔术常量: __CLASS__,:获取其所在的类的类名. __METHOD__:获取其所在的方法的方法名. class A{ function f1(){ echo __CLASS__: / ...

  9. 前端学PHP之面向对象系列第一篇——类和对象

    × 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...

随机推荐

  1. Django(49)drf解析模块源码分析

    前言 上一篇分析了请求模块的源码,如下: def initialize_request(self, request, *args, **kwargs): """ Retu ...

  2. 如何在框架外部自定义C++ OP

    如何在框架外部自定义C++ OP 通常,如果PaddlePaddle的Operator(OP)库中没有所需要的操作,建议先尝试使用已有的OP组合,如果无法组合出您需要的操作,可以尝试使用paddle. ...

  3. YOLO3升级优化版!Poly-YOLO:支持实例分割!

    YOLO3升级优化版!Poly-YOLO:支持实例分割! POLY-YOLO: HIGHER SPEED, MORE PRECISE DETECTION AND INSTANCE SEGMENTATI ...

  4. 利用NVIDIA NGC的TensorRT容器优化和加速人工智能推理

    利用NVIDIA NGC的TensorRT容器优化和加速人工智能推理 Optimizing and Accelerating AI Inference with the TensorRT Contai ...

  5. Rethinking Training from Scratch for Object Detection

    Rethinking Training from Scratch for Object Detection 一. 概述 正常训练目标检测的流程分为以下几种: 在imagenet上进行预训练,然后在特定 ...

  6. 并发王者课-铂金2:豁然开朗-“晦涩难懂”的ReadWriteLock竟如此妙不可言

    欢迎来到<并发王者课>,本文是该系列文章中的第15篇. 在上篇文章中,我们介绍了Java中锁的基础Lock接口.在本文中,我们将介绍Java中锁的另外一个重要的基本型接口,即ReadWri ...

  7. 如何避免Nginx将url decode

    灵感来自:https://my.oschina.net/jastme/blog/528541 这是最近玩微服务架构遇到的一个情况,因为Spring Boot 1.5的网关不支持websocket的转发 ...

  8. echarts迁移图动态加载

    迁移图 获取迁移城市的经纬度 可以调用高德的接口,实现根据地名找寻经纬度的方法 #!/usr/bin/env python3 #-*- coding:utf-8 -*- ''' 利用高德地图api实现 ...

  9. NOIP模拟测试21「折纸&#183;不等式」

    折纸 题解 考试时无限接近正解,然而最终也只是接近而已了 考虑模拟会爆炸,拿手折纸条试一试,很简单 考你动手能力 代码 #include<bits/stdc++.h> using name ...

  10. 【.NET 与树莓派】TM1638 模块的按键扫描

    上一篇水文中,老周马马虎虎地介绍 TM1638 的数码管驱动,这个模块除了驱动 LED 数码管,还有一个功能:按键扫描.记得前面的水文中老周写过一个 16 个按键的模块.那个是我们自己写代码去完成键扫 ...