Java学习第八天
1、多态中成员的特点:
1:成员变量: 编译时期看父类,运行结果看父类
2:成员方法: 编译时期看父类,运行结果看子类(子类把方法重写了)
3:静态方法: 编译时期看父类,运行结果看父类
2.Object:根类,超类,对所有对象共性的提取,所有
任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类
Object类中所定义的方法,是所有对象都具备的方法(11个方法,可以自己查一下api吧)
特点:
Object类型可以存储任何对象:
作为参数,可以接受任何对象
作为返回值,可以返回任何对象
例如:
boolean equals(Object obj);
3.当输出一个对象时,默认调用了 toString()方法,默认toString()方法返回:类名@对象的哈希值
1.默认实现
int hash=ren1.hashCode();
System.out.println(Integer.toHexString(hash));
//得到对象对应的字节码
Class classz=ren1.getClass();//Person.class 被面向对象了 Class
String name = classz.getName();
System.out.println(name);
//最后结合输出
System.out.println(ren1.getClass().getName()+”@”+Integer.toHexString(ren1.hashCode()));
2.通常重写toString(),返回属性的值
public String toString(){
return name+”,”+age;
}
4.模板设计模式:在实现一个功能时,功能的一部分是确定的,一部分是不确定的,确定的部分会用到不确定的部分
那么就把不确定的部分暴露出去,让子类去实现
1 例如:计算程序运行的时间 2 abstract class TimeTool 3 { 4 public final void tongJiTime() 5 { 6 //在程序运行前记录一个时间 7 long start=System.currentTimeMillis(); 8 9 //功能代码 10 fun(); 11 12 //在程序运行后记录一个时间 13 long end=System.currentTimeMillis(); 14 System.out.println("程序运行时间为:"+(end-start)+"毫秒"); 15 } 16 public abstract void fun(); 17 } 18 19 class Test extends TimeTool 20 { 21 public void fun(){ 22 for(int i=1;i<=3000;i++) 23 { 24 System.out.println(i); 25 } 26 } 27 } 28 class Demo4 29 { 30 public static void main(String[] args) 31 { 32 Test test = new Test(); 33 test.tongJiTime(); 34 } 35 }
5.内部类:在一个类的内部定义的类就叫内部类(把内部类看成成员),成员和成员之间可以相互使用
内部类的特点:
1.编译后可生成独立的字节码文件
2.内部类可直接访问外部类的私有成员,为不破坏封装
3.可为外部类提供必要的内部功能组件
6.内部类的字节码:外部类$内部类.class
7.什么时候需要定义内部类?需要描述事物内部的事物
8.成员内部类:在类的内部定义,与实例变量、实例方法同级别的类
外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象
特点:当外部类、内部类存在重名属性时,会优先访问内部类属性
成员内部类不能定义静态成员
1 class Outer{ 2 3 class Inner{ 4 5 } 6 } 7 8 class Outer{ 9 10 static class Inner{ 11 public static void show(){} 12 } 13 } 14 15 Outer out=new Outer(); 16 Inner in=out.new Inner();
内部类访问外部类对象: 外部类名.this
内部类访问外部类对象中的成员,外部类名.this.成员名
9.静态内部类:内部类属于成员,所以可以被static修饰,内部类中的方法是静态的,那么内部类必须是静态的
不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
只能直接访问外部类的静态成员(实例成员需实例化外部类对象)
Outer.Inner inner=new Outer.Inner();
Outer.Inner.show();
10.局部内部类:定义在外部类的方法中,作用范围和创建对象范围仅限于当前方法
局部内部类访问外部类当前方法中的局部变量时,因为无法保障变量的生命周期与自身相同,变量必须修饰为final
限制类的使用范围(jdk1.8开始,局部内部类使用的局部变量不需要使用final 修饰)
11.匿名内部类:没有类名的局部内部类(一切特征都与局部内部类相同)
特点:必须继承一个父类或者实现一个接口
定义类、实现类、创建对象的语法合并,只能创建一个该类的对象
优点:减少代码量
缺点:可读性较差
1 适用于类和接口: new Object(){ 2 String name; 3 public void show(){ 4 } 5 }.show(); 6 7 Object obj= new Object(){ 8 String name; 9 public void show(){ 10 } 11 }; 12 13 14 new inter(){ 15 public void show(){ 16 } 17 }.show(); 18 19 20 inter tt=new inter(){ 21 public void show(){ 22 } 23 };
12.字符串: class final String extends Object
是常量,一旦定义了就不可以改变了
存储在方法区的常量池
已经存在的字符串,再定义时直接使用已经存在的
重写了equals()方法
String s=new String(“hello”);//产生两个对象,堆、池中各存储一个
charAt(6)
indexOf()
lastIndexOf()
contains()
equals()
equalsIgnoreCase()‘/
startsWith()
endsWith();
13.字符串获取:
获取字符串的长度
int length()
获取某一个位置上的字符
char charAt(int index)
获取字符在字符串中的位置
如果要找的字符或者字符串不存在,返回值为-1
int indexOf(char ch)//返回字符在字符串中第一次出现的位置
int indexOf(int ch, int fromIndex)//第二个参数用于指定开始找的位置
int indexOf(String str) //获取一个字符串在字符串中出现的位置
int indexOf(String str, int fromIndex)//第二个参数用于指定开始找的位置
int lastIndexOf(char ch)//最后一次出现的位置
14.字符串判断:
判断是否包含一个字符串
boolean contains(CharSequence s)
判断两个字符串的内容是否相同
boolean equals(Object anObject)
忽略大小写判断两个字符串的内容是否相同
boolean equalsIgnoreCase(String anotherString)
判断是否以某字符串开头
boolean startsWith(String prefix)
判断是否以某字符串结尾
boolean endsWith(String suffix)
15.字符串转换:将字符数组转换成字符串
1:使用构造方法
String(char[] value)
String(char[] value, int offset, int count)
2:使用静态方法
static String copyValueOf(char[] data)
static String copyValueOf(char[] data, int offset, int count)
将字符串转成字符数组
char[] toCharArray()
16.将字节数组转成字符串
String(byte[] bytes)
String(byte[] bytes, int offset, int length)
String(byte[] bytes, String charsetName)//使用指定的编码将字节数组转换成字符成
将字符串转成字节数组
byte[] getBytes()
将基本数据类型转换成字符串
String.valueOf()
17.字符串替换:
String replace(char oldChar, char newChar)
18.子串:
String substring(int beginIndex)
String substring(int beginIndex, int endIndex) //包含起始位置,不包含结束位置,到结束位置的前一位
19.转换,去除空格,比较:
大小写转换
String toLowerCase()
String toUpperCase()
将字符串两端的空格去掉
String trim()
按字典顺序比较两个字符串
int compareTo(String anotherString)
20.切割: String[] split(String)
21.可变字符串:
StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全
StringBuilder:可变长字符串,JDK5.0提供,运行效率快、线程不安全
22.BigDecimal:可精确计算浮点数
相关文章