1. fda
  2. dfa
  3. 第三题u
    package net.mindview.typeinfo.test4;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List; abstract class Shape {
    void draw(){
    /*
    * 重点在这里:
    * this指代的是实例对象,由于使用+连接字符串, 会自动调用对象的toString()方法.
    */
    System.out.println(this + ".draw()");
    } public abstract String toString();
    } class Circle extends Shape{
    @Override
    public String toString() {
    return "Circle";
    }
    } class Square extends Shape{
    @Override
    public String toString() {
    return "Square";
    }
    } class Triangle extends Shape{
    @Override
    public String toString() {
    return "Triangle";
    }
    } //菱形
    class Rhomboid extends Shape{
    @Override
    public String toString() {
    return "Rhomboid";
    }
    } public class Shapes { public static void main(String[] args) {
    List<Shape> shapes = new ArrayList<Shape>(Arrays.asList(
    new Circle(), new Square(), new Triangle(), new Rhomboid())); for(Shape shape:shapes){
    shape.draw();
    } for(int i=;i<shapes.size(); i++){
    Shape shape = shapes.get(i);
    if(i == ){
    Rhomboid r = (Rhomboid)shape;
    Circle c = (Circle)shape;
    }
    }
    }
    }

    运行结果:

    Circle.draw()
    Square.draw()
    Exception in thread "main" Triangle.draw()
    Rhomboid.draw()
    java.lang.ClassCastException: net.mindview.typeinfo.test4.Rhomboid cannot be cast to net.mindview.typeinfo.test4.Circle
    at net.mindview.typeinfo.test4.Shapes.main(Shapes.java:63)

    不可以向下转型到Circle

  4. 第四题

    package net.mindview.typeinfo.test4;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List; abstract class Shape {
    void draw(){
    /*
    * 重点在这里:
    * this指代的是实例对象,由于使用+连接字符串, 会自动调用对象的toString()方法.
    */
    System.out.println(this + ".draw()");
    } public abstract String toString();
    } class Circle extends Shape{
    @Override
    public String toString() {
    return "Circle";
    }
    } class Square extends Shape{
    @Override
    public String toString() {
    return "Square";
    }
    } class Triangle extends Shape{
    @Override
    public String toString() {
    return "Triangle";
    }
    } //菱形
    class Rhomboid extends Shape{
    @Override
    public String toString() {
    return "Rhomboid";
    }
    } public class Shapes {
    public static void main(String[] args) {
    List<Shape> shapes = new ArrayList<Shape>(Arrays.asList(
    new Circle(), new Square(), new Triangle(), new Rhomboid())); for(Shape shape:shapes){
    shape.draw();
    } for(int i=;i<shapes.size(); i++){
    Shape shape = shapes.get(i);
    if(i == ){
    //添加instanceof判断
    if (shape instanceof Rhomboid){
    Rhomboid r = (Rhomboid)shape;
    }
    if(shape instanceof Circle){
    Circle c = (Circle)shape;
    }
    }
    }
    }
    }

    使用Class.newInstance方法,必须有一个无参构造方法

  5. 第五题:
    package net.mindview.typeinfo;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List; abstract class Shape {
    void draw(){
    /*
    * 重点在这里:
    * this指代的是实例对象,由于使用+连接字符串, 会自动调用对象的toString()方法.
    */
    System.out.println(this + ".draw()");
    } void rotate(){
    Class<? extends Shape> clazz = this.getClass();
    if(!clazz.getSimpleName().equals("Circle")){
    System.out.println("旋转"+ this);
    }else{
    System.out.println(this+"不需要旋转");
    }
    } public abstract String toString();
    } class Circle extends Shape{
    @Override
    public String toString() {
    return "Circle";
    }
    } class Square extends Shape{
    @Override
    public String toString() {
    return "Square";
    }
    } class Triangle extends Shape{
    @Override
    public String toString() {
    return "Triangle";
    }
    } //菱形
    class Rhomboid extends Shape{
    @Override
    public String toString() {
    return "Rhomboid";
    }
    } public class Shapes { public static void main(String[] args) {
    List<Shape> shapes = new ArrayList<Shape>(Arrays.asList(
    new Circle(), new Square(), new Triangle(), new Rhomboid())); for(Shape shape:shapes){
    shape.draw();
    shape.rotate();
    } /*for(int i=0;i<shapes.size(); i++){
    Shape shape = shapes.get(i);
    if(i == 3){
    Rhomboid r = (Rhomboid)shape;
    Circle c = (Circle)shape;
    }
    }*/
    }
    }
  6. 第七题
    package net.mindview.typeinfo.test8;
    
    import java.util.HashSet;
    import java.util.Set; interface A {}
    interface B {}
    interface C {} class D implements B{
    private int di=;
    private String dname="";
    static{
    System.out.println("this is D"); }
    } class E extends D implements A, B, C{
    private int ei=;
    private String ename="";
    static{
    System.out.println("this is E"); }
    } class F extends E implements A {
    private int fi=;
    private String fname="";
    static{
    System.out.println("this is F"); }
    }
    /**
    * 接受任意对象作为参数, 递归打印出该对象继承体系中所有的的类.
    * 包括继承的父类, 和实现的接口
    *
    * 分析: 一个类智能继承一个父类, 可以实现多个接口.
    * 父类可以继承一个类,实现多个接口. 实现的接口可能和子类重复, 因此需要去重.
    * 递归实现
    * @author samsung
    *
    */
    class G {
    public void printSuperClass(Class c){
    if(c == null) return ; System.out.println(c.getName()); //得到这个类的接口
    Class[] interfaces = c.getInterfaces(); for(Class interfaceClass:interfaces){
    printSuperClass(interfaceClass);
    }
    printSuperClass(c.getSuperclass());
    }
    } public class Test8 {
    public static void main(String[] args) {
    G g = new G();
    g.printSuperClass(F.class);
    }
    }

    运行结果:

    net.mindview.typeinfo.test8.F
    net.mindview.typeinfo.test8.A
    net.mindview.typeinfo.test8.E
    net.mindview.typeinfo.test8.A
    net.mindview.typeinfo.test8.B
    net.mindview.typeinfo.test8.C
    net.mindview.typeinfo.test8.D
    net.mindview.typeinfo.test8.B
    java.lang.Object
  7. 第八题
    package net.mindview.typeinfo.test8;
    
    interface A {}
    interface B {}
    interface C {} class D {
    static{
    System.out.println("this is D"); }
    } class E extends D implements A, B, C{
    static{
    System.out.println("this is E"); }
    } class F extends E {
    static{
    System.out.println("this is F"); }
    } class G {
    public void printSuperClass(Class c){
    Class upClass = c.getSuperclass(); try {
    System.out.println(upClass.newInstance());
    } catch (InstantiationException e) {
    System.out.println("实例化Instance 失败");
    System.exit();
    } catch (IllegalAccessException e) {
    System.out.println("实例化Instance 失败");
    System.exit();
    }
    if(upClass.getSuperclass() != null ){
    printSuperClass(upClass);
    }
    }
    } public class Test8 {
    public static void main(String[] args) {
    G g = new G();
    g.printSuperClass(F.class);
    }
    }

    运行结果:

    this is D
    this is E
    net.mindview.typeinfo.test8.E@17cb0a16
    net.mindview.typeinfo.test8.D@1303368e
    java.lang.Object@37f2ae62
  8. 第九题
    package net.mindview.typeinfo.test9;
    
    import java.lang.reflect.Field;
    
    interface A {}
    interface B {}
    interface C {} class D {
    public int i=;
    public String name="";
    static{
    System.out.println("this is D"); }
    } class E extends D implements A, B, C{
    public int i=;
    public String name="";
    static{
    System.out.println("this is E"); }
    } class F extends E {
    public int i=;
    public String name="";
    static{
    System.out.println("this is F"); }
    } class G {
    public void printSuperClass(Class c){
    Class upClass = c.getSuperclass();
    try {
    //获取类中的字段
    Field[] fs = upClass.getDeclaredFields();
    System.out.println(fs.length);
    for(Field f:fs){
    //打印字段名
    System.out.println(f.getName());
    //获取字段值
    Object value = upClass.getDeclaredField(f.getName());
    System.out.println(value);
    }
    } catch (Exception e1) {
    e1.printStackTrace();
    } try {
    System.out.println(upClass.newInstance());
    } catch (InstantiationException e) {
    System.out.println("实例化Instance 失败");
    System.exit();
    } catch (IllegalAccessException e) {
    System.out.println("实例化Instance 失败");
    System.exit();
    }
    if(upClass.getSuperclass() != null ){
    printSuperClass(upClass);
    }
    }
    } public class Test9 {
    public static void main(String[] args) {
    G g = new G();
    g.printSuperClass(F.class);
    }
    }

    运行结果:

    i
    public int net.mindview.typeinfo.test9.E.i
    name
    public java.lang.String net.mindview.typeinfo.test9.E.name
    this is D
    this is E
    net.mindview.typeinfo.test9.E@1440578d i
    public int net.mindview.typeinfo.test9.D.i
    name
    public java.lang.String net.mindview.typeinfo.test9.D.name
    net.mindview.typeinfo.test9.D@26f04d94 java.lang.Object@38a3c5b6
  9. 第十题
    package net.mindview.typeinfo.test10;
    class Pot{}
    public class Test10 {
    public static void judgeType(Object c){
    Class arrType = c.getClass().getComponentType();
    System.out.println(arrType.getName());
    }
    public static void main(String[] args) {
    judgeType(new char[]);
    judgeType(new String[]);
    judgeType(new long[]);
    judgeType(new boolean[]);
    judgeType(new Pot[]); } }

    运行结果:

    char
    java.lang.String
    long
    boolean
    net.mindview.typeinfo.test10.Pot
  10. f
  11. asf
  12. a
  13. 第十四题
    package net.mindview.typeinfo.test14;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Random; import net.mindview.typeinfo.factory.Factory; /**
    * 部件类
    *
    * 比如: 有过滤器部件, 皮带部件等.
    * 空气净化器中需要有过滤器部件, 因此要有一个制造空气净化器的过滤器的工厂
    * 汽车尾气净化器也需要有过滤器部件, 因此需要一个制造汽车尾气的过滤器的工厂
    *
    * 皮带
    * 车轮需要皮带, 因此需要一个制造车轮的皮带的工厂
    * @author samsung
    *
    */
    class Part{
    @Override
    public String toString() {
    return this.getClass().getSimpleName();
    } //目前已注册的部件工厂
    static List<String> partNames = Arrays.asList(
    "net.mindview.typeinfo.test14.FuelFilter",
    "net.mindview.typeinfo.test14.AirFilter",
    "net.mindview.typeinfo.test14.CabinFilter",
    "net.mindview.typeinfo.test14.OilFilter",
    "net.mindview.typeinfo.test14.FanBelt",
    "net.mindview.typeinfo.test14.GeneratorBelt",
    "net.mindview.typeinfo.test14.PowerSteeringBelt" );
    static{ } private static Random rand = new Random(); //随机得到一个已注册的部件工厂, 并制造部件
    public static Part createRandom(){
    int n = rand.nextInt(partNames.size());
    try {
    return (Part) Class.forName(partNames.get(n)).newInstance();
    } catch (InstantiationException e) {
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    return null;
    }
    } //过滤器部件
    class Filter extends Part { } //燃料过滤器部件
    class FuelFilter extends Filter {
    public static class Factory implements net.mindview.typeinfo.factory.Factory<FuelFilter>{ @Override
    public FuelFilter create() {
    return new FuelFilter();
    }
    }
    } //空气净化器部件
    class AirFilter extends Filter {
    public static class Factory implements net.mindview.typeinfo.factory.Factory<AirFilter>{
    @Override
    public AirFilter create() {
    return new AirFilter();
    }
    }
    } //机舱空气过滤器部件
    class CabinFilter extends Filter {
    public static class Factory implements net.mindview.typeinfo.factory.Factory<CabinFilter>{
    @Override
    public CabinFilter create() {
    return new CabinFilter();
    }
    }
    } //燃油过滤器部件
    class OilFilter extends Filter {
    public static class Factory implements net.mindview.typeinfo.factory.Factory<OilFilter>{
    @Override
    public OilFilter create() {
    return new OilFilter();
    }
    }
    } //皮带部件
    class Belt extends Part{} //风扇皮带部件
    class FanBelt extends Belt {
    public static class Factory implements net.mindview.typeinfo.factory.Factory<FanBelt>{
    @Override
    public FanBelt create() {
    return new FanBelt();
    }
    }
    } //发动机皮带部件
    class GeneratorBelt extends Belt {
    public static class Factory implements net.mindview.typeinfo.factory.Factory<GeneratorBelt>{
    @Override
    public GeneratorBelt create() {
    return new GeneratorBelt();
    }
    }
    } //转向动力装置皮带部件
    class PowerSteeringBelt extends Belt {
    public static class Factory implements net.mindview.typeinfo.factory.Factory<PowerSteeringBelt>{
    @Override
    public PowerSteeringBelt create() {
    return new PowerSteeringBelt();
    }
    }
    } /**
    * 查询目前已注册的工厂类
    * @author samsung
    *
    */
    public class RegisteredFactories { public static void main(String[] args) {
    for(int i=;i<;i++){
    System.out.println(Part.createRandom()); } } }
  14. 第十五题: 内容太多, 直接参考demo
  15. af
  16. a
  17. 第十八题:
    package net.mindview.typeinfo;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Method;
    import java.util.regex.Pattern; public class ShowMethods {
    private ShowMethods(){}
    private static String usage = ""
    + "usage:\n"
    + "ShowMethods qualified.class.name\n"
    + "To show all methods in class or:\n"
    + "ShowMethods qualified.class.name. word\n"
    + "To search for methodds invoiving 'word'"; private static Pattern p = Pattern.compile("\\w+\\.");
    public static void main(String[] args) {
    if(args.length<){
    System.out.println(usage);
    System.exit();
    } int lines = ;
    try {
    Class<?> c = Class.forName(args[]);
    //getMethods获取的是整个继承树中所有的方法
    Method[] methods = c.getMethods();
    //获取已有的构造器
    Constructor[] ctors = c.getConstructors(); if(args.length == ){
    //打印所有继承树中的方法名
    for(Method method: methods){
    System.out.println(p.matcher(method.toString()).replaceAll(""));
    }
    //打印全部构造器
    for(Constructor ctor: ctors){
    System.out.println(p.matcher(ctor.toString()).replaceAll(""));
    }
    lines = methods.length + ctors.length;
    }else {
    //打印指定类中的方法
    for(Method method: methods){
    if(method.toString().indexOf(args[]) != -){
    System.out.println(p.matcher(method.toString()).replaceAll(""));
    lines++;
    }
    }
    //打印构造器
    for(Constructor ctor :ctors){
    if(ctor.toString().indexOf(args[])!=-){
    System.out.println(p.matcher(ctor.toString()).replaceAll(""));
    lines++;
    }
    }
    } } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    } }
  18. af
  19. a
  20. f
  21. af
  22. a
  23. fa
  24. f

java编程思想第四版第十四章 类型信息习题的更多相关文章

  1. Java编程思想(第4版) 中文清晰PDF完整版

    Java编程思想(第4版) 中文清晰PDF完整版 [日期:2014-08-11] 来源:Linux社区  作者:Linux [字体:大 中 小]     <Java编程思想>这本书赢得了全 ...

  2. 20190908 On Java8 第十九章 类型信息

    第十九章 类型信息 RTTI(RunTime Type Information,运行时类型信息)能够在程序运行时发现和使用类型信息. Java 主要有两种方式在运行时识别对象和类信息: "传 ...

  3. 关于 java编程思想第五版 《On Java 8》

    On Java 8中文版 英雄召集令 这是该项目的GITHUB地址:https://github.com/LingCoder/OnJava8 广招天下英雄,为开源奉献!让我们一起来完成这本书的翻译吧! ...

  4. java编程思想第四版第十四章 类型信息总结

    1. Class 对象: 所有的类都是在对其第一次使用的时候,动态加载到JVM中的.当程序创建第一个对类的静态成员的引用时,就会加载这个类.这说明构造器也是类的静态方法.即使在构造器之前并没有stat ...

  5. Java编程思想 4th 第2章 一切都是对象

    Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情通过类对象协作来完成 ...

  6. 重新精读《Java 编程思想》系列之组合与继承

    Java 复用代码的两种方式组合与继承. 组合 组合只需将对象引用置于新类中即可. 比如我们有一个B类,它具有一个say方法,我们在A类中使用B类的方法,就是组合. public class B { ...

  7. JAVA编程思想(第四版)学习笔记----4.8 switch(知识点已更新)

    switch语句和if-else语句不同,switch语句可以有多个可能的执行路径.在第四版java编程思想介绍switch语句的语法格式时写到: switch (integral-selector) ...

  8. java编程思想第四版中net.mindview.util包下载,及源码简单导入使用

    在java编程思想第四版中需要使用net.mindview.util包,大家可以直接到http://www.mindviewinc.com/TIJ4/CodeInstructions.html 去下载 ...

  9. 《Java编程思想第四版》附录 B 对比 C++和 Java

    <Java编程思想第四版完整中文高清版.pdf>-笔记 附录 B 对比 C++和 Java “作为一名 C++程序员,我们早已掌握了面向对象程序设计的基本概念,而且 Java 的语法无疑是 ...

随机推荐

  1. 代码审计-thinkphp3.2.3框架漏洞sql注入

    开始复现审计一下tp3和tp5的框架漏洞,当个练习吧. 涉及注入的方法为where() table() delete()等. 环境 tp3.2.3 : 0x01 注入成因 测试代码: public f ...

  2. Python 之Re模块(正则表达式)

    一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配. 二.正则表达式中常用的字符含义 1.普通字符和11个元字符: ...

  3. docker3-镜像的使用

    基本使用命令: [root@ipha-dev71- docker]# docker search python # 搜索镜像 [root@ipha-dev71- docker]# docker pul ...

  4. 【Autofac打标签模式】PropertySource和Value

    [ Autofac打标签模式]开源DI框架扩展地址: https://github.com/yuzd/Autofac.Annotation/wiki *:first-child { margin-to ...

  5. Orleans 知多少 | 3. Hello Orleans

    1. 引言 是的,Orleans v3.0.0 已经发布了,并已经完全支持 .NET Core 3.0. 所以,Orleans 系列是时候继续了,抱歉,让大家久等了. 万丈高楼平地起,这一节我们就先来 ...

  6. 在Eclipse中开发MapReduce程序

    一.Eclipse的安装与设置 1.在Eclipse官网上下载eclipse-jee-oxygen-3a-linux-gtk-x86_64.tar.gz文件并将其拷贝到/home/jun/Resour ...

  7. unityweb Request请求

    UnityWebRequest是新的网络请求Api,分为LLApi和HLApi,其中LLApi为低级api,所谓低级api是指只是提供最基本的api接口,然后需要通过不同的参数来确定请求方式.为此un ...

  8. requests+lxml+xpath爬取豆瓣电影

    (1)lxml解析html from lxml import etree #创建一个html对象 html=stree.HTML(text) result=etree.tostring(html,en ...

  9. 品优购(IDEA版)-第一天

    # 品优购(IDEA版)-第一天 品优购IDEA版应该是2019年的新项目.目前只有视频.资料其他都还是旧的. ## 1.学习目标 1:了解电商行业特点以及理解电商的模式 2:了解整体品优购的架构特点 ...

  10. Prometheus 介绍详解

    Prometheus 介绍 Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统.自2012年成为社区开源项目,拥有非常活跃的开发人员和用户社区.为强调开源及独立维护,P ...