专栏首页HUC思梦的java专栏JAVA学习笔记(二)

JAVA学习笔记(二)

设计模式 设计模式有23种,所有面向对象的语言都有这23种设计模式。 单例设计模式 单例:单个实例(对象) 步骤: 1.Test不能让别人创建对象 ---》Test构造方法变成私有的 (Test类不让创建对象了) 2.Test类自已创建自已的对象 (别人拿不了,因为Test不让创建对象,不能通过对象名.属性拿) 3.Test类对外提供一个公共的静态方法,让别人拿这个对象 (静态方法不能调用非静态变量) 4.Test类把这个对象变成静态变量 5.拿对象----》类名.方法名() 6.拿的对象是同一对象,指向的是同一内存地址。 保证对象唯一性思想: 1)不允许其它程序用new来创建对象 2)在该类创建一个本类实例 3)对外提供一个方法,让其它程序可以获取该对象

什么是继承? 多个类中存在相同属性和行为时,将这些相同的内容拿出来放在一个单独类中,那么多个类无需再定 义这些属性和行为,只要继承那个类即可。多个类可以称为子类,单独这个类称为父类或者超类。继承 的出现提高了代码的复用性。 什么时定义继承? xx是yy的一种 ---- xx is a yy 继承后子类中成员的特点 成员(全局)变量特点: 1)重名 子类属性 this.XX 父类:super.XX 2)不重名 XX XXX

成员方法特点: 1)不重名 2)重名 ----重写(覆盖,复写 overide) 重写:在子父类中,如果子类中的方法和父类中的方法同名,相同返回值,参数列表也相同,并 且访问权限>=父类中的方法,子类中的方法覆盖父类中的方法

构造方法特点: 1)子类的构造方法自动在第一行调用了父类默认的构造方法 super(); 2)当父类默认的构造方法消失时,子类会报错,子类的构造方法要手动在第一行添加父类自定义的 构造方法。

final可以修饰类,方法,变量。 final修饰的类不可以被继承。 final修饰的方法不可以被覆盖。 final修饰的变量是一个常量,只能被赋值一次。 内部类只能访问被final修饰的局部变量。

抽象什么时用 当类里有的方法在描述事务时,不具体,无法准确的描述,这时,我们就可以用抽象来解决这个问题 抽象特点 1.抽象类不可以被实例化,也就是不可以用new创建对象。 2.抽象类通过其子类实例化,而子类需要覆盖掉抽象类中所有的抽象方法后才可以创建对象,否则该子 类也是抽象类。 3.抽象类是由abstract来修饰的。 4.抽象类中可以有抽象方法,也可以没有,可以有普通方法也可以没有。 抽象方法和普通方法的区别 1)抽象方法只有方法头,没有方法体。普通方法都有 2)抽象方法由abstract来修饰,普通方法没有 3)抽象方法必须活在抽象类中,普通方法既可以活在抽象类中也可以活在非抽象类中 抽象类和普通类的异同 相同点: 抽象类和普通类都是用来描述事务的,都在内部定义了成员(方法和属性)。 不同点: 普通类有足够信息来描述事务,抽象类描述事务的信息有可能不够充足 普通类不能定义抽象方法,只能定义普通方法,抽象类中可以定义抽象方法,同时也可以定义普通 方法 普通类可以被实例化,抽象类不可以被实例化(创建对象) 抽象关键字abstrat不可以和private,static,final关键字共存。

接口 类中的方法都是抽象时,这个类就叫作接口。 接口就是特殊的抽象类,即所有方法都是抽象方法的抽象类就是Java中的接口(interface)

接口如何创建 [修饰符] interface 接口名{ [public] [static] [final] 数据类型 变量名; [public] [abstract] 返回值 方法(); } 接口中的成员修饰符是固定的 public static final修饰的变量变为常量,该值不能改变,只能读 修饰符:可选,用于指定借口的访问权限,可选值为public.即使省略也依然是public. 接口名:必选参数,用于指定接口名称,接口名必须是合法的java标识符。一般情况下,要求首字母大 写。 方法:接口中的方法只有定义而没有被实现。

类与接口之间是实现关系 接口不可以被实例化,实现了接口的子类并且覆盖接口中所有抽象方法后,这个子类才可以被实例化, 否则这个子类就是一个抽象类。 java不支持多继承,java将多继承机制进行改良变成了多实现 一个类可以实现多个接口;一个类若实现了多个接口,必须把多个接口中的方法全部实现。 接口与接口之间是继承关系,而且可以多继承。接口的出现避免了单继承的局限性。

