java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题...

  1 /*
  2 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中,
  3 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行
  4 */
  5 import static java.lang.System.out;
  6 
  7 public class PersonDemo
  8 {
  9     public static void main(String[] args)
 10     {
 11          //*********测试父类与子类之间的循环调用的问题
 12         out.println("main1");
 13 
 14         Father f = new Father();
 15         
 16         out.println("main2");
 17         
 18         f.show();
 19         
 20         out.println("main3");
 21 
 22         //*********测试两个无关类的循环调用的问题               
 23               
 24                 MyClass11 m1=new MyClass11();
 25             m1.myOut();
 26     }
 27 }
 28 
 29 class Father
 30 {
 31     public Son s ; //=new Son();
 32         
 33         /*
 34               public Song s= new Son(), 注意在这里进行初始化操作相当于在构造函数中进行初始化,会导致栈溢出, why?
 35               在主函数中我们产生了一个Father对象, 然后在new一个Son对象的过程中,Son对象调用其父类的构造方法来完成
 36               一些子类中包含父类成员的初始化,最终导致了循环调用,最终栈溢出
 37         */
 38     public newSon ns =null; // new newSon();
 39     
 40     public Father()
 41     {
 42         this(10);
 43         System.out.println("Father");
 44     }
 45 
 46     public Father(int a)
 47     {
 48         //this();很显然, 加上这一句就会形成构造函数递归调用!哈哈。。。
 49     }
 50     
 51     public void show()
 52     {
 53         s = new Son();
 54                 /*
 55               如果我们将 s 的赋值操作放在这里, 也就是去掉 public Son s = new Son()的初始化,这样就不会导致栈溢出了
 56                     看一看也就会明白了, new Son()时会调用父类Father的构造方法来完成Son的一些成员的初始化,但是其父类构造
 57                     函数中没有行循环调用!
 58                 */
 59         ns = new newSon();
 60         
 61         System.out.println("father show");
 62 
 63         s.show();
 64         ns.show();
 65     }
 66     
 67     public class newSon extends Father//内部类同样会导致上面的问题!
 68     {
 69         public newSon()
 70         {
 71             System.out.println("newSon");
 72         }
 73         
 74         public void show()
 75         {
 76             System.out.println("newSon show");
 77         }
 78     }
 79 }
 80 
 81 class Son extends Father
 82 {
 83     public int a = 20;
 84     
 85     public Son()
 86     {
 87         super();
 88         System.out.println("Son");
 89     }
 90     
 91     public void show()
 92     {
 93         System.out.println("Son show");
 94     }
 95 }
 96 
 97 class MyClass11{
 98   
 99     MyClass22 m2;
100    //MyClass22 m2=new MyClass22();//这样写会导致循环调用问题
101    
102    public MyClass11(){
103        //m2=new MyClass22();//这样写和上面的错误是一样的
104    }
105    public void show(){
106       System.out.println("This MyClass11");
107    }
108    public void myOut(){
109        m2=new MyClass22();//m2的赋值放在这里
110        m2.show();
111    }
112 }
113 
114 class MyClass22{
115    
116    MyClass11 m1;
117    public MyClass22(){
118        m1=new MyClass11();//移位main()函数中没有定义MyClass22的对象,所以这句赋值不会导致循环调用的问题,只需要将MyClass11中的赋值操作更改一下就好了
119    }
120    public void show(){
121       System.out.println("This MyClass22");
122    }
123    public void myOut(){
124        m1.show();
125    }
126 }

 

转载于:https://www.cnblogs.com/hujunzheng/p/3813599.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

liunx php的项目地址,在 Linux 配置 PHP 项目

在 Linux 配置 PHP 项目一, 搭建测试环境软件环境:(PHP 项目)PHP5.4Apache(httpd2.4)mysql5.7二, 安装1挂载:1. 把 iso 的镜像文件放到虚拟机 Linux 的 CD/ROM(在右下角 (网络适配器 / 桥接模式) 旁有个光盘, 点击连接, 之后页面出现一个光盘)2. 使用挂载命令, 把 CD/ROM 设备里…

springwebflux 页面_【SpringBoot WEB系列】WebFlux静态资源配置与访问

上一篇博文介绍SpringMVC的静态资源访问,那么在WebFlux中,静态资源的访问姿势是否一致呢I. 默认配置与SpringBoot的默认配置一样,WebFlux同样是classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/…

java中TreeSet集合如何实现元素的判重

1 /*2 看一下部分的TreeSet源码....3 public class TreeSet<E> extends AbstractSet<E>4 implements NavigableSet<E>, Cloneable, java.io.Serializable5 {6 private transient NavigableMap<E,Object> m;7 //NavigableMap继承SortedMap&…

php中改变函数路由,通过PHP重启路由器以更换IP(原创)

在采集大批量数据时常常会触发对方服务器的“自我保护”&#xff0c;请求过于频繁就限制访问。这时需要停留很长一段时间(十几分钟到几十分钟不等)才能恢复访问&#xff0c;这样采集数据的速度就受到非常大的限制。解决方法有两个&#xff1a;1 通过图片识别绕过验证码机制&…

axure 画小程序效果图_APP详情页如何用Axure画出来

详情页是App原型中比较复杂的页面类型&#xff0c;熟悉它的常用套路有助于快速画出。之前的文章已经讲解了APP常见功能中的页面模板、下导航、上导航、列表页怎么画出来&#xff0c;请继续关注浪子教你画APP原型后续的其他功能模块。APP详情页往往包含上导航&#xff0c;内容区…

HashSet中实现不插入重复的元素

/* 看一下部分的HashSet源码.... public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, java.io.Serializable {static final long serialVersionUID -5024744406713321676L;private transient HashMap<E,Object> map;privat…

tuxedo错误码6_TUXEDE返回的所有错误代码

TUXEDE返回的所有错误代码tuxedo/include/atmi.h定于了TUXEDE返回的所有错误代码。/** tperrno values - error codes* The man pages explain the context in which the following error codes* can return.*/#define TPMINVAL 0 /* minimum error message */#define TPEABORT…

