我的JAVA学习 基础(4)

十三 控制访问权限修饰词
      private       修饰属性 属性只能在当前类中被调用  
                    修饰方法 方法也只能在本类中被调用
       可以修饰内部类
      default       修饰属性 在本类可以使用,在同一包下可以被使用
                    修饰方法 一样
      protected     修饰属性 本类 同一包下 子类中可见
                    修饰方法 一样
      public        本类 同一包 子类中 其他地方都可用


      javaBean规范:属性尽可能的私有化,为了其他类中可以访问值,需要提供相应的get,set方法。方法要public修饰。
      static修饰词:修饰属性 这个属性就不是对象的属性了,属于类的属性,是公有的资源。任何对象都可以访问。
      final关键字:修饰属性 只能声明时赋值或者在构造器中赋值 之后不能再重新被赋值了(只能赋一次值)
                         修饰方法 不能被子类重写。
 修饰的类 不能被继承,不能有子类。


十四 抽象类      
      在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有
的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
      用abstract修饰的类就是抽象类 不能被实例化 但是存在构造器。
      方法可以没有方法体,但是必须使用abstract修饰,叫抽象方法
      抽象类与类的区别
      抽象类中可以有抽象方法和普通方法 可以有构造器 可以有属性。
      类中不能有抽象方法
      有抽象方法的类一定是抽象类 但是抽象类中不一定有抽象方法
      抽象类可以被继承 如果子类是一个普通的 类 那么应该重写父类抽象方法
      如果子类是抽象类 符合抽象类的特点即可。
      static不能修饰抽象方法。
      抽象类是被用来创建继承层级里子类的模板。
      简单点来说,所谓的抽象类呢,就是带有抽象方法的类.比较适用需要运用多态,并且某些方法在子类中必须重定义时。


十五 接口
      接口,特殊的抽象类,如果有方法一定是抽象方法。
      在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。如果一个类只由抽象方法和全局常量组成,那么这种情况下不会将其定义为一个抽象类。只会定义为一个接口,所以接口严格的来讲属于一个特殊的类,而这个类里面只有抽象方法和全局常量,就连构造方法也没有。
      Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这
些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
     Java语言只能单继承,但通过接口可以实现多继承(在Java中,一个抽象类只能继承一个抽象类,但一个接口却可以使用extends关键字同时继承多个接口(但接口不能继承抽象类))。
      接口的使用
      由于接口里面存在抽象方法,所以接口对象不能直接使用关键字new进行实例化。接口的使用原则如下: 
     (1)接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口; 
     (2)接口的子类(如果不是抽象类),那么必须要覆写接口中的全部抽象方法; 
     (3)接口的对象可以利用子类对象的向上转型进行实例化。
      对于子类而言,除了实现接口外,还可以继承抽象类。若既要继承抽象类,同时还要实现接口的话,使用一下语法格式:
      class 子类 [extends 父类] [implemetns 接口1,接口2,...] {}
     对于接口,里面的组成只有抽象方法和全局常量,所以很多时候为了书写简单,可以不用写public abstract 或者public static final。并且,接口中的访问权限只有一种:public,
即:定义接口方法和全局常量的时候就算没有写上public,那么最终的访问权限也是public,注意不是default。
      例如:USB接口、打印接口、充电接口等等。
      如果要进行开发,要先开发出USB接口标准,然后设备厂商才可以设计出USB设备。
      现在假设每一个USB设备只有两个功能:安装驱动程序、工作。 
      定义一个USB的标准:
      interface USB {   // 操作标准       
        public void install() ;
        public void work() ;
      }
      定义USB设备—手机:
      class Phone implements USB {
         public void install() {
           System.out.println("安装手机驱动程序。") ;
         }
         public void work() {
           System.out.println("手机与电脑进行工作。") ;
         }  
      }
      定义USB设备—打印机:
      class Print implements USB {
         public void install() {
           System.out.println("安装打印机驱动程序。") ;
         }
         public void work() {
           System.out.println("进行文件打印。") ;
         }
      }

十六 正则表达式
      正则表达式正则表达式,又称规则表达式。计算机科学的一个概念,正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
      简单来说有时候需要这样的需求 对字符串需要匹配 查找 替换等操作
      正则表达式其实是一个特殊的字符串 是一组规则字符串
      常用符号:
      .:是代替任何字符
      [abc]:匹配abc中的任意一个
      [^abc]:除了abc
      [0-9]--->[\d]:
      [\D]:匹配非数字
      [\W]:匹配非单词字符
      [\s]:匹配空格
      [x]*:匹配0个以上的x
      [x]?:匹配0个或1个x
      [x]+:匹配一个以上的x
      [x]{n}:匹配n个x
      [x]{n,}:匹配n个以上的x
      [x]{n,m}:匹配n到m个x
      ^:表示从头开始校验
      比如:美国汽车牌照的一种格式是四个数字加上二个字母。它的正则表达式
      [0-9]{4}[A-Z]{2}   匹配典型的美国汽车牌照号码,如8836KV
      比如:假设要从格式为“June 26, 1951”的生日日期中提取出月份部分,用来匹配该日期的正则表达式
      [a-z]* \s+ [0-9]{1,2},\s* [0-9]{4} 

      String支持正则表达式
      matchs(String reg):
      参数为正则表达式 用来判断字符串是否匹配正则表达式
      匹配:返回true
      不匹配:返回false
      split(String reg):
      用来拆分字符串:用符合正则表达式的子字符串拆分 返回值类型是字符串数组


      replaceAll(String str,String new)
      作用是使用new这个字符串替换符合reg的子串


