java基础复习03
2021/7/28 11:36:15
本文主要是介绍java基础复习03,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
java基础复习
面对对象
2.7、final关键字
final关键字代表最终、不可改变的。
常见四种用法:
- 可以用来修饰一个类
- 可以用来修饰一个方法
- 还可以用来修饰一个局部变量
- 还可以用来修饰一个成员变量
当final修饰一个类的时候,其格式:
public final class 类名称(){ //.............. }
含义:当前这个类不能有任何的子类。(太监类)
- 注意:一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写(因为没儿子)
当final修饰一个方法的时候,其格式:
修饰符 final 返回值类型 方法名称(参数列表){ //方法体 }
当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写。
- 注意:对于类、方法来说, abstract关键字和final关键字不能同时使用,因为矛盾。
当final修饰局部变量的时候
-
对于基本类型来说,不可变说的是变量当中的数据不可改变
-
对于引用类型来说,不可变说的是变量当中的地址值不可改变
当final修饰成员变量的时候
对于成员变量来说,如果使用final关键字修饰,那么这个变量也照样是不可变。
1、由于成员变量具有默认值,所以用了final之后必须手动赋值,不会再给默认值了。
2、对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值。二者选其一。
3、必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值。
2.8、四种修饰符
2.9、内部类
分类:
1、成员内部类
2、局部内部类(包含匿名内部类)
成员内部类的定义格式:
修饰符 class 外部类名称{ 修饰符 class 内部类名称{ //............. } //............. }
注意:内用外,随意访问; 外用内,需要内部类对象。
如何使用成员内部类
- 间接方式:在外部类的方法当中,使用内部类,然后main只是调用外部类的方法。
- 直接方式,公式:
- 外部类名称.内部类名称 对象名 = new 外部类名称() .new内部类名称();
内部类同名变量的访问
public class Outer { int num = 10; //外部类的成员变量 public class Inter{ int num = 20; //内部类的成员变量 public void methodInner(){ int num = 30; //内部类方法的局部变量 System.out.println(num);//局部变量,就近原则 System.out.println(this.num);//内部类的成员变量 System.out.println(Outer.this.num);//外部类的成员变量 } } }
局部内部类的定义格式:
修饰符 class 外部类名称{ 修饰符 返回值类型 外部类方法名(参数列表){ class 内部类名称{ //............. } } }
小节一下类的权限修饰符:
- public > protected (default) > private
定义一个类的时候,权限修饰符规则:
- 外部类:public / ( defauLt)
- 成员内部类:public / protected / ( default) / private
- 局部内部类,什么都不能写
局部内部类的使用方法为:在外部类new内部类,调用方法
匿名内部类
如果接口的实现类(或者是父类的子类)只需要使用唯一的一次。
那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】。
格式:
接口名称 对象名 = new 接口名称(){ //覆盖重写所有抽象方法 };
注意事项:
- 匿名内部类,在【创建对象】的时候,只能使用唯一 一次。
- 如果希望多次创建对象,而且类的内容一样的话,那么就必须使用单独定义的实现类了。
- 匿名对象,在【调用方法】的时候,只能调用唯一 —次。
- 如果希望同一个对象,调用多次方法,那么必须给对象起个名字。
- 匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】
- 强调: 匿名内部类和匿名对象不是一回事!!!
3.0、Collection集合概述
集合概述
- 集合:集合是java中提供的一种容器,可以用来存储多个数据。
集合和数组既然都是容器,它们有啥区别呢?
- 数组的长度是固定的。集合的长度是可变的。
- 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。
1、学习顶层:学习顶层接口/抽象类中共性的方法,所有的子类都可以使用
⒉、使用底层:顶层不是接口就是抽象类,无法创建对象使用,需要使用底层的子类创建对象使用
常用功能
-
java.util.collection接口
- 所有单列集合的最顶层的接口,里边定义了所有单列集合共性的方法,任意的单列集合都可以使用collection接口中的方法
-
public boolean add(E e): 把给定的对象添加到当前集合中。
-
public void clear(): 清空集合中所有的元素。
-
public boolean remove(E e): 把给定的对象在当前集合中删除。
-
public boolean contains(E e): 判断当前集合中是否包含给定的对象。
-
public boolean isEmpty(): 判断当前集合是否为空。
-
public int size(): 返回集合中元素的个数。
-
public object[] toArray(): 把集合中的元素,存储到数组中。
public class DemoCollection { public static void main(String[] args) { Collection<String> coll = new ArrayList<>(); System.out.println(coll);//[] boolean a = coll.add("张三"); System.out.println("a:"+a);//a:true coll.add("李四"); coll.add("王五"); coll.add("赵六"); coll.add("田七"); System.out.println(coll);//[张三, 李四, 王五, 赵六, 田七] boolean b = coll.remove("王五");//删除指定元素 System.out.println("b:"+b);//b:true boolean c = coll.remove("田七"); System.out.println("c:"+c);//c:true System.out.println(coll);//[张三, 李四, 赵六] boolean d = coll.contains("张三"); System.out.println("d:"+d);//d:true boolean e = coll.isEmpty();//判断是否为空 System.out.println("e:"+e);//e:false Object[] obj = coll.toArray();//把集合中元素存到数组中 for (int i = 0; i < obj.length; i++) { System.out.println(obj[i]); } int size = coll.size();//返回个数 System.out.println("元素个数为:"+size);//元素个数为:3 coll.clear(); System.out.println(coll);//[] 清空元素,但是集合还在 } }
3.1、iterator接口(迭代器)
在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口 java.util.Iterator 。Iterator接口也是Java集合中的一员,但它与collection、Map 接口有所不同,collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历) collection 中的元素,因此Iterator对象也被称为迭代器。
- 迭代: 即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
有两个常用的方法
- boolean hasNext() 如果仍有元素可以迭代,则返回trueo
- 判断集合中还有没有下一个元素,有就返回true,没有就返回false
- E next()返回迭代的下一个元素。
- 取出集合中的下一个元素
Iterator迭代器,是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊
collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器的实现类对象
Iterator
迭代器的使用步骤(重点):
1、使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
2、使用Iterator接口中的方法hasNext判断还有没有下一个元素
3、使用Iterator接口中的方法next取出集合中的下一个元素
public class DemoIterator { public static void main(String[] args) { Collection<String> coll = new ArrayList<>(); coll.add("吕布"); coll.add("赵云"); coll.add("典韦"); coll.add("张飞"); //Iterator<E>接口也是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型 Iterator<String> it = coll.iterator(); while (it.hasNext()){ String a = it.next(); System.out.println(a); } } }
3.2、增强For循环
增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个lterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
格式:
for(元素的数据类型 变量 : Collection集合or数组){ //操作代码 }
public class DemoForEach { public static void main(String[] args) { demo1(); demo2(); } public static void demo1(){ int[] array = {1,2,3,4,5}; for (int i : array){ System.out.println(i); } } public static void demo2(){ ArrayList<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); for (String s : list){ System.out.println(s); } } }
3.3、范型
泛型是一种未知的数据类型,当我们不知道使用什么数据类型的时候可以使用泛型
- 泛型也可以看出是一个变量,用来接收数据类型
ArrayList集合在定义的时候不知道集合中都会存储什么类型的数据,所以类型使用泛型
- E:未知的数据类型
public class ArrayList<E>{ public boolean add(E e){} public E get(int index){} }
创建集合对象的时候就会确定泛型的数据类型
ArrayList<String> list = new ArrayList<>();
public class ArrayList<String>{ public boolean add(String e){} public String get(int index){} }
创建集合对象,使用泛型好处:
-
避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
-
把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候会报错)
弊端:
泛型是什么类型,只能存储什么类型的数据
定义和使用含有范型的类
public class Class<E> { private E name; public E getName() { return name; } public void setName(E name) { this.name = name; } }
public class DemoClass { public static void main(String[] args) { Class<String> Sc = new Class<>(); Sc.setName("张三"); String name = Sc.getName(); System.out.println(name); Class<Integer> Sc1 = new Class<>(); Sc1.setName(1); Integer name1 = Sc1.getName(); System.out.println(name1); } }
定义和使用含有范型的方法
public class Demo1 { //定义一个范型的方法 public <E> void method(E e){ System.out.println(e); } //定义一个静态的范型方法 public static <M> void method1(M m){ System.out.println(m); } }
public class DemoGenericMethod { public static void main(String[] args) { Demo1 demo1 = new Demo1(); //传递的是什么类型,范型就是什么类型 demo1.method("张飞"); demo1.method(1); demo1.method(3.4); demo1.method(true); Demo1.method1("静态方法不推荐创建对象使用"); } }
这篇关于java基础复习03的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25初学者必备:订单系统资料详解与实操教程
- 2024-12-24内网穿透资料入门教程
- 2024-12-24微服务资料入门指南
- 2024-12-24微信支付系统资料入门教程
- 2024-12-24微信支付资料详解:新手入门指南
- 2024-12-24Hbase资料:新手入门教程
- 2024-12-24Java部署资料
- 2024-12-24Java订单系统资料:新手入门教程
- 2024-12-24Java分布式资料入门教程
- 2024-12-24Java监控系统资料详解与入门教程