接口与抽象类的关系 共性:都是不断抽取出来的抽象的概念 区别1:抽象类体现继承关系,一个类只能单继承;接口体现实现关系,一个类可以多实现 区别2:抽象类是继承 是is a关系(所属关系) 在定义该体系的基本共性内容;接口是实现 是 like a关系(不所属关系) 在定义该体系的额外功能 区别3:抽象类中可以定义非抽象方法,供子类直接使用;接口的方法都是抽象,接口中的成员都有固定 修饰符

什么是多态 多态:字面上理解,多种形态 方法有多种形态:方法的重写,方法的重载 对象的多种形态 多态语法: 父类类名 对象名 = new 子类类名() Animal cat = new Cat(); 多态前提 1)类之前要有继承关系 2)方法要有重写 多态的特征 在多态情况下: 1)子父类中都有同名静态方法时,调用同名静态方法应该注意: 编译看左边,运行看左边 2)子父类中都有同名非静态方法时,调用同名非静态方法应该注意: 编译看左边,运行看右边 3)子父类中都有同名属性(静态和非静态)时,调用同名属性(静态和非静态)应该注意: 编译看左边,运行看左边(因为:变量是不存在覆盖的,只有方法才能覆盖)。 多态的好处:提高代码复用性,便于维护。 多态的缺点:多态后,不能调用子类特有的(只有子类中有,父类中没有的方法)方法。 多态的缺点的解决方法 向上转型(上塑造型):Animal an = new Cat(); 向下转型(下塑造型):Cat cat = (Cat)an; 向下转型注意:Animal an = new Cat(); Dog dog =(Dog)an; 错误的

Animal an = new Animal(); Dog dog =(Dog)an; 错误的 如:猫是动物的一种,动物不单单是猫。 多态类型的判断instanceof 对象 instanceof 类 --------》结果是 boolean

什么是内部类:类里面定义的类 将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类) 定义的位置:定义在成员位置上、定义在局部位置上(方法、代码块)、匿名内部类(new A() {...}.show();) 内部类访问特点: 内部类可以直接访问外部类中的成员,包括私有成员。 而外部类要访问内部类中的成员必须要建立内部类的对象。 内部类的好处:为了访问方便。

异常:字面上理解,不正常的情况。指程序运行中遇到的非致命的,通过某种修正后还能继续执行的错 误 异常分类: IOException: 编译异常 RuntimeException:运行异常 常见的运行异常:算数异常ArithmeticException;数组下标越界ArrayIndexOutOfBoundsException;类型 转换异常ClassCastException;创建一个长度为负数的数组NegativeArraySizeException;空指针异常 NullPointerException 常见的编译异常:输入输出异常IOException;未找到文件异常FileNotFoundException;指示在底层协议 中存在错误,如 TCP 错误SocketException;指定名字的类或接口未找到ClassNotFoundException 异常处理: try{ }catch(异常类 异常对象){ }finally{ } try{ }catch(异常类 异常对象){ } try{ }finally{ } getMessage():用来提供有关异常事件的信息; printStackTrace():异常名称、信息、位置。包括getMessage()的内容; toString():得到异常类名和相关信息; finally:为异常处理提供统一出口,对程序进行统一管理,无论try中有没有抛出异常,finally都被执 行;一般用于资源的清理和释放工作。如:关闭已打开的文件、删除临时文件、释放数据库连接; 使用方式:异常对象.getMessage()

throw和throws的区别 throws什么时用:在方法头抛异常,可以抛多个,用逗号分隔 throw什么用:在方法内部用,抛的是异常的对象,只能抛一个 throw 运行期异常对象()---->方法头部不用必须throws throw 编译期异常对象()---->方法头部必须throws,有几个抛几个

异常与继承之间的关系 当方法抛出异常时,子类如何重写: 1)子类方法可以不抛 2)子类抛和父类方法抛出的异常相同 3)子类抛父类方法抛出的异常的子类异常

自定义异常: Class MyException extends Exception{ MyException(){//无参构造方法 super();//实际都是由父类来完成这个功能的 } MyException(String s){//有参构造方法 super(s);//实际都是由父类来完成这个功能的 } }

finally 在什么情况下才不被执行 1)当try中没有异常时如果加了System.exit(1);--->(退出虚拟机的方法) 2)当try中有异常时,在catch中如果加了System.exit(1);--->(退出虚拟机的方法)

java常用包介绍: java.lang 核心类库 数据类型 数学类 字符串 线程 java.util 日期类 时间 堆栈 Vector 向量 java.io 提供对文件进行操作的类File 输入流 输出流 java.net 实现网络功能 java.applet java小程序

