Java面向对象
一、面向对象三大特征
- 封装:隐藏对象的属性和方法,通过权限管理,开放不同权限的访问方式,提高安全性,和重用性。Java的四大关键字:public,protect,default,private,访问你权限范围越来越小,public可以被任意访问,protect只能同包的类和它自己的子类(子类不同包也可以)访问,default只有同包的类可以访问,private只有自己能够访问
- 继承:java中所有的类都继承于object类,java只有单继承
super参数指向父类对象,this参数指向当前类对象 - 多态:条件包括需要有继承,有方法的重写和父类引用指向子类对象
二、java常用类
- Object类,object类是所有类的父类,其中有getClass(),notify(),notifyAll(),wait()等方法是final方法,是不能重写的。
(1)clone()方法,在我们对对象赋值时,会遇到一种情况,声明的两个对象指向同一个内存区域,这样在两个对象操作数据的时候回相互影响,这个时候可也用clone方法。Shadowclon和deepclone
(2)tostring方法 :该方法返回一个字符串,这个字符串由类名、at标记符“@”和此对象的哈希码无符号十六进制表组成
(3)getclass方法:返回object运行时类的类型,不可重写,调用时一般与getname一起调用
(4)finalize()方法:用于释放资源,一旦垃圾回收器准备好释放对象占用的储存空间,将首先调用其finalize()方法,并在下一次垃圾回收时,真正回收对象。
(5)equals()方法:直接判断调用equals()方法的对象和传入的参数是不是同一个对象,也就是指内存中同一块储存单元,即使内容相同,如果内存不同也返回false
(6)hashcode()方法:返回对象的哈希码值,
(7)wait()方法:该方法就是让当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。调用该方法后,当前线程进入睡眠状态,直到其他线程调用该线程的notify方法或者notifyall方法,或者最长时间到,此时该线程会被唤醒,如果是调用interrupt方法,则线程会中断,同时抛出interruptexception异常。
(8)notify()方法:唤醒该对象的某个线程
(9)notifyall()方法:唤醒该对象的所有线程 - Math类
(1)math.sqrt()求平方(2)math.pow()求立方根 - (3)math.abs(a)a为整型表示返回整型的绝对值,a为long这表示返回long型绝对值。(4)math.round()求四舍五入。
- Date类
(1) - String类
(1)创建string对象的两种方式的区别,第一种直接通过赋值创建,这样创建的对象是直接放在方法去的常量池中,第二种通过构造方法创建的字符串对象是放在堆内存中。
(2)当存在String str1=str2时,表示传递的是引用,str1直接指向str2的内存地址,同时,str1==str2为true,所以“==”比较的是地址。
(3)在通过直接赋值创建string对象时,在对象实例化的时候java会将匿名对象“Lance”放入对象池,每当下一次对不同的对象进行直接赋值的时候会直接利用池中原有的匿名对象。如果直接赋值的对象用的是同一个lance对象,那么equals返回true;
(4)在String中“==”比较的是内存地址,而equals比较的是字符串的内容。(因为String中重写了object的equals方法)
(5)string是个常量,从一出生就注定不可改变。同时string采用享元模式,每当生成一个新的字符串的时候,他们会被添加到一个共享池中,当第二次再次生成同样的内容时,就共享这个对象。 - StringBuffer
这个类也是用来表示字符串的,但是和string类不同Stringbuffer在进行字符串处理时不会生成新的对象,在内存上要优于string,在使用的时候,如果经常要对一个字符串进行修改,例如:插入,删除等操作,使用StringBuffer更加适合。
StringBuffer也是线程安全的
(1)string和stringbuffer是两个类,所以不能进行强制类型转换,转换方法为
(2)append方法:类似于字符串的连接,将参数中的字符,加到StringBuffer对象的末尾,
(3)deleteCharAt()方法:删除指定位置的字符,然后将剩余的内容形成新的字符串。
(4)delete(int start,int end)方法:删除指定区域的字符,然后再组成新的字符,start包括,end不包括。
(5)insert()方法有两个参数,第一个表示插入的位置,第二个表示插入的字符串内容。
(6)reverse()方法的作用是将对象中的内容反转,然后形成新的字符串,
(7)setCharAt()有两个参数,第一个是需要更改字符的位置,第二个是更改以后的字符的内容。
(8)trimToSize()方法:作用是将StringBuffer对象的空间缩小到和长度一样的长度,减少空间的浪费。