黑马程序员_JavaAPI
来源:互联网 发布:windows10的编程软件 编辑:程序博客网 时间:2024/05/22 05:00
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
System.out.println();是可以输出引用类型数据的!
必须收当定义了一个学生类的时候,而这个学生类什么也没有定义,
只是一个空类,运行测试类的时候,是可以实例化的,然后
System.out.println();直接输出 学生类对象的!
输出的是:cn.itcast.Student@1db05b2
输出语句可以输出引用类型的!
cn.itcast.Student@1db05b2 1db05b2后面的是一个16进制的地址值!从这个地方引用出来源码!
找到JDK中的,有一个src打包文件, java文件夹 然后是lang包,其中找到了math.java文件。
我们之前就用过math文件,但是用的都是class文件,
也就是说:我们用的文件统统都打包放到了lib文件中
在tools.jar 和dt.jar中 这两个jar文件里面放的都是class文件。
于是:如果都在这些jar文件中,那是如何使用的?
都是在每个项目的JRE System Library【JavaSE-1.7】中都可以找到,这里面装的都是class文件
导入包的时候,都是直接已经有了!代码都已经有了!类似于我们自己导入我们自己的包。相似。
我们用的ApI都在里面。其实,API就是一个目录索引!
因此:
以后,如果我们在使用API提供的功能的时候,知道怎么用了,还是想知道如何实现的
那就必须看源码!
源码是什么就是 (.java 文件)
System.out.println 前面的System.out是一个对象,println()是一个方法!
也就是这个可以通过类名调用,也就是前面直接就是一个对象。
* class System { * public static final PrintStream out = ...; * * //自己定义的 * public static final int x = 10; * * 使用的时候: * int y = System.x; ** 下面这个也应该理解:
* PrintStream ps = System.out;// System.out 是ps对象的,而ps对象时PrintStream的
System.out 是一个输入流中的一个方法!!
那这个地方问道之前的 1db05b2 是怎么输出的!
看源码:
如何看:在查看的内容,左手Ctrl 右手点击!
在Eclipse中的window中的Prefence中 Installed JREs中,有关于JDK
安装路径,其实导入的时候已经导入了所有的文件
class 文件,和 java文件!
类object是层次结构的根类,每个类都是以object作为超类(根类),所有的
类都直接或者间接的继承自boject类!
如果我定义一个对象s, 然后我System.out.println(s); 用输入语句输出这个s,
这个s属于某个类,这个类一定是object的子类,继承自object,也就是说,s可以调用object的方法。
其实,System.out.println(s); 就是用的就是object中的 tostring()方法。
这以写成 System.out.println(s.tostring());
输出语句,输出对象的时候,一般调用的是对象的toString()方法,这个方法来自object
要记住object类是从JDK1.0开始使用的!
要记住的方法:toString():返回该对象的字符表示。
返回该对象的字符串表示。
通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。
结果应是一个简明但易于读懂的信息表达式。
建议所有子类都重写此方法。
返回的值等价于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
cn.student.student@530cf2
等价于:
该类的类名,应该是全路径+@+对象的哈希值的十六进制的表示。
object也有一个方法,也就是他的本省getclass();
getClass():返回此 Object 的运行时类
public final Class getClass()
其实getClass()返回的是class文件的对象。
class是字节码文件,于是这个类就是表示字节码文件的类!反射的时候讲!
所以上述getClass().getName() + '@' + Integer.toHexString(hashCode())
getName()是返回的是getClass()的,而getClass()返回的又是public final Class getClass()中的Class!
于是找到了class类,属于java.lang,里面有个方法,getName
getName类:以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
String.class.getName() returns "java.lang.String" byte.class.getName() returns "byte" (new Object[3]).getClass().getName() returns "[Ljava.lang.Object;" (new int[3][4][5][6][7][8][9]).getClass().getName() returns "[[[[[[[I"通过对getNeme中的了解!
public final Class getClass():放回此object的运行时类。反射的时候讲。
简单记:getName():次对象返回的所表示的类或接口名。一定是带包的。
getClass().getName() + '@' + Integer.toHexString(hashCode())
Integer.toHexString(hashCode())
首先解释了 hashCode()
返回该对象的哈希码值!
简单记忆就是这个哈希值可以理解为对象的逻辑地址值,
但不是对象的实际地址值。(java拿不了对象的实际地址值)
Integer.toHexString(hashCode())
Integer.toHexString() 推断HexString是一个静态的方法,Integer是一个类名。
toHexString()方法:
如果对象是空的,运行返回一个对象逻辑地址值时:每一次都不一样,
因为每一次运行的时候都是从新申请空间。所以每一次值都不一样!
System.out.println(s);//cn.student.student@530cf2
System.out.println(Integer.toHexString(s.hashCode()));//530cf2
System.out.println(s.hashCode());//5442802
我们可以发现第三个地址是将第一个地址换算过来的!
讲了这个多,才发现toString()的方法实现!
但是之前提到的:
要记住的方法:toString():返回该对象的字符表示。
返回该对象的字符串表示。
通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。
结果应是一个简明但易于读懂的信息表达式。//
建议所有子类都重写此方法。
结果应该是一个简明但易于读懂的,如果是对象输出的时候输出的不是地址值,而是成员变量。
所以子类要重写toString()方法!
System.out.println(s);
//这个地方应该调用的是父类的,但是,对toString()进行了重写,
//于是,直接对student类进行了调用。
//这里就是对多态的应用。
//但是为什么没有直接调用student,因为有可能调用的不是student
//也可以是teacher类。所以在源码中
//写的是(object x)
以上说的就是:
如果没有将toString()重写的话,那就是无聊的一堆地址值。
如果重写了,那就是输出应该得出的值。
结论就是:当输出对象的时候不是地址值得话,那就是重写了toString()方法,
当输出对象的时候是地址值得花,那就是没重写toString()方法!
连个对象是不会相等的,因为不同的对象有不同的地址。
System.out.println(s1==s2);//结果是false;
如果s1=s2;
System.out.println(s1==s2);//这个时候对象就是相等的,true;
equals object类中方法。
指示其他某个对象是否与此对象“相等”。 这里比较对象是比较的地址值。
面试题:
==和equals的区别
==: 在基本类型的比较中: 比较的是基本类型的值是否相同? 默认比较的是:对象地址值
在引用类型的比较中: 比较的是对象的地址值是否相同?
equals:在默认的情况下,我们比较的是:对象的地址值是否相同。 默认比较的是:对象地址值
但,一般我们都会重写该方法,用于比较对象的内容是否相同。
length() :String()类中的方法!返回字符串的长度。
String()是不需要导入包的!
StringBuffer 是属于java.lang包下,只要在这个包下面是不需要导包的。
StringBuffer是线程安全的可变字符序列。
是一个可变的字符串!
同时:StringBuffer也是从JDK1.0版本就开始有了。
StringBuffer是线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。
虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
String和StringBuffer的区别是:
String的长度固定,但是StringBuffer长度是可以发生变化的。
比如有两个空间hello、world!
如果是String的话,必须要从新开辟空间,同时hello和world这两个空间都浪费了,
但是:StringBuffer却是可以直接将world补充到hello的那个空间里的!
StringBuffer叫做字符串的缓冲区,所以说跟String中的方法有许多相似处,
用法一样。在刘意讲的视频中,就没有讲。
StringBuffer中重点讲的两个删除方法是:delete deleteCharAt
这两个方法都是从JDK1.2方法开始的。
StingBuffer是从1.1开始的,而这两个方法都是从1.2开始的。也就是说:
不是出现类之后就相应的出现了类中的方法。
如果说:一个类中的方法没有标明版本,那就是说:方法是随着类的出现而出现的。
StringBuffer中的方法,append(),insert(),delete(),deleteCharAt(),返回的都是
StringBuffer的类型。
当翻开API功能文档的时候记得看每个类和方法的版本。有时候类出现的版本和方法的版本不一样。
开发工具产生的方法都是private修饰的,并不是public修饰的,所以说:我们在开发的时候,建议还是
用public修饰。之所以用private修饰是因为能够更好的封装。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
- 黑马程序员_JavaAPI补充
- 黑马程序员_JavaAPI上
- 黑马程序员_JavaAPI下
- 黑马程序员_JavaAPI
- 黑马程序员_JavaAPI-String
- 黑马程序员_javaAPI
- 黑马程序员_JavaAPI
- 黑马程序员_javaAPI
- 黑马程序员_JavaAPI-集合框架
- 黑马程序员_javaAPI之String
- 黑马程序员_JavaAPI常用类
- 黑马程序员_javaAPI集合框架(泛型)
- 黑马程序员_Java 学习过程记录_JavaAPI-2
- 黑马程序员Java培训、Android培训_JavaAPI-2
- 黑马程序员_JavaAPI——集合框架笔记总结
- 黑马程序员_javaAPI中String类相关概述
- 黑马程序员Java培训、Android培训-Java 学习过程记录_JavaAPI
- 黑马程序员Java培训、Android培训-Java 学习过程记录_JavaAPI-1
- 定义区间DP
- Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框
- 获取请求头和响应头
- 磁盘阵列初步图文教程【在软RAID下设置的】
- [Android基础知识] 之六:Intent.Action的各种常见应用
- 黑马程序员_JavaAPI
- 如何实现用户自定义Word模板
- opencv中roi嵌套
- CCClinppingNode将图片裁剪出圆形
- 零编码制作报表?
- poj 2255 二叉树遍历
- visual assist X快捷键
- Sphinx在windows下的安装
- hdoj 2791 The Seven Percent Solution 水过~