知识回顾(三)

一、类与对象

1.1概念

类是一类事物的抽象概念,它不指代某一个具体的事物,是一种带有范围指向性的范围。对象是指对应的某一个类中的一个具体的实体,一个个体。可以说万事万物皆对象,类和对象是一种相对的概念。

1.2 实体类

1.2.1 方法

概念

方法是一段代码块的封装,方法中的代码应该围绕着某一个功能的实现来写,目标明确,逻辑要清晰。

规范

非静态方法

public class Example01 { //类的入口
 //修饰符  返回值类型  方法名(参数类型 参数名1,参数名2......){方法体}   
    public void demo(String name,int age){//方法的入口
        //代码块
    }
}

静态方法

public class Example01 { //类的入口
 //修饰符  返回值类型  方法名(参数类型 参数名1,参数名2......){方法体}   
    public static void demo(String name,int age){//方法的入口
        //代码块
    }
}

非静态方法与静态方法的对比

静态方法非静态方法
修饰static 关键字无static关键字
调用调用时无需创建对象调用时要创建对象
示例类名.方法名对象名.方法名

静态方法是属于类的,可供所有对象使用,在内存中有且只有一个。
非静态的方法是属于对象的,每个对象都有一个,每创建一个对象就多一个新的非静态变量或方法。

参数

形参:形式参数,在声明一个方法时,方法名后面的小括号中,就是形参,格式(参数类型 参数名,…)。
实参:实际参数,在调用一个方法时,方法名后面的小括号中,就是实参,
格式:(参数值或同类型的变量)。

1.2.2 方法的重载

概念

同一个类中同名的方法,形参列表不同(形参的个数或者类型)。

示例
 public static void main(String[] args) {
        System.out.println(11);
        System.err.println("出错");
    }

err和out都是printStream类的对象,println都是printStream类中的方法,
符合同一个类中,同名不同参,所以构成重载。

1.2.3 封装和继承

封装
概念

成员属性容易被非法篡改,会有很大的安全隐患,所以可以加上修饰符private,但就无法在其他类中调用,于是就有了getter和setter方法,可以间接访问成员属性.

封装的步骤
  • 属性私有化
  • 提供公共的访问和赋值方法
封装的优点
  • 有效保护了属性,降低了非法篡改和赋值的风险
  • 降低了耦合度
继承
概念

两个类之间的关系(父子关系),如果两个类的范围有绝对的包含关系,这两个类就可以构成父类和子类的关系。

继承的特点和本质

特点: 子类在继承父类后,可以使用父类的属性或方法,也可以使用子类特有的方法。
本质: 在调用子类的构造方法时,系统会默认先调用父类的构造方法。

this和super的区别

this: 在本类成员方法中,访问本类的成员属性和另一个成员方法;在本类的构造方法中,访问本类另一个构造方法。
super:在子类的成员方法中,访问父类的成员方法或者成员属性;在子类的构造方法中访问父类的构造方法。

重写
概念

子类覆盖父类的同名方法,参数也要相同,返回值也要相同,访问权限只能大于或者等于父类方法的权限。

优点和缺点

优点:功能的扩展
缺点:父类中被覆盖的方法,不可能被执行,功能的丢失;在被子类继承的过程中,方法容易被恶意覆盖。

风险的预防
  • 用final修饰类,该类不能被继承
  • 构造方法私有化
  • 修饰的变量成为常量,值不能被修改。
多态
  • 向上转型
            Object o=new Object();
            o=new Pet();//用父类类型接受子类对象
            o=new Dog();
  • 向下转型
        Animal animal=new Dog();
        if (animal instanceof Dog){
        //instanceof 判断某个对象是否由某个类产生
            Dog dog=(Dog)animal;
        }
加载顺序

加载类的时候,会加载所有静态相关的代码:静态属性,静态方法,静态代码块

注意

java中只支持单继承,一个子类只能有一个直接父类,不支持多继承。

1.3 抽象类

1.3.1 结构

public abstract class 类名{代码块}

1.3.2 抽象方法

public abstract void  方法名();
  1. 含有抽象方法的类一定是抽象类,但抽象类不一定含有抽象方法。
  2. 父类是抽象类,作为子类要么继续声明为抽象类,要么就重写父类的所有抽象方法。
  3. 抽象类不能实例化,不能通过new关键字创建对象.
  4. 抽象方法不能被直接调用。
  5. 子类在重写了父类的抽象方法后,可以创建对象,并且会隐式的创建父类的对象。

