java编程思想第四版第十四章 类型信息习题
时间:2022-07-25
本文章向大家介绍java编程思想第四版第十四章 类型信息习题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
第三题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=0;i<shapes.size(); i++){
Shape shape = shapes.get(i);
if(i == 3){
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=0;i<shapes.size(); i++){
Shape shape = shapes.get(i);
if(i == 3){
//添加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=0;
private String dname="";
static{
System.out.println("this is D");
}
}
class E extends D implements A, B, C{
private int ei=0;
private String ename="";
static{
System.out.println("this is E");
}
}
class F extends E implements A {
private int fi=0;
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(1);
} catch (IllegalAccessException e) {
System.out.println("实例化Instance 失败");
System.exit(1);
}
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=0;
public String name="";
static{
System.out.println("this is D");
}
}
class E extends D implements A, B, C{
public int i=0;
public String name="";
static{
System.out.println("this is E");
}
}
class F extends E {
public int i=0;
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(1);
} catch (IllegalAccessException e) {
System.out.println("实例化Instance 失败");
System.exit(1);
}
if(upClass.getSuperclass() != null ){
printSuperClass(upClass);
}
}
}
public class Test9 {
public static void main(String[] args) {
G g = new G();
g.printSuperClass(F.class);
}
}
运行结果:
2
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
2
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
0
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[10]);
judgeType(new String[10]);
judgeType(new long[10]);
judgeType(new boolean[10]);
judgeType(new Pot[10]);
}
}
运行结果:
char
java.lang.String
long
boolean
net.mindview.typeinfo.test10.Pot
第十四题
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(47);
//随机得到一个已注册的部件工厂, 并制造部件
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=0;i<10;i++){
System.out.println(Part.createRandom());
}
}
}
第十八题:
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.namen"
+ "To show all methods in class or:n"
+ "ShowMethods qualified.class.name. wordn"
+ "To search for methodds invoiving 'word'";
private static Pattern p = Pattern.compile("\w+\.");
public static void main(String[] args) {
if(args.length<1){
System.out.println(usage);
System.exit(1);
}
int lines = 0;
try {
Class<?> c = Class.forName(args[0]);
//getMethods获取的是整个继承树中所有的方法
Method[] methods = c.getMethods();
//获取已有的构造器
Constructor[] ctors = c.getConstructors();
if(args.length == 1){
//打印所有继承树中的方法名
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[1]) != -1){
System.out.println(p.matcher(method.toString()).replaceAll(""));
lines++;
}
}
//打印构造器
for(Constructor ctor :ctors){
if(ctor.toString().indexOf(args[1])!=-1){
System.out.println(p.matcher(ctor.toString()).replaceAll(""));
lines++;
}
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
- fda
- dfa
- f
- asf
- a
- 第十五题: 内容太多, 直接参考demo
- af
- a
- af
- a
- f
- af
- a
- fa
- f
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Unity打iOS包之xcodeapi的使用
- C++中sort函数使用方法
- 史上最贴心React渲染器开发辅导
- 010.Nginx正反代理
- ClickHouse源码笔记2:聚合流程的实现
- 5G边缘计算赋能安防互联网直播行业,青犀视频强力打造云、边、端一体化协同音视频解决方案
- 视频云平台流媒体服务EasyNVR能获取直播视频的RTSP流地址吗?
- 如何编写不存在即插入的 SQL
- SQL 打印一个月的日历
- Kubernetes节点的驱逐与预留
- 使用reveal.js制作精美的网页版PPT
- Ceph快照爱你不容易系列 03:快照数据一致性浅析
- 没想到竟是因为它!让我的服务器变成了别人的挖矿工具
- 从零到一,Serverless 平台在滴滴内部落地
- React 使用 Proxy 代理(create-react-app)