十七 Object类型
      是所有引用类型的父类 在引用类型的顶端
      他的引用变量可以指向任何类型的一个对象
      Object obj="aaaa";
       obj=new int[3];
  obj=new Scanner(System.in);
      比如:怎么使用数组存一些类型不同的数据
      用Object定义一个数组
      Object[] arr=new Object[3];
                 arr[0]="aaa";
arr[1]=new int[3];
arr[2]=new Scanner(System.in);
      Object类型中的常用方法:
      toString():
      在Object类型中,方法的返回为"类全名@散列码"
      在自定义类型时 如果不手写继承Object 系统默认继承Object
      toString()方法就会被继承
      继承后的方法返回的字符串没有意义。我们应该重写toString()方法
      用来描述new出来的对象信息
      重写toString():默认规则
      "类全名[属性名=属性值,属性名=属性值]"
      toString():当想输出显示对象信息时,会默认调用这个方法

      equals():
      在Object类型中 equals()相当于==  比较的是地址
      在大多数情况下 我们不比较是不是同一个对象 而应该比较两个对象的内容是否一样
      自定义的类继承过来的方法就不满足要求 应该重写equals()
      重写规则:
      public boolean equals(Object obj){
      }
      1 应该判断传进来的参数是不是null
      2 判断传进来的参数是不是自己
      3 判断传进来的参数是不是本类型 如果是同一类型 再去比较属性

      hashCode():
      用于加速查找,实现索引查找(查询算法,存储算法)
      hashCode的两个原则:
      1.两个对象equals()方法比较返回值为true时,那么他们的hashCode()方法也要保证返回值相同。
      2.对象中用equals()来比较使用的属性,都应该用来计算hashCode()。
 需求:
      1.hashCode()返回值相同,equals()返回值也一定要相同。
      2.重写hashCode()使用啦什么属性,在equals()方法中也要使用什么属性。
 所以我们写类时需要重写上面三个方法。


十八 包装类 八大基本数据类型
      每个基本类型在java.lang包中都有一个相应的包装类
      把基本数据类型的数值转换成对象
      byte---java.lang.Byte
      short---java.lang.Short
      int---java.lang.Integer
      long---java.lang.Long
      float---java.lang.Float
      double---java.lang.Double
      char---java.lang.Character
      boolean---java.lang.Boolean
      
      集合不允许存放基本数据类型数据,存放数字时,要用包装类型
      所有包装类都可将与之对应的基本数据类型作为参数,来构造它们的实例
      除Character类外,其他包装类可将一个字符串作为参数构造它们的实例
      常用方法
      Integer.valueOf(int val)
      会将int的值转换Integer类型的对象
      Double.valueOf(double val)
      会将double的值转换Double类型的对象
      ...
      装箱操作 基本数据类型--->包装类
      intValue();
      doubleValue();
      拆箱操作 将包装类对象转换成相应的基本数据类型
      在做运算时 包装类的对象都会转换成相应的基本数据类型再计算

      在jdk1.5版本以后 支持自动拆箱和装箱
      Integer num=5;--->Integer num=Integer.valueOf(5);
      装箱操作
      int a=new Integer("5");--->int a=new Integer(5).intValue();
      拆箱操作
      reg:
      Integer a=5;
      Integer b=6;
      Integer c=a+b;//先拆箱 计算出结果再装箱

      Integer.parseInt(String str)
      将字符串转换成包装类
      int a=Integer.parseInt("12");
      int b=Integer.parseInt("abc");这种情况出现异常
      NumberFormatException 数字格式化异常---程序运行时异常


十九 日期类型
      java.util.Date  
      java语言中支持的日期操作 Date用来计算时间的分量
      但是Date类中的方法大多数已经过时 被Calendar类型取代
      java.text.SimpleDateFormat
      作用:通常都是用来对时间格式化 或者将字符串转换成时间格式
      构造器 
      SimpleDateFormat(String pattern)
      pattern:用来定义日期格式
      y:年 M:月
      format(Date date);     String
      将日期转换成字符串
      parse(String str);     Date
      将字符串转换成日期类型
      有可能出现 ParseException :转换异常---编译期间
      比如获取当前系统时间 按照一定格式显示出来
      Date date = new Date();
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      String r=sdf.format(date);
      System.out.println(r);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值