欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java学习第八天

程序员文章站 2022-06-29 08:46:12
1、多态中成员的特点: 1:成员变量: 编译时期看父类,运行结果看父类 2:成员方法: 编译时期看父类,运行结果看子类(子类把方法重写了) 3:静态方法: 编译时期看父类,运行结果看父类 2.Object:根类,超类,对所有对象共性的提取,所有 任何类,如果没有书写extends显示继承某个类,都默 ......

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:可精确计算浮点数