`
kerlubasola
  • 浏览: 710026 次
文章分类
社区版块
存档分类
最新评论

关于张老师Java视频学习(六)

 
阅读更多

http://blog.csdn.net/wizardmly/article/month/2010/12


Java基础知识加强视频的学习:

一、知识点:

21、成员变量反射的综合实例: 将任意一个对象中的所有String类型的成员变量所对应的字符串中的“b”改成“a”。
(1)、P124:当比较的两个对象的所引用的值,都只有一份值,那么我们可以使用 == 来比较。
(2)、对字节码使用方法getFields(),得到字节码内所有的字段,用Field类的对象数组返回。
(3)、对象.getType() 方法返回的是对象所在的类字节码。

22、成员方法的反射:反射到类Method中
(1)、Method 代表类中的一个方法,与成员变量的反射类似,对应的只是类的字节码中的成员方法的字段
(2)、如何得到类中的一个方法:
(3)、调用方法:Method对象.invoke(obj,parameterType list),Method对象执行方法invoke调用,调用Method对象对指的方法,而调用该方法的
象是obj,调用obj中的哪个重载版本方法,我们用parameterType list 来匹配它。
(4)、当方法为静态方法时,上述方法invoke参数表中的obj不需要实例对象,可直接改为 null 来调用该方法,因为静态方法不依赖对象存在。

23、对接收数组参数的成员方法进行反射:
(1)、在Eclipse中,当我们需要一个完整的类名的时候,在程序中选中一个类名,然后按F2,那么将得到完整的类名。
(2)、//1、如果直接用语句:mainMethod.invoke(null, new String[]{"111","222","333"});调用main()方法
//编译器将报错,因为,在JDK1.5中,为了兼容JDK1.4中的调用方式,编译器将会对数组String[]{...}进行拆包动作
//而该数组拆包之后,得到的String[0],String[1],String[2]中的每个元都自动拆包成对应的装箱类型,每一个
//元都当做一个数组,数组中的每个元都是一个装箱类型,即有3个数组。

//2、用以下方法进行输出时,将String[]{...} 作为 Object[]数组的一个元,那么编译器对数组Object[]拆包的时候,
//得到的是String[]{...}
//mainMethod.invoke(null, new Object[] {new String[]{"111","222","333"}});

//3、数组也是一个Object的子类对象,那么当我们用以下输出的时候,将String[]强制转换为一个Object对象,那
//么编译器将无法对之进行拆包,传给main()方法的也是整个 String[]{...}数组
mainMethod.invoke(null, (Object)new String[]{"111","222","333"});
(3)、在运行一个类的时候,如果类中有main()函数,那么,我们可以像该方法传递一个字符串数组String[] args ,形参名为args。那么,在main()方法
中,我们可以利用args形参名,来调用传递给我们的字符串数组。特别的,当这个字符串数组,是一个完整类名的时候,我们可以利用该形参来进行
求得该类的字节码,以便求得该字节码的各种成分。
(4)、如何给类中main()方法字符串数组参数String[] args,以至于可以在main()方法中直接调用该字符串。
在Java程序区域 右击 --> Run As -->Run Configuration(运行相关配置) --> 在Argument栏中,填入需要传递的实参,该实参将传递给类mai()方法

24、数组与Object的关系及其反射类型:
(1)、数组的反射:数组也是一种类型,每一个具有相同的元素类型和维数的数组,都属于同一个Class(字节码),。
(2)、在返数组对象的字节码名字的时候,得到“[I” ,其中,中括号“[”表示数组,并且,多少个“[”,表示多少维的数组“I”表示整数。
可以在类Class的getName()方法中查阅相关知识。
(3)、得到某个类的超类,我们使用方法:对象名.getClass().getSuperclass().getName().
我们对数组类型变量使用(3)的方法,我们得到他们的超类都是Object。
(4)、如何直接打印数组的全部元素:利用类Arrays中的方法asList() :Arrays.asList(“数组名”),那么我们将得到该数组的值列表。
(5)、Arrays.asList()方法处理int[]和String[]时的差异:

String[]数组中的String对象都是Object对象,而int[]数组中的int元,只是基本类型,不是一个Object对象。
传递给asList()的实参,如果是String[]数组,那么,数组中的每个元都是Object对象。如果是int[]数组,数组中的元,都是一个基本 类型,不是Object。在JDK1.4中,传递给asList()方法的实参,是Object[]数组,而在JDK1.5以及以上版本中,利用了可变参数来实现。当我们传递String[]数组给形参时,由于上述String[]的特性,即正确的传递了实参给asList()方法。但是,当我们传递给int[]数组给形参时,由于int[]数组的上述特性,错误的传递了形参,那么,返回JDK1.5以上的版本,使之处理,而在该处理中,实参int[]将当做一个Object对象,即只能返回该对象的数组类型和散列码。

二、问题与收获:
(1)、JDK1.4没用引入可变参数,是在1.5中引入的,而且JDK1.5中新增了自动装箱功能,
(2)、当我们按JDK1.4的语法来调用invoke方法时,参数列表使用数组来传递,如Object[] {2}, 但是,为何另数组元数有多个时,如{2,1,0},编译器报错?
(3)、在看视频的时候,老师定义了几个数组,然后进行比较,在Eclipse中代码不报错,但是,我自己运行的时候,出现了如下错误:
Incompatible operand types Class<capture#8-of ? extends int[]> and Class<capture#9-of ? extends int[][]>
解析:查阅了网上的资料,解释如下:
对于数组类型的变量编译器在编译时,其实已经知道类型了。也就是说,编译器认为这2个类型是不一样的。根本没有比较的需要。
对于总是不成立的比较,其实是没有意义的。这个编译错误是 JDK 1.6的新功能
而老师使用的恰好是JDK1.5的版本,我使用的是1.6版本。


分享到:
评论

相关推荐

    java面试试题-张孝祥老师讲解

    本文将根据张孝祥老师提供的《Java面试试题》中的内容进行深入解析,旨在帮助读者更好地准备Java相关的面试。 #### 关键知识点梳理 ##### 1. 学习方法与职业规划 - **学习方法**:在IT领域,尤其是Java开发中,...

    张泽华老师android视频源代码(day1-day3)

    总的来说,“张泽华老师android视频源代码(day1-day3)”是一套全面的Android入门教程,通过实际的源代码学习,有助于快速掌握Android应用开发的基础,并为更高级的主题打下坚实基础。学习者应结合视频内容,动手实践...

    [JAVA教程] 张老师JDK8实战视频教程 51集JDK8专业标准学习课程 全新JDK新特性与实战教学.rar

    【JAVA教程】张老师的JDK8实战视频教程涵盖了51集的专业标准学习内容,全面解析了JDK8的新特性和实战应用。这个课程是专为Java开发者设计的,旨在帮助他们掌握最新的JDK版本,提升编程技能。在这个教程中,我们将...

    Java学习过程.doc

    要注意,张孝祥和孙鑫的视频基于JDK1.4,而目前广泛使用的是JDK5.0(也称为JDK5.0),因此你也需要学习JDK5.0的新特性,可以观看风中叶老师的JAVA5.0新特性系列视频。 **第二阶段:数据库阶段** 在这个阶段,学习...

    张泽华视频源码.

    1. **编程语言基础**:张泽华的视频源码可能涉及一种或多种编程语言,如Python、Java、C++或JavaScript等,学习者可以通过阅读和运行代码来掌握基本语法和编程思维。 2. **软件开发流程**:如果这些代码是按照项目...

    初学者学习java

    张孝祥老师从事了多年的软件开发和培训教学,非常清楚那些容易使新手困惑的问题,在学习过程中会碰到的拦路虎,张老师结合了多年实际开发与教学经验,收集了众多学员在学习中常提到的问题,对平时讲课的内容进行了...

    张泽华老师android4.0视频的ppt课件

    总的来说,张泽华老师的Android 4.0视频PPT课件涵盖了Android系统的基础知识和4.0版本的重要特性,无论是对初学者还是有一定经验的开发者,都是非常有价值的参考资料。通过学习,你可以深入了解Android的架构、UI...

    如何从零开始学习JavaEE?

    推荐学习马士兵老师的J2SE视频教程或孙鑫老师的视频。 3. 学习Java面向对象编程的概念和技术,推荐学习孙卫琴的《JAVA面向对象编程》书籍。 数据库阶段 1. 学习数据库基础知识,了解PHP对应MySQL数据库、ASP对应...

    传智播客张老师servlet的PPT

    Servlet是一种由Sun Microsystems公司提出的用于在Web服务器端处理客户端请求并返回响应的Java技术。它为创建动态、交互式的Web应用程序提供了强大的支持。Servlet的本质是一个实现了特定接口(Servlet接口)的Java...

    蓝墨云班课在Java课程教学设计中的应用.pdf

    6. **资源共享**:蓝墨云班课平台提供了一个方便的内容共享和分发的环境,教师可以上传课件、视频、阅读材料等,学生可以随时随地进行复习和学习。 7. **教学案例的设计**:为了将理论与实践相结合,使用Java基础...

    JavaNETndroidC语言学习视频.doc

    **毕向东老师的Java基础知识视频** - **讲师**: 毕向东 - **特点**: 专门为零基础学员设计,注重通俗易懂和生动幽默的教学方式。 - **目标**: 使学员轻松入门Java语言,为后续的深入学习打下坚实的基础。 ### 2. ...

    java培训-Java学习之路.docx

    ### Java学习之路:不走弯路,就是捷径 #### 一、培养兴趣:找到学习的动力 兴趣是最好的老师,尤其对于编程这样的技能来说更是如此。如果你仅仅是将编程视为谋生手段,可能会觉得乏味且充满挑战。要想在这个领域...

    张泽华老师android视频教程上课源代码---1

    【标题】"张泽华老师android视频教程上课源代码---1"所涵盖的知识点主要集中在Android应用程序开发领域,这是由知名讲师张泽华教授的一门课程的源代码部分。这门课程可能旨在帮助初学者和有经验的开发者深入理解...

    张泽华老师android视频教程上课源代码---2。

    本课程是张泽华老师针对Android开发所录制的视频教程的源代码部分,主要涵盖了Android应用开发的基础知识和实践经验。在Android开发领域,张泽华老师以其深入浅出的教学风格和丰富的实战经验而备受赞誉。通过这份源...

    JAVA PD 课程简介 线下班1

    教材方面,课程推荐了多本国内外知名作者的书籍,如张席的《Java语言程序设计教程》、耿详义和张跃平的《Java大学实用教程》系列,以及Y. Daniel Liang的《Introduction to Java Programming》等。学生可以根据自身...

    java毕业设计&课设-赞赏.zip

    今天,我将为您介绍的是一个名为“java毕业设计&课设-赞赏.zip”的资源包,这不仅是一个毕业设计项目,更是一个学习Java技术栈的宝贵平台。 首先,资源包中的“项目部署视频”对学生来说是一种直观的学习工具。视频...

    基于慕课的高职JAVA程序设计教学实践与思考.zip

    总的来说,基于慕课的高职Java程序设计教学实践是一种创新的教学模式,它能够提升教学质量,激发学生的学习兴趣,同时也对教师提出了更高的要求。在实际操作中,我们应积极应对挑战,充分利用慕课的优势,推动职业...

    基于darknet YOLO开发足球视频分析模型,其中包含4000多张标注过的球员与足球的训练数据集,以及预训.zip

    3、本项目适合计算机相关专业(人工智能、自动化、电子信息、物联网、通信工程、软件工程等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶...

Global site tag (gtag.js) - Google Analytics