1.3.3 接口

  • 接口可以理解为定义的一组通用的组件,或者功能模块。
  • 接口中的属性是公共的静态的常量,不可被修改。
  • 接口中的方法可以定义为抽象方法和静态方法。

1.4 内部类

类别内部访问外部外部访问内部
成员内部类可直接访问创建内部类的对象
静态内部类可访问静态属性和静态方法,非静态要创建对象不用创建外部对象
  1. 局部内部类定义在方法中,充当内部变量,使用的范围仅限在定义类的方法中。
  2. 匿名内部类作为传参时使用,用于继承或实现接口时使用。

1.5 包装类

为每种基本数据类型定制的属于自己的类,称之为包装类。类似于码头货轮集装箱的拆箱和装箱的过程。包装类的构造方法一般都有重载。一个构造方法的参数是对应的基本数据类型,另一个则是参数为字符串类型的构造方法。

二、 正则表达式

正则表达式常常用来验证用户输入的数据是否合法,保证和规范数据的正确,便于后台工作人员的维护和统计。

  1. 字母匹配字母(a-z),数字匹配数字(0-9) , -匹配-
  2. [ ] 表示匹配中括号中的任意一个字符
  3. -在中括号外表示 - ,在中括号内表示范围
  4. ^在中括号外表示开头,在中括号内表示除开括号内的其他字符
  5. $在中括号内表示结尾
  6. 小数点表示任意字符
  7. \d 表示数字(java用 \ \d)
  8. \w 可匹配字母,数字,下划线(\ \ w)
  9. [ \u4e00-\u9fa5 ] 匹配汉字
  10. ?表示出现0或1次
  11. +表示出现1次或多次
  12. *表示出现任意次数
  13. { n }表示出现n次
  14. { n,m }表示出现n~m次
  15. { n, }表示出现n次或n次以上
  16. ( ? !正则表达式) 断言,表示排除正则匹配的情况

三、 集合

3.1 List集合

3.1.1 ArrayList

特点:集合没有固定的长度,没有固定的类型
常用方法:

  1. add()-------添加元素
  2. remove()------移除元素
  3. set()------修改元素
  4. get()------获取下标元素
  5. isEmpty()------是否为空
  6. contains()------是否包含当前元素

循环遍历:fro循环,增强for循环,do-while , while,迭代器Iterator

3.1.2 LinkedList

特点:插入,删除元素的效率比较高,是一种链式的数据集合。
常用方法:

  1. addFirst()-----添加第一个元素
  2. addLast()------添加最后一个元素
  3. removeFirst()------移除第一个元素
  4. removeLast()------移除最后一个元素
  5. getFirst()------获取第一个元素
  6. getLast()------获取最后一个元素

循环遍历: 与ArrayList类似

3.1.3ArrayList与LinkedList的区别

LinkedList在添加与删除时要比ArrayList的效率高很多
ArrayList的底层实现:Object [ ] Arrays.copyof()
LinkedList的底层实现: Node(E e,Node prev,Node next)

3.2 Set集合

特点:唯一(不允许出现重复的元素),无序(没有index下标)
创建对象:HashSet set=new HashSet();
常用方法:

  1. set.add()-----添加
  2. set.remove()------移除
    由于set集合没有像list集合一样的下标所以查找和修改就没办法通过下标来处理,要想修改就只能重新添加元素。循环遍历也没办法通过下标来循环,只能循环遍历set集合中的元素。

3.3 Map集合

特点:map接口专门处理键值映射,有一个实现类HashMap , map中的key是不允许重复的,一个key只允许对应一个唯一的value。
常用方法:

  1. put()------增加
  2. remove()-----删除
  3. replace()------修改替换
  4. get()-----获取key所对应的value值

循环遍历map中所有的key:

       Set keys = map.keySet();
       for(Object key : keys){
          System.out.println(key+"--"+map.get(key));
       }

循环遍历map中所有的value:

     Collection  values = map.values();
     for(Object value : values){
         System.out.println(value);
     }     

循环遍历map中所有的键值对:

         Set  entries = map.entrySet();
         for(Object entry : entries){
          //向下转型  Object---map.Entry;
          Map.Entry en = (Map.Entry) entry;
          System.out.println(en.getKey()+"--"+en.getValue());
         }
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值