java编程思想第四版第十四章 类型信息习题
- fda
- dfa
- 第三题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
第四题
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方法,必须有一个无参构造方法
- 第五题:
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;
}
}*/
}
} - 第七题
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 - 第八题
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 - 第九题
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 - 第十题
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 - f
- asf
- a
- 第十四题
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()); } } } - 第十五题: 内容太多, 直接参考demo
- af
- a
- 第十八题:
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();
}
} } - af
- a
- f
- af
- a
- fa
- f
java编程思想第四版第十四章 类型信息习题的更多相关文章
- Java编程思想(第4版) 中文清晰PDF完整版
Java编程思想(第4版) 中文清晰PDF完整版 [日期:2014-08-11] 来源:Linux社区 作者:Linux [字体:大 中 小] <Java编程思想>这本书赢得了全 ...
- 20190908 On Java8 第十九章 类型信息
第十九章 类型信息 RTTI(RunTime Type Information,运行时类型信息)能够在程序运行时发现和使用类型信息. Java 主要有两种方式在运行时识别对象和类信息: "传 ...
- 关于 java编程思想第五版 《On Java 8》
On Java 8中文版 英雄召集令 这是该项目的GITHUB地址:https://github.com/LingCoder/OnJava8 广招天下英雄,为开源奉献!让我们一起来完成这本书的翻译吧! ...
- java编程思想第四版第十四章 类型信息总结
1. Class 对象: 所有的类都是在对其第一次使用的时候,动态加载到JVM中的.当程序创建第一个对类的静态成员的引用时,就会加载这个类.这说明构造器也是类的静态方法.即使在构造器之前并没有stat ...
- Java编程思想 4th 第2章 一切都是对象
Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情通过类对象协作来完成 ...
- 重新精读《Java 编程思想》系列之组合与继承
Java 复用代码的两种方式组合与继承. 组合 组合只需将对象引用置于新类中即可. 比如我们有一个B类,它具有一个say方法,我们在A类中使用B类的方法,就是组合. public class B { ...
- JAVA编程思想(第四版)学习笔记----4.8 switch(知识点已更新)
switch语句和if-else语句不同,switch语句可以有多个可能的执行路径.在第四版java编程思想介绍switch语句的语法格式时写到: switch (integral-selector) ...
- java编程思想第四版中net.mindview.util包下载,及源码简单导入使用
在java编程思想第四版中需要使用net.mindview.util包,大家可以直接到http://www.mindviewinc.com/TIJ4/CodeInstructions.html 去下载 ...
- 《Java编程思想第四版》附录 B 对比 C++和 Java
<Java编程思想第四版完整中文高清版.pdf>-笔记 附录 B 对比 C++和 Java “作为一名 C++程序员,我们早已掌握了面向对象程序设计的基本概念,而且 Java 的语法无疑是 ...
随机推荐
- 渗透测试-基于白名单执行payload--Forfiles
0x01 Forfiles简介: Forfiles为Windows默认安装的文件操作搜索工具之一,可根据日期,后缀名,修改日期为条件.常与批处理配合使用. 微软官方文档:https://docs.mi ...
- Spring Cloud Alibaba(二) 配置中心多项目、多配置文件、分目录实现
介绍 之前Spring Cloud Config基础篇这篇文章介绍了Spring Cloud Config 配置中心基础的实现,今天继续聊下Spring Cloud Config 并结合nacos做服 ...
- java集合之ArrayList链表基础
ArrayList可变数组 : arrayList继承AbstractList抽象类,实现list接口,底层基于数组实现.可存放null,除了非同步的之外,大致等同Vector.适用快速访问,复制.序 ...
- vue 父组件动态传值至子组件
1.进行数据监听,数据每次变化就初始化一次子组件,进行调取达到传递动态数据的目的普通的监听: watch:{ data: function(newValue,oldValue){ doSomeThin ...
- Markdown的基本使用指南
目录 1.标题 2.列表 2.1无序列表 2.1有序列表 3.引用 4.图片和链接 5.粗体和斜体 6.分割线 7.代码框和代码块 8.列表 9.可选框 10.添加目录 Markdown 是一种用来写 ...
- ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用
1. 前言 在前面的篇章中,博主给大家讲解了ESP8266的软硬件配置以及基本功能使用,目的就是想让大家有个初步认识.并且,博主一直重点强调 ESP8266 WiFi模块有三种工作模式: St ...
- 9i oracle数据库迁移到11G(exp)
这个是之前生产上打算迁移的文档,后面离职了没有在停机迁移,但是测试过几次没有问题,其中需要把9I的110,120库迁移到11g一个数据库中,但是110,120库之间有相同的表名字,以及有DBLINK. ...
- 收藏收藏:时隔一年,你关注的打造一个实用的TXT文本操作及日志框架,我们开源了,不再为程序写日志发愁(也支持.net core哦)
记得做这个框架是在2018年刚接触.net core的时候,那个时候为了能够专心的研究我开始不写博客了,但是学有所成并在公司运用了近一年的时间了,决定回来和各位分享我们所掌握的那星星点点的知识,希望可 ...
- 个人记账app(一)需求设计
时间如流水,只能流去不流回. 学历代表你的过去,能力代表你的现在,学习能力代表你的将来. 学无止境,精益求精. 一.开发背景 Android应用市场记账的app那么多,我为什么还要再开发一个呢?重复造 ...
- 闪讯 开启wifi教程
这是我自己试了几次之后发现的,也不是什么技术活. 首先说下,我的比较是小米pro笔记本,一般笔记本都是自带wifi功能的.如果要开wifi的话,必须是用网线连接才可以,通过wifi连接网络就不能开移动 ...