java中finally和return的执行顺序

注意&#xff1a;return的位置。。。从这几个例子中可以看到&#xff0c;如果try之前没有有条件的return&#xff0c;则try..catch..finally语句块中的语句都是顺序执行&#xff08;如果try中或者catch中 有return语句&#xff0c;那么先执行该return&#xff0c;然后执行final…

oracle如何设置权限,ORACLE的权限设置

创建用户create user abc identified by 123;----------------------------------------------------授权grant create session,create table to abcgrant create sysdba to database----------------------------------------------------然后conn abc密码&#xff1a;123----…

有关try..catch..finally处理异常的总结

//看一下下面的程序&#xff0c;你能正确的写出不同的testEx2()方法时&#xff0c;程序的最终打印出来的数据吗....先不要看下面的答案 public class ExceptionTest { public ExceptionTest() { } boolean testEx() throws Exception { boolean ret true; try { ret te…

oracle key的含义,v$session SERIAL#字段的含义

liyx&#xff1a;#!/bin/bash||#Write by liyx||||#数据库服务器地址||DBHOSTlocalhost||#数据库登录名||USERNAMEroot||#数据库密码||PASSWORDroot||#需要备份的数据库 或 输入类似 db1 db2 的列表清单 例 DBNAMES"all"||DBNAMES"ess_simple"||#备份MYSQL…

java.util.Scanner简单应用

import java.util.Scanner; import java.io.*; public class FileScannerTest{public static void main(String args[]){ //**************Scanner 的一般用//1.public Scanner(InputStream source),利用InputStream 对象进行构造Scanner myScanner1 new Scanner(System.in);w…

oracle能查dml记录么,如何查询DML操作的详细记录

可以通过flashback_transaction_qurey视图查询eg:SQL> desc flashback_transaction_queryName Null? Type----------------------------------------- -------- ----------------------------XID …

krpano 场景切换 通知_一个基于Vulkan的异步场景加载设计

异步场景加载基本流程验证完成。此方法理论上只需要使用3个Vulkan的指令队列。对于移动平台上的Vulkan&#xff0c;指令队列数量极少&#xff0c;比如Adreno640只有3个指令队列可用。所以理论上这一设计也适合目前的移动平台使用。(1) graphic_queue&#xff1a;用于完成当前场…

oracle 数据库回闪,各种数据库闪回的总结

本帖最后由 guoyJoe 于 2013-3-26 21:15 编辑一、Fashback Query闪回查询:Books-->APP-->Application Developers Guide - Fundamentals-->Flashback&#xff11;、应用Flashback Query查询过去的数据select * from t1 as of scn 44545454;select * from t1 as of tim…

poj 2528 Mayor's posters(线段树+离散化)

1 /*2 poj 2528 Mayors posters 3 线段树 离散化4 5 离散化的理解&#xff1a;6 给你一系列的正整数&#xff0c; 例如 1&#xff0c; 4 &#xff0c; 100&#xff0c; 1000000000&#xff0c; 如果利用线段树求解的话&#xff0c;很明显7 会导致内存的耗尽。所以我们做一…

汉仪尚巍手书有版权吗_为什么“汉仪尚巍手书”会大行天下?

昨夜&#xff0c;我写了篇文章《莫选最丑尚巍体&#xff0c;要选美丽中国字&#xff01;》发到朋友圈、微信群里&#xff0c;得到了一些朋友的反馈&#xff0c;有位朋友居然还认识尚巍&#xff0c;把他的微信推给了我。我加了尚巍的微信&#xff0c;待他通过后&#xff0c;便连…

如何查询linux服务器的网卡,Linux服务器如何查看有没有无线网卡

还是实验室那台服务器&#xff0c;连不上网。有没有界面&#xff0c;所以想着如何用一些命令来链接上热点。当然&#xff0c;在Linux下链接wifi没有win下那么一点就好了&#xff01;首先我们需要的基本条件就是&#xff1a; 服务器上有无线网卡。[roottomato2 ~]# iwconfiglo n…

java中如何生成可执行的jar文件

java中如何生成可执行的jar文件最简单的方法就是&#xff1a;jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$myAct ionListener.class CardLayoutDemo.class myClosingListener.class myPanel.class jar命令为java自带的专用打包工具&#xff1b; c…

ecs硬盘数据迁移_阿里云ECS新增数据盘以及迁移数据方法

第一、检查数据占用以及数据盘我们从探针可以看到&#xff0c;本身有30GB的硬盘只用到不到10GB&#xff0c;而且系统和WDCP面板/网站都系统盘中。通过fdisk -l 我们可以看到还有21GB的没有格式化和挂载&#xff0c;系统只用到10.7GB。第二、对数据盘分区fdisk /dev/xvdb第三、查…