您的位置:首页 > 编程语言 > Java开发

实训笔记之java基础学习

2017-08-08 21:53 786 查看

实训笔记之java基础学习

第一章 java概述

java之父 詹姆斯·高斯林

在c++的基础上产生名为oak的语言,后改名为java

99年风靡世界,当时分为 java SE(标准版,桌面级开发) java EE(企业级开发) java ME(嵌入式,手机程序开发)同年被oracle公司收购

04年 里程碑式的版本5.0java发布

JDK java development kit java语言开发工具包。包括JIM(java virtual machine)java虚拟机(实现跨平台特性 对内存的分配和释放) 和 JRE(java runtime environment)java运行环境

源程序编译成字节码,然后由虚拟机编译成机器码,最后机器码调用硬件执行

在命令提示窗通过java -version来确定JDK是否安装成功以及版本号

安装完JDK需要配置三个变量(均是系统变量) JAVA_HOME(新建变量,变量值为安装JDK的地址) PATH(不需要新建,在PATH变量值最后添加;%JAVA_HOME%\bin 为了指向JDK的bin)通过PATH变量快捷执行文件 CLASSPATH 5.0版本之前需要配置,因为需要用到dt.jar 和tools.jar,5.0以后自动关联不需要配置

集成开发的实质还是通过命令符运行开发