集合作用:可以装对象(任何对象) 问:数组装对象和集合装对象的区别? 答:数组一创建就给定大小,数组存放的元素类型是同一类型。 集合创建不用定大小,集合存放的元素类型是Object. 集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。 数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型和引用 数据类型,集合只能存储对象。 Collection接口有两个子接口。List(列表),set(集). List:可存放重复元素,元素存取是有序的。元素都有下标,元素可以重复。 Set:不可以存放重复元素,元素存取是无序的。元素没有下标,元素不可以重复。

Collection接口: 1.添加 boolean add(Object obj); boolean addAll(Collection c) 2.删除: boolean remove(Object o) boolean removeAll(Collection c) void clear() 3.判断: boolean isEmpty() boolean contains(Object o) boolean containsAll(Collection c) 4.获取: int size() //长度 5.其它 Object[] toArray() List接口: 1.添加: void add(int index, E element) boolean addAll(int index, Collection c) 2.删除 Object remove(int index) 3.修改: Object set(int index, E element) 4.获取: Object get(int index) int indexOf(Object o) int lastIndexOf(Object o) List subList(int fromIndex, int toIndex)

从集合中取值的方式: List col=new ArrayList(); col.add("123"); col.add("456"); col.add("789"); col.add("123"); col.add(new Person()); 1) for(int i=0;i<col.size();i++){ System.out.println(col.get(i)); } 2) Iterator it = col.iterator();//迭代器 while(it.hasNext()){ String str = (String)it.next(); System.out.println(str); //注意如果都是String类型这样才可以强转 } 3) for(Iterator its = col.iterator();its.hasNext();){ System.out.println(its.next()); } 泛型: Ren ren1 = new Ren("pengpeng",1);// Ren ren2 = new Ren("dongdong",1); List<Ren> col=new ArrayList<Ren>();//泛型 col.add(ren1); col.add(ren2); Iterator<Ren> it = col.iterator(); while(it.hasNext()){ Ren ren = it.next(); System.out.println(ren.getAge()+","+ren.getName()); }

作用:1)可以规定集合存放元素的类型 2)取值时不用强转

LinkedList和ArrayList的区别? LinkedList: 增加 删除快,查询慢 ArrayList:增加 删除慢,查询快 Vector(向量) Vector: Ren ren1 = new Ren("pengpeng",1); Ren ren2 = new Ren("dongdong",2); Vector<Ren> co=new Vector<Ren> (); co.add(ren1); co.add(ren2); Enumeration<Ren> en = co.elements(); //---->枚举 while(en.hasMoreElements()){ Ren ren = en.nextElement(); System.out.println(ren.getName()+","+ren.getAge()); }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java lambda表达式

    Lambda表达式是 Java8 中最重要的新功能之一。使用 Lambda 表达式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看 起来更简洁易懂。L...

    HUC思梦
  • hibernate笔记(四)

    3) HQL查询, Hibernate Query language hibernate 提供的面向对象的查询语言。

    HUC思梦
  • SpringBoot整合Dubbo

    HUC思梦
  • Dart语言的接口替代品

    在Dart语言中并没有接口的概念,但接口的功能需要其他功能来弥补,这就是抽象类。接口的作用是用于制定规范。也就是说,在接口中定义的方法,都必须在实现接口的类中实...

    蒙娜丽宁
  • Java 接口理论篇

    接口的两层含义:接口作为数据类型   狭义的接口  接口的第二层含义:工具 广义的接口 在接口中所有的变量都是静态常量 在接口中所有方法都是抽象方法 定义一个接...

    房上的猫
  • 分子对接简明教程 (4)

    文件格式解释 PDB文件 (详细格式描述) 基本信息部分 HEADER记录: 包括分子的分类、提交日期、PDB ID TITLE记录: 为该结构的描述,如果有多...

    生信宝典
  • 微软为必应推出人工智能搜索新功能,使搜索结果更具价值

    科技改变生活 12月14日,微软在旧金山举行的一场关于AI的主题活动中,宣布旗下搜索引擎产品必应将加入一系列人工智能的新特性。此次更新将使搜索结果更加精准,用户...

    企鹅号小编
  • SouapUI接口测试之Get和Post请求

    此篇主要介绍SoapUI工具做常用的两种请求接口测试,分别是get请求和post请求

    用户6367961
  • vue - 使用vue实现自定义多选与单选的答题功能

    xing.org1^
  • 零基础使用Django2.0.1打造在线教育网站(提示):错误贴

    努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

    编程思录

扫码关注云+社区

领取腾讯云代金券