java学习4--Java 的常用包与数组的复制与排序

1、java中常用的包

java.applet:包括一些创建java小应用程序包。

java.awt包含一些用于创建与平台无关的图形界面应用性程序。

java.io包括一些用输入输出处理的类

java.lang包含一些java常用的基本类与核心类,如string,Math Integer....这个包的类是隐式导入的。

java.net包含用于创建网络连接的类,与java.io共同使用实现与网络有关的读写。

java.util:包含些实用的工具类与数据结构类。

2、==与equals

在java中,boolean,byte short int long char float double 这八种数据类型是基本数据类型,其他的都为引用数据类型。

==是比较2个变量的值是否相等。

equals是比较两个对象变量所代表的对象的内容是否相等。

运算符==,是用于比较值,这包括基本类型的值比较,以及对象类型(引用类型)的值比较(这个值就是地址)
equals方法,是object类中定义的一个方法,所以它只能用于对象之间的比较,基本类型是没有意义的,子类可以重写这个方法来实现自己的比较逻辑
举个例子:
    String s1=new String("abc");
       String s2=new String("abc");
       system.out.println(s1==s2)//false
      system.out.println(s1.equals(s2));//true

String str="abc"与String str=new String("abc");

new String()是在堆内存中创建abc数组然后将其首地址赋值给str,str="abc"是将abc的值赋给str.

string的+,+=是重载的java中唯一被重载的操作符。

3、string与stringbuffer

在大量的字符串的操作程序中通常用stringbuffer

1. String 类 

  String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。

   String a = "a"; //假设a指向地址0x0001 
   a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。 
   因此String的操作都是改变赋值地址而不是改变值操作。

2. StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。 每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。

   StringBuffer buf=new StringBuffer(); //分配长16字节的字符缓冲区 
   StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区 
   StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。

3.StringBuffer
  StringBuffer和StringBuilder类功能基本相似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。对于经常要改变值的字符串应该使用StringBuffer和StringBuilder类。

4.线程安全 
StringBuffer 线程安全 
StringBuilder 线程不安全

5.速度
一般情况下,速度从快到慢:StringBuilder>StringBuffer>String,这种比较是相对的,不是绝对的。

6.总结
(1).如果要操作少量的数据用 = String
(2).单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
(3).多线程操作字符串缓冲区 下操作大量数据 = StringBuffer


4、函数的调用

java中,传参都是以传值的形式进行的。

对于基本数据类型都是传递的数据的拷贝

对于引用类型传递的都是引用的拷贝。

5、对象的clone

为了获取对象的一份拷贝,我们可以利用object提供的clone方法。需要以下三步骤:

在派生类中需要覆盖基类的clone方法并且声明为public的;

需要在派生类的clone方法中调用super.clone(),同时捕获异常;

在派生类中实现cloneable接口;

为什么我们在派生类中调用object的clone时要去调用super.clone()?在运行中,object中的clone会识别出你要复制的对象,并为此对象分配空间进行对象的复制,将复制的对象内容一一复制到对象的村粗空间中。S

6、数组的相关操作

数组的复制:System.arraycopy();

数组的排序:arrays.sort();

在排序的数组中查找某个元素:arrays.binarysearch();

7、封装类

java针对八种基本数据类型定义了相关的引用类型,即封装类。

例如:int ----Integer

8、Class类

在java中每个对象都有一个Class对象,也就是说当我们编写一个类,编译完成后生成的.class文件中就会存在一个Class类对象,用于表示我们编写的类的相关信息。

获取Class类对象的三种方式:

1、利用对象的getClass()方法来获取对象的Class实例

2、利用Class类的静态方法forName(),用类的名字来获取类的Class对象。

3、利用.class来获取Class实例;对于基本数据类型封装类,还可以利用.TYPE来获取相对应的基本数据类型的Class实例。

当我们需要创建某个类的对象时,jvm会根据类的名称找到对应的.class文件然后加载它。

newInstance(),调用类中缺省的构造函数。

java反射API

9、Runtime类和process类

每个java程序都有一个RunTime类的单一实例。

可以通过Runtime的getRuntime()来获取Runtime的实例。

Runtime是使用单例模式的一个例子。

Runtime提供了应用程序与jvm之间一个接口,可以通过Runtime来获取jvm的自由内存等信息。

通过getRuntime()获取Runtime实例,Runtime实例调用exec()方法可以调用外部命令(rt.exec("notepad");)

10、设计模式

单例类:

构造函数是私有的,一个类只有一个实例并且自行实例化向这个系统提供这个实例。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值