通过在函数前用/**回车编写文档注释 能形成一个帮助文档(在cmd中进入到当前类的路径通过javadoc命令)

第二章 java语言基础

字符集分为ASCII字符集(8位单字节编码,128位 主要为英文字母) GB2312字符集(16位双字节编码,主要为汉子、符号、日文、俄文)Unicode字符集(16位或32位,万国码,每个国家每个字符都能唯一标识。分为UTF-8 UTF-16 UTF-32 只有UTF-8长度可变,也是最常用)

java是强类型语言,必须先声明后使用。标识符不能数字开头

\为转义符号标志

++a为先自增,a++为后自增

break终止当前所有循环。continue终止本次循环之后的代码,循环未结束。return终止当前循环并推出程序块

for each的输出方式能更便捷的输出数组

第三章 面向对象基础

java是一种面向对象语言,分为面向对象设计 面向对象分析 面向对象编程。三个特性:继承(子类继承父类的特性) 封装(封装就是把普通的对象进行封装,对象的属性设为私有) 多态(同一操作或者过程作用在不同对象上会产生不同的结果)

引用传递的方法在执行后会影响到实际对象的改变,引用的是地址,形参和实参指向的地址是同一个。而值传递都发生在栈内存,改变的事拷贝值,实际对象并未改变

方法重载的原则 1.在同一个类中2.对应的形参类型不同,或形参的个数不同 3.方法名相同

关于运算符解读,哪个符号在前,先实行哪个符号

JDK1.5以后可以实现可变参数,只能将参数列表最后一个参数当成可变参数

第四章 核心类

静态方法通过类名.方法直接执行 类方法需要创建对象来执行 通过static修饰的静态的方法或者类属于类本身 是类相关 不属于类的对象

封装类可以把字符串的值转化为基本数据类型 可以直接调用封装类的构造方法Xxx(String s)或者 ParseXxx(String s)的静态方法

基本数据类型转换成字符串类型可以用空字符串连接数值”“+123 或者调用封装类的toString()静态方法 或者调用String类的valueOf()静态方法

装箱是将数值从栈传到堆,拆箱则相反

new会在堆内存新建对象,new几次新建几个,而栈只会有一个。

重写又称方法覆盖,是在子类中定义某方法与其父类有相同的名称和参数的操作。静态方法不能重写,子类方法的可访问性必须和父类方法的可访问性一致或者更加公开,私有方法不能重写

==比较地址 equals比较值 equals()和toString()是能够在类中进行重写的

字符串与其他类型进行“+”连接时,字符串在前则将其他类型以字符串形式打印,字符串在后则按照从左到右进行运算

String字符串的常用方法,str.length()字符串长度,str.substring()截止字符串从第几位到第几位字符,str.toLowerCase()将字符串小写化,str.toUpperCase()将字符串大写化 char charAt(int index)获取字符串指定位置的字符下标, int compareTo(String s)比较两个字符串大小,相等返回,不等返回不等字符编码值的差 boolean endsWith(String s)判断一个字符串是否以指定字符串结尾

StringBuffer可以减小内存开销 以及各种方法 xx.append()添加字符串,xx.insert(0,xxx)在指定位置添加字符串,xx.replace(0,0,xx)两个起止之间替换 删除 xx.delete()。反转 reverse();容量capacity();保留长度setLength(0);

StringBuilder和StringBuffer用法完全一样,方法也相同,唯一区别,前者线程不安全后者线程安全。线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据

Scanner中接受回车信号作为终结 方法为 xx.useDelimiter(“\n”)next();nextInt();方法都只扫描到有效数值空格后停止,重复调用可全部扫描,或者调用nextLine()扫描一行

Math类的常用方法 Math.abs()绝对值,Math.random()随机数随机数为[0,1],Math.max()较大值

第五章 类之间的关系

在继承中,创建子类对象的时候会先执行父类的构造方法。一个类只能继承一个父类,但是可以通过接口来实现其他功能

多态有两种表现方式,一种是由父类创建对象指向子类,但是系统会动态地根据被引用对象的类型来选择执行的方法。即指向哪个子类,执行哪个类的方法。另一种是子类重写父类方法

在子类的构造方法里调用父类的构造方法时,系统会自动隐式的调用父类的无参构造方法。如果父类中没有显式的写出无参构造方法,只有有参的构造方法,那就要在子类的调用中显式的调用有参构造方法。super();

在调用普通方法中可以用super.方法名 调用父类的方法

四种关系的通常表现:依赖关系:在一个类的方法中操作另一个类的对象。 关联关系:一个类中使用一个类的对象作为该类的成员变量。聚合关系:一个类由多个其他类的对象作为该类的成员变量,此时整体与部分之间是可以分离的,整体和部分都可以具有各自的生命周期。组成关系:整体与部分不可分离,整体的生命周期结束以后,部分的生命周期也随之结束。强弱:依赖 < 关联 < 聚合 < 组合

内部类是在类的内部再定义一个类 该类外面的类称为外部类

内部类能够像私有一般将自己隐藏起来,不被同一个包里的其他类访问

内部类可以像继承外类一样访问外部类的所有属性,包括外部类的私有属性

在回调方法中,匿名内部类尤为便捷,特别是时间处理经常用,因为匿名内部类在创建时就会创建该类的一个实例,然后定义会立刻消失,不能重复使用 在监听器中经常使用

局部内部类不能用public或者private声明,局部内部类作用于被限定在该类的方法中,可以对外界完全隐藏,只有该方法可见。局部内部类不仅可以访问外部类的成员还可以访问被final修饰的局部变量

静态内部类只能访问静态的成员变量和方法

单例模式:可以保证系统中一个类只有一个实例。一个类有且仅有一个实例,并且自行实例化向整个系统提供

单例模式为了确保只有一个实例,就不能让其用new创建,可以将构造函数设为private

提供一个静态方法,能够通过类名直接调用,用该方法创建对象。为了确保对象的创建需要判断是否在类中存在对象,为此,需要在全局创建一个静态成员变量,用来判断是否存在实例,要是存在就无需创建

第六章 抽象类与接口

抽象类的abstr
4000
act放在class前,抽象方法的abstract放在方法的返回类型前,抽象方法没有方法体 抽象类不能被实例化(不能使用new关键字直接创建实例,)可在子类创建实例时调用 用抽象类指向他的子类来创建对象

一个抽象类中可以有多个抽象方法,也可以含有普通的方法和成员变量

定义抽象类有三种情况:直接定义一个抽象类;继承一个抽象类,如果子类没有全部实现父类的抽象方法,那么就要在子类声明abstract;实现一个接口,抽象类不能被定义为private

接口是为了使模块之间联系更加简单,降低耦合

Java只支持单继承,可以通过内部类和接口来实现多继承的效果。一个类可以实现多个接口,一个接口也可以继承多个接口但是也只能继承多个接口

Java8开始允许接口中定义默认方法、类方法,接口中的成员变量自动用public static final修饰、方法默认访问权限为public abstract 定义的默认方法要用default修饰 通过接口的实现类的实例对象来调用默认方法 内部类内部接口都默认用public Static

通过实例化接口实现类的对象,并且将其赋值给一个接口变量引用来实现接口,(父类的引用指向子类)也可以通过接口实现类本身实例化的对象实现接口

接口中只能有默认方法 类方法和 抽象方法不含有构造方法

引用类型变量 Instanceof 引用类型 能够判断前者是否为后者的实例

第七章 异常

只有在运行时才需要处理的异常为非检查异常,在编译时需要处理的为检查形异常。(必须要处理的异常)

异常处理机制:捕获异常try…catch try为发现异常 catch为捕获处理异常。Throw将不知道如何处理的异常抛出,让上一级调用者处理异常

异常处理提高了程序可读性 简化结构,保证了代码健壮性,不同情况的异常对应不同的异常类,充分发挥类的可扩展性和可重用性的优势

Catch语句可以通过 | 捕获多个异常

Finally包含的代码块为最终都会被执行

将使用资源的语句放在try的()中,java系统会自动释放资源 运行 .Close()方法可以自定义抛出异常 需要编写一个异常类继承 Exception 或者RuntimeException(异常产生在运行程序时且在编写代码时不知道哪里出错)可以在异常类中编写自己需要的方法和操作,比如编写异常文档 如果只是单纯的抛出异常名称可以使用throw new Exception(“asd”);可以在括号里写明异常情况

Throws抛出一个异常序列,抛出的是异常类型,通过在方法上进行声明 通过方法的调用者处理。可以在方法上用,分隔抛出多个异常类型 定义的方法不知道如何处理异常时使用Throw抛出的是一个异常实例对象,只能抛出一个异常实例,在方法内部处理

第八章 泛型与集合

Object上帝类可以使各种数据类型变得通用,但是在编写时不会出错,不够严谨,泛型可以解决这种问题

泛型不需要强制转换数据类型可以自动转换,能够将数据类型定义为参数,在使用前再指明,提高了代码的重用性

泛型经常使用在类 接口 方法,泛型类是引用类型,在堆内存中

泛型创建实例化时可以只在声明时表明所需要的类型,创建时可以不写

通配符“?”表示一个未知类型,从而解决类型被限制、不能动态根据实例进行确定的缺点,主要用在泛型类中

泛型的上界用extends表示 上界在定义泛型类时指定 下界用super表示 下界只在使用的时候指定

泛型的类型信息将在编译处理时被擦除掉,过程称为类型擦除。所以在对泛型的使用上做了一些限制,大多数都是由类型擦除和转换引起的

泛型的类型参数只能是类类型,不能是简单类型

同一个泛型类有不同版本(不同参数类型)相互不兼容

定义泛型时候,类型参数只是占位符,不能直接实例化

不能实例化泛型数组,除非是无上界的类型通配符即?

泛型类不能继承throwable,即不能为异常类,不能抛出和捕获

java集合类主要由两个接口派生出:Collection和Map

java集合三大类:Set集合添加的元素是无序的不能重复的,List集合添加的元素是有序的能重复的,Map集合每个元素都有key/value键值对组成,key值是唯一的

Collection接口是set queue list的父类接口 使用时可能会造成一系列不支持操作的异常和不兼容情况

迭代器可以采用统一的方式对Collection集合中的元素进行遍历操作,不需要知道内容,可以直接使用foreach循环遍历

java从JDk5.0增加了Iterable接口 为Collection的父接口,因此所有实现了Iterable的集合类都是可以被迭代器迭代的,其中的iterator()方法可以获取每个集合自身的迭代器Iterator用于遍历自身集合

ArrayList和Vectoy是List接口的两个典型实现类,两者都是基于数组实现的列表集合,但该数组是一个动态的长度可变的并允许再分配的Object[]数组 ArrayList是线程不安全的,Vectoy是线程安全的(所以效率低) 二者使用方法一致

foreach(所要遍历集合中的变量类型 变量名:遍历的集合名)

Vectoy的子类Stack能够模拟栈的原则,有先进后出的特性

set接口常用的三个实现类包括HashSet TreeSet 和EnumSet,HashSet最常用 使用Hash算法来存储集合中的元素,具有良好的存取查找性 TreeSet用树的数据结构存储集合元素,可以保证处于排序状态。支持自然排序和定制排序

队列Queue 以先进先出“FIFO”的方式排列各个元素,除了继承Collection的接口方法外,还提供了队列的插入、提取和检查操作,并且 每个操作存在两种形式,操作失败抛出异常和操作失败返回一个特殊值(null或false)

Deque为Queue的子接口,为双端队列,支持队列两端插入和移除 检查元素

链接列表LinkedList是Deque和List两个接口的实现类,有队列和列表两种特性,不是基于线程安全的,有多个线程同时访问一个LinkedList实例,其中至少有一个线程从结构上修改该列表时,必须有外部代码手动保持同步

ArrayDeque称为数组双端队列,是Deque的实现类,没有容量限制可以增加容量,不是基于线程安全的,在没有外部代码同步时 不支持多个线程并发访问 禁止增加null元素

PriorityQueue是基于优先级的 按照自然顺序排列或者定制排序

Map接口和Collection接口并列,同为根接口

Map中两个常用实现类 HashMap(无序映射集合 可以空)和Treemap(Tree 自然排序 不允许空值) Hashtab是线程同步,HashMap为非线程同步

Map集合转换为Collection集合:entrySet();返回一个包含Map中元素的集合,每个元素包括键值 keySet();返回Map中所有键的集合 values();返回Map中所有值的集合 返回Collection

java集合框架中提供两个辅助工具类:Collections和Arrays Collection是集合框架的顶层接口Collections是辅助工具类

Collections工具类提供了一些对Collection集合常用的静态方法,排序,复制,查找等 排序时,集合中的元素必须要实现comparable接口,即是Comparable可比较的(自然比较法)

Arrays工具类提供了针对数组的各种静态方法,如排序、复制、查找等操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: