菜鸟的学习之路(7) — 包(package)、Object类和String类

一.包(package):

       1.包:用于将不同功能的类分门别类,放在不同的目录(包)下。

         命名规范:一般采用自己在互联网上的域名称作为自己程序包的唯一前缀,且域名翻转,每个字母小写。

         例如:bztc.edu.cn  翻转 cn.edu.bztc(包名)

         当定义的时候没有使用package那么java就认为我们所定义的类在默认包里(default package)。

         编译带有package声明的package源文件有两种方式:

           (1).直接编译,然后根据类中所定义的包名逐一进行手工建立目录结构,最后将生成的class文件放到该目录结构中(此方法很少使用,因为非常的麻烦,因为逐一进行手工目录的创建)。

            (2).使用编译参数   -d,方式为javac -d .  源文件.class,这样编译后,编译器会自动给我们生成目录结构,然后将class文件放在目录下。( -d . 这个点的意思是在当前目录下创建目录结构

         例子:

               

              有两个包名,第一个aa.bb,cc和aa.bb.cc.dd我们就说第二个是前一个的子包。

          2.导入(import):

                 import用于将package分离的各个类导入回来,能够让编译器直接找到该类。

                 语法: import  cn.edu.bztc.a.b.c.d.Test;

                 语法: import  cn.edu.bztc.a.b.c.d.*;  //表示对于该目录文件下类全部导入。

                            如果d下还有e那么需要在加一条import语句,因为d只是导入d下的类,而不会导入e下的类。

         注意:package必须放在所有代码的开头如上例子,然后再是import语句,然后再是class或者interface的定义

              如果两个类都在同一个包中则不需要导入。

二.Object:

             Object:使用时不用显示的导入java.long包,因为编译时由编译器自动帮助我们导入。

                 类Object是继承体系中的根,每个类都会将Object作为父类,所有对象(包括数组)都实现这个类的方法。

                  Object类中的方法(部分,除去private的方法):

                       本人的英语水平有限,看英文的感觉比较麻烦,所以为了方便看的是中文的帮助文档。

                       提倡大家还是去看英文版的帮助文档,官网就有。

                      

                     Object类就一个无参数的构造方法。

                      接下来对类中的方法(部分)使用:

                          1. toString()例子:

                        

                       

                      对于本例子中的当打印引用时,就会打印出引用所指向的对象中的toString()的返回值,因为每个类间接或直接的继承Object,而Object类中定义了toString()方法,所以每个类中也就继承了这个方法,但是每个类可以重写这个toString()方法,所以例子中上下两个输出的内容是不一样的,String的引用输出的字符串,而Object输出的是一串字符串,它的含义此对象是该类的一个实例、@和此对象的哈希码(16进制)组成。

                16进制:0~9、A~f,逢十六就进一。

                   2.equals()例子:

                     

                      本例子中的equals()方法,因为在Object类中定义,所以在java中每个类中都会有此方法,对于Object类中的此方法是判断调用equals()的引用和传进来的引用是否是指向同一个对象,可以说等价于 == 。

三.String:

              1.String不属于八种基本数据类型,String是一个对象。

                  2.String对象的初始化:

                     由于String对象的常用,所以在对String对象进行初始化时,java提供了一种简化的特殊语法。

                      a).格式如下:

                                String  str = "abc";

                      b).标准格式:

                                String  str1 = new String("abcd");

                      如果按照第二种方法,会在内存的使用造成比较大的浪费。例如:String  str = new String("abc");实际上创建了两个String对象,一个是”abc”对象,存储在常量空间中,一个是使用new关键字为对象s申请的空间。

          3.String 是常量,其对象一旦创建完毕就无法改变。如果使用  +  拼接字符串时,就会生成新的String对象,而不是原有的String对象追加内容。

 

          4.String Pool(字符串池):在JVM中存在着一个字符串池,其中保存的很多String对象,可以共享使用,因此提高了效率。因为String类时final的,它的值已经创建就不能在改变。

          5.String对象初始化的两种方式的解释:

             a).String s = "hello";

              首先在String Pool中查找有没有"hello"这个对象,如果不存在,则在String Pool 中创建一个“hello”对象,然后将String Pool中的"hello"对象的地址返回来,赋给引用变量 s,这样s会指向String Pool中的“hello”字符串对象。如果存在,则不会创建任何对象,直接将String Pool中的“hello”字符串地址返回来,赋给变量引用s。

             b).String s = new String("hello");

               当使用这个初始化时,首先在String Pool中查找“hello”字符串对象,如果存在这个字符串则不再去创建“hello”这个对象了,直接在堆(heap)中创建一个“hello”字符串对象,然后将堆中的这个“hello”这个字符创对象的地址返回来,赋给引用变量s,然后s指向的是堆中创建的“hello”字符串对象。如果不存在,则现在String Pool中去创建一个“hello”字符串对象,然后再堆中再去创建一个“hello”字符串对象,然后将堆中的这个“hello”字符串对象地址返回来,赋给s,导致s指向的是堆中的“hello”字符串对象。

           基于上面两个的例子:

             

           6.字符串的比较:

             既然是字符串的比较那肯定就是比较的其中的内容,而不是比较的字符串对象的地址,那也就不用去管它是否是堆中的还是String Pool的了,所以这时候就要用equals()方法。

             String str1 = "hello";

             String str2 = new String("hello");

             System.out.println(str1.equals(str2)); // 结果为true。

             Object中的equals()方法是判断两个对象的引用是否一致。而String类继承课Object类中的equals()方法然后重写了此方法,用来比较字符串的内容。

                    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值