实训笔记之java基础学习

来源:互联网 发布:网络装修平台哪家最好 编辑:程序博客网 时间:2024/05/18 22:46

实训笔记之java基础学习

第一章 java概述

  1. java之父 詹姆斯·高斯林
  2. 在c++的基础上产生名为oak的语言,后改名为java
  3. 99年风靡世界,当时分为 java SE(标准版,桌面级开发) java EE(企业级开发) java ME(嵌入式,手机程序开发)同年被oracle公司收购
  4. 04年 里程碑式的版本5.0java发布
  5. JDK java development kit java语言开发工具包。包括JIM(java virtual machine)java虚拟机(实现跨平台特性 对内存的分配和释放) 和 JRE(java runtime environment)java运行环境
  6. 源程序编译成字节码,然后由虚拟机编译成机器码,最后机器码调用硬件执行
  7. 在命令提示窗通过java -version来确定JDK是否安装成功以及版本号
  8. 安装完JDK需要配置三个变量(均是系统变量) JAVA_HOME(新建变量,变量值为安装JDK的地址) PATH(不需要新建,在PATH变量值最后添加;%JAVA_HOME%\bin 为了指向JDK的bin)通过PATH变量快捷执行文件 CLASSPATH 5.0版本之前需要配置,因为需要用到dt.jar 和tools.jar,5.0以后自动关联不需要配置
  9. 集成开发的实质还是通过命令符运行开发
  10. 通过在函数前用/**回车编写文档注释 能形成一个帮助文档(在cmd中进入到当前类的路径通过javadoc命令)

第二章 java语言基础

  1. 字符集分为ASCII字符集(8位单字节编码,128位 主要为英文字母) GB2312字符集(16位双字节编码,主要为汉子、符号、日文、俄文)Unicode字符集(16位或32位,万国码,每个国家每个字符都能唯一标识。分为UTF-8 UTF-16 UTF-32 只有UTF-8长度可变,也是最常用)
  2. java是强类型语言,必须先声明后使用。标识符不能数字开头
  3. \为转义符号标志
  4. ++a为先自增,a++为后自增
  5. break终止当前所有循环。continue终止本次循环之后的代码,循环未结束。return终止当前循环并推出程序块
  6. for each的输出方式能更便捷的输出数组

第三章 面向对象基础

  1. java是一种面向对象语言,分为面向对象设计 面向对象分析 面向对象编程。三个特性:继承(子类继承父类的特性) 封装(封装就是把普通的对象进行封装,对象的属性设为私有) 多态(同一操作或者过程作用在不同对象上会产生不同的结果)
  2. 引用传递的方法在执行后会影响到实际对象的改变,引用的是地址,形参和实参指向的地址是同一个。而值传递都发生在栈内存,改变的事拷贝值,实际对象并未改变
  3. 方法重载的原则 1.在同一个类中2.对应的形参类型不同,或形参的个数不同 3.方法名相同
  4. 关于运算符解读,哪个符号在前,先实行哪个符号
  5. JDK1.5以后可以实现可变参数,只能将参数列表最后一个参数当成可变参数

第四章 核心类

  1. 静态方法通过类名.方法直接执行 类方法需要创建对象来执行 通过static修饰的静态的方法或者类属于类本身 是类相关 不属于类的对象
  2. 封装类可以把字符串的值转化为基本数据类型 可以直接调用封装类的构造方法Xxx(String s)或者 ParseXxx(String s)的静态方法
  3. 基本数据类型转换成字符串类型可以用空字符串连接数值”“+123 或者调用封装类的toString()静态方法 或者调用String类的valueOf()静态方法
  4. 装箱是将数值从栈传到堆,拆箱则相反
  5. new会在堆内存新建对象,new几次新建几个,而栈只会有一个。
  6. 重写又称方法覆盖,是在子类中定义某方法与其父类有相同的名称和参数的操作。静态方法不能重写,子类方法的可访问性必须和父类方法的可访问性一致或者更加公开,私有方法不能重写
  7. ==比较地址 equals比较值 equals()和toString()是能够在类中进行重写的
  8. 字符串与其他类型进行“+”连接时,字符串在前则将其他类型以字符串形式打印,字符串在后则按照从左到右进行运算
  9. String字符串的常用方法,str.length()字符串长度,str.substring()截止字符串从第几位到第几位字符,str.toLowerCase()将字符串小写化,str.toUpperCase()将字符串大写化 char charAt(int index)获取字符串指定位置的字符下标, int compareTo(String s)比较两个字符串大小,相等返回,不等返回不等字符编码值的差 boolean endsWith(String s)判断一个字符串是否以指定字符串结尾
  10. StringBuffer可以减小内存开销 以及各种方法 xx.append()添加字符串,xx.insert(0,xxx)在指定位置添加字符串,xx.replace(0,0,xx)两个起止之间替换 删除 xx.delete()。反转 reverse();容量capacity();保留长度setLength(0);
  11. StringBuilder和StringBuffer用法完全一样,方法也相同,唯一区别,前者线程不安全后者线程安全。线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据
  12. Scanner中接受回车信号作为终结 方法为 xx.useDelimiter(“\n”)next();nextInt();方法都只扫描到有效数值空格后停止,重复调用可全部扫描,或者调用nextLine()扫描一行
  13. Math类的常用方法 Math.abs()绝对值,Math.random()随机数随机数为[0,1],Math.max()较大值

第五章 类之间的关系

  1. 在继承中,创建子类对象的时候会先执行父类的构造方法。一个类只能继承一个父类,但是可以通过接口来实现其他功能
  2. 多态有两种表现方式,一种是由父类创建对象指向子类,但是系统会动态地根据被引用对象的类型来选择执行的方法。即指向哪个子类,执行哪个类的方法。另一种是子类重写父类方法
  3. 在子类的构造方法里调用父类的构造方法时,系统会自动隐式的调用父类的无参构造方法。如果父类中没有显式的写出无参构造方法,只有有参的构造方法,那就要在子类的调用中显式的调用有参构造方法。super();
  4. 在调用普通方法中可以用super.方法名 调用父类的方法
  5. 四种关系的通常表现:依赖关系:在一个类的方法中操作另一个类的对象。 关联关系:一个类中使用一个类的对象作为该类的成员变量。聚合关系:一个类由多个其他类的对象作为该类的成员变量,此时整体与部分之间是可以分离的,整体和部分都可以具有各自的生命周期。组成关系:整体与部分不可分离,整体的生命周期结束以后,部分的生命周期也随之结束。强弱:依赖 < 关联 < 聚合 < 组合
  6. 内部类是在类的内部再定义一个类 该类外面的类称为外部类
  7. 内部类能够像私有一般将自己隐藏起来,不被同一个包里的其他类访问
  8. 内部类可以像继承外类一样访问外部类的所有属性,包括外部类的私有属性
  9. 在回调方法中,匿名内部类尤为便捷,特别是时间处理经常用,因为匿名内部类在创建时就会创建该类的一个实例,然后定义会立刻消失,不能重复使用 在监听器中经常使用
  10. 局部内部类不能用public或者private声明,局部内部类作用于被限定在该类的方法中,可以对外界完全隐藏,只有该方法可见。局部内部类不仅可以访问外部类的成员还可以访问被final修饰的局部变量
  11. 静态内部类只能访问静态的成员变量和方法
  12. 单例模式:可以保证系统中一个类只有一个实例。一个类有且仅有一个实例,并且自行实例化向整个系统提供
  13. 单例模式为了确保只有一个实例,就不能让其用new创建,可以将构造函数设为private
  14. 提供一个静态方法,能够通过类名直接调用,用该方法创建对象。为了确保对象的创建需要判断是否在类中存在对象,为此,需要在全局创建一个静态成员变量,用来判断是否存在实例,要是存在就无需创建

第六章 抽象类与接口

  1. 抽象类的abstract放在class前,抽象方法的abstract放在方法的返回类型前,抽象方法没有方法体 抽象类不能被实例化(不能使用new关键字直接创建实例,)可在子类创建实例时调用 用抽象类指向他的子类来创建对象
  2. 一个抽象类中可以有多个抽象方法,也可以含有普通的方法和成员变量
  3. 定义抽象类有三种情况:直接定义一个抽象类;继承一个抽象类,如果子类没有全部实现父类的抽象方法,那么就要在子类声明abstract;实现一个接口,抽象类不能被定义为private
  4. 接口是为了使模块之间联系更加简单,降低耦合
  5. Java只支持单继承,可以通过内部类和接口来实现多继承的效果。一个类可以实现多个接口,一个接口也可以继承多个接口但是也只能继承多个接口
  6. Java8开始允许接口中定义默认方法、类方法,接口中的成员变量自动用public static final修饰、方法默认访问权限为public abstract 定义的默认方法要用default修饰 通过接口的实现类的实例对象来调用默认方法 内部类内部接口都默认用public Static
  7. 通过实例化接口实现类的对象,并且将其赋值给一个接口变量引用来实现接口,(父类的引用指向子类)也可以通过接口实现类本身实例化的对象实现接口
  8. 接口中只能有默认方法 类方法和 抽象方法不含有构造方法
  9. 引用类型变量 Instanceof 引用类型 能够判断前者是否为后者的实例

第七章 异常

  1. 只有在运行时才需要处理的异常为非检查异常,在编译时需要处理的为检查形异常。(必须要处理的异常)
  2. 异常处理机制:捕获异常try…catch try为发现异常 catch为捕获处理异常。Throw将不知道如何处理的异常抛出,让上一级调用者处理异常
  3. 异常处理提高了程序可读性 简化结构,保证了代码健壮性,不同情况的异常对应不同的异常类,充分发挥类的可扩展性和可重用性的优势
  4. Catch语句可以通过 | 捕获多个异常
  5. Finally包含的代码块为最终都会被执行
  6. 将使用资源的语句放在try的()中,java系统会自动释放资源 运行 .Close()方法可以自定义抛出异常 需要编写一个异常类继承 Exception 或者RuntimeException(异常产生在运行程序时且在编写代码时不知道哪里出错)可以在异常类中编写自己需要的方法和操作,比如编写异常文档 如果只是单纯的抛出异常名称可以使用throw new Exception(“asd”);可以在括号里写明异常情况
  7. Throws抛出一个异常序列,抛出的是异常类型,通过在方法上进行声明 通过方法的调用者处理。可以在方法上用,分隔抛出多个异常类型 定义的方法不知道如何处理异常时使用Throw抛出的是一个异常实例对象,只能抛出一个异常实例,在方法内部处理

第八章 泛型与集合

  1. Object上帝类可以使各种数据类型变得通用,但是在编写时不会出错,不够严谨,泛型可以解决这种问题
  2. 泛型不需要强制转换数据类型可以自动转换,能够将数据类型定义为参数,在使用前再指明,提高了代码的重用性
  3. 泛型经常使用在类 接口 方法,泛型类是引用类型,在堆内存中
  4. 泛型创建实例化时可以只在声明时表明所需要的类型,创建时可以不写
  5. 通配符“?”表示一个未知类型,从而解决类型被限制、不能动态根据实例进行确定的缺点,主要用在泛型类中
  6. 泛型的上界用extends表示 上界在定义泛型类时指定 下界用super表示 下界只在使用的时候指定
  7. 泛型的类型信息将在编译处理时被擦除掉,过程称为类型擦除。所以在对泛型的使用上做了一些限制,大多数都是由类型擦除和转换引起的
  8. 泛型的类型参数只能是类类型,不能是简单类型
  9. 同一个泛型类有不同版本(不同参数类型)相互不兼容
  10. 定义泛型时候,类型参数只是占位符,不能直接实例化
  11. 不能实例化泛型数组,除非是无上界的类型通配符即?
  12. 泛型类不能继承throwable,即不能为异常类,不能抛出和捕获
  13. java集合类主要由两个接口派生出:Collection和Map
  14. java集合三大类:Set集合添加的元素是无序的不能重复的,List集合添加的元素是有序的能重复的,Map集合每个元素都有key/value键值对组成,key值是唯一的
  15. Collection接口是set queue list的父类接口 使用时可能会造成一系列不支持操作的异常和不兼容情况
  16. 迭代器可以采用统一的方式对Collection集合中的元素进行遍历操作,不需要知道内容,可以直接使用foreach循环遍历
  17. java从JDk5.0增加了Iterable接口 为Collection的父接口,因此所有实现了Iterable的集合类都是可以被迭代器迭代的,其中的iterator()方法可以获取每个集合自身的迭代器Iterator用于遍历自身集合
  18. ArrayList和Vectoy是List接口的两个典型实现类,两者都是基于数组实现的列表集合,但该数组是一个动态的长度可变的并允许再分配的Object[]数组 ArrayList是线程不安全的,Vectoy是线程安全的(所以效率低) 二者使用方法一致
  19. foreach(所要遍历集合中的变量类型 变量名:遍历的集合名)
  20. Vectoy的子类Stack能够模拟栈的原则,有先进后出的特性
  21. set接口常用的三个实现类包括HashSet TreeSet 和EnumSet,HashSet最常用 使用Hash算法来存储集合中的元素,具有良好的存取查找性 TreeSet用树的数据结构存储集合元素,可以保证处于排序状态。支持自然排序和定制排序
  22. 队列Queue 以先进先出“FIFO”的方式排列各个元素,除了继承Collection的接口方法外,还提供了队列的插入、提取和检查操作,并且 每个操作存在两种形式,操作失败抛出异常和操作失败返回一个特殊值(null或false)
  23. Deque为Queue的子接口,为双端队列,支持队列两端插入和移除 检查元素
  24. 链接列表LinkedList是Deque和List两个接口的实现类,有队列和列表两种特性,不是基于线程安全的,有多个线程同时访问一个LinkedList实例,其中至少有一个线程从结构上修改该列表时,必须有外部代码手动保持同步
  25. ArrayDeque称为数组双端队列,是Deque的实现类,没有容量限制可以增加容量,不是基于线程安全的,在没有外部代码同步时 不支持多个线程并发访问 禁止增加null元素
  26. PriorityQueue是基于优先级的 按照自然顺序排列或者定制排序
  27. Map接口和Collection接口并列,同为根接口
  28. Map中两个常用实现类 HashMap(无序映射集合 可以空)和Treemap(Tree 自然排序 不允许空值) Hashtab是线程同步,HashMap为非线程同步
  29. Map集合转换为Collection集合:entrySet();返回一个包含Map中元素的集合,每个元素包括键值 keySet();返回Map中所有键的集合 values();返回Map中所有值的集合 返回Collection
  30. java集合框架中提供两个辅助工具类:Collections和Arrays Collection是集合框架的顶层接口Collections是辅助工具类
  31. Collections工具类提供了一些对Collection集合常用的静态方法,排序,复制,查找等 排序时,集合中的元素必须要实现comparable接口,即是Comparable可比较的(自然比较法)
  32. Arrays工具类提供了针对数组的各种静态方法,如排序、复制、查找等操作
原创粉丝点击