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、设计模式
单例类:
构造函数是私有的,一个类只有一个实例并且自行实例化向这个系统提供这个实例。