JavaSE小结

xiaoxiao2021-02-28  9

1.JavaSE语言简介 Java是什么?一门面向对象可跨平台编程语言,一种编译环境,一种部署环境。 环境的搭建: 安装JDK 配置环境变量: windows需要在环境变量中添加classpath,定义编译目录,添加path,用来指定可执行程序的路径 JAVA_HOME:JDK的根路径 classpath:jdk的tools、当前目录 path:jdk的bin目录 :linux:可以配置个人用户的环境,也可以配置全局,全局配置文件就是:/etc/profile文件中添加classpath、path 进行测试:javac编译,将源程序编译成中间字节码文件class文件,java执行,需要类加载器进行加载,由字节码检验器进行校验,由解释器进行解释和执行,所以使用jit(just in time)技术,java程序的执行效率大大提升 2.JAVA语言基础 java的注释: 单行,多行和文档 java的变量和常量: 什么是局部变量?就是一块内存空间,里面可以存放实际的数据,什么空间?(栈内存,堆内存)有多大?(数据类型) 变量的命名规范?可以由大小写字母,数字,下划线和美元符号组成,不能以数字开头,不能太有空格,不能使用java中的保留关键字,建议采用驼峰法,类名建议使用大驼峰,变量,方法建议使用小驼峰。 java中的基本数据类型: byte,short,int、long,float,double,char,boolean 数据类型的转换: 自动的显示转换:由小范围向大范围,由低精度向高精度 强制的隐式转换:由大范围向小范围,由高精度向低精度,很有可能会损失精度,导致误差 常量:就是一个固定不变的内存空间,数据一旦定义就不能改变 3.Java中的运算符和表达式 运算符:算数运算符,关系运算符,逻辑运算符,赋值运算符,三目运算符,自增自减运算符 4.JAVA的流程控制 3.1 顺序结构:从程序的开头(共有的静态方法main)执行到程序的末尾(最后一行代码,程序被异常中断,异常在不处理的情况下会抛给虚拟机,就会中断) 3.2 选择结构:if语句和switch分支语句,switch在进行分支语句匹配时需要指定匹配的变量,可有是哪几种数据类型?(byte,int,short,char,(jdk1.7)String,枚举) 3.3 循环结构:while,do…while,for(知道循环结束的条件使用while、知道循环的次数用for),循环的嵌套,循环的中断(continue表示结束本次循环,break结束当前的整个循环结构),如何一次性跳出多重循环,在循环的外边设置标记,直接跳出到该标记即可 5.数组的使用 数组的概念:数组实际上就是一组连续的内存空间,可以存放一组(同种类型)数据,提供一个索引方便对数组进行赋值和取值操作 定义语法:数据类型[] 数组名 = new 数据类型[长度];数据类型[] 数组名 = {数据…};数据类型[] 数组名 = new 数据类型[]{数据…}; 两种初始化方式:动态初始化,静态初始化 数组元素的访问,可以使用从0开始的索引,索引的最大值,使用数组的长度(lenth)-1 数组的引用传递:因为数组实际上是一种引用数据类型,进行复制操作时,实际上是进行引用传递,就是传递在栈内存中保存的堆内存的引用(地址),也有人说java实际上也是值传递而不是引用传递? 多维数组:实际上就是将基本的数组结构进行叠加 多维数组的声明和初始化:数据类型[][] 二位数组名 = new 数据类型[长度][长度];数据类型[][] 数组名 = {{1,2,3},{4,5}}; 6.方法 方法的意义?实际上就是实现某种特定功能的代码片段,进行抽象,定义一个名称,可以通过名称来调用(访问)这个一个特定功能的代码片段,提高代码的可读性和复用性 方法定义语法:访问修饰符 返回值类型 方法名称(参数列表){方法体;[return 返回值;]} 在这里定义的方法必须使用static开头,因为主方法为静态方法,静态方法只能访问静态资源 访问修饰符通常有四个:public(公开的,任意地方都可以使用),protected(受保护的,在同一个包下,不同包的子类中访问),default(同一个包下),private(只能在本类中) 返回值类型:void表示空返回值类型,不是说明方法没有返回值,而是指定该方法的返回值没有一个明确的类型 方法名称:遵循java标识符的命名规范 参数列表:实参和形参的问题 方法的重载:实际上就是一个方法名称进行不同的业务处理,根据参数的类型或者参数的个数,与返回值类型无关,方法多态性的体现 可变参数:定义的方法参数的个数不明确,一定程度上简化对同种类型的方法的重写操作,在接收传递的参数时使用数组来进行接收,那么久可以使用数组的访问方式进行处理 返回值:如果方法存在运算的结果需要返回值,可以使用return将处理结果返回给方法的调用处,在方法的调用处需要定义一个相同类型的变量进行接收 方法的递归调用:实际上就是方法本身不断调用自身的过程,把握递归的出口 7.面向对象的程序设计思想 7.1 什么是面向对象 将解决问题的思路由考虑问题实现的每一个细节变为考虑具备某种特东功能和行为的对象,将我们从细节的实现者变为指挥者和决策者 面向对象是基于面向过程的,同时也是面向过程发展到一定阶段的一个必然过程 7.2 类和对象 类就是一类事物的一个抽象的概念,从事物的特征和行为,类的两个方面叫属性(描述特征)和方法(描述行为和功能) 对象是从属于某一个类的一个具体的存在的一个个体,具备这一类事物锁描述的特征,具备这一类事物具备的行为和功能 类是一个抽象,不能直接使用,需要实例化类的对象,关心对象的创建过程,使用构造方法来描述 一个类可以有多个对象,每一个对象都有自己所特定拥有的属性的具体值,但是一个类的所有对象共同拥有这个类的方法 静态代码块和构造代码块: 使用static关键字申明的一个代码片段,实际上实在该类加载器之后就会进行调用的代码,进行一些程序执行前的公共的初始化操作(驱动加载,环境准备,基础工具类的加载等) 构造代码块使用{}直接声明在类中的代码片段,会在创建对象并且在构造方法执行前进行调用,可以初始化实例化对象前的初始化(创建对象时关联对象的创建,属性的初始化,数据的校验等等 7.3 类的定义和对象的实例化 使用class定义一个类,如果这个类使用public class进行声明,要求类名必须与文件名一致,建议在一个文件中只定义一个类(内部类和匿名内部类) 实例化对象使用new关键字,表示开辟堆内存空间,存在一定的局限性,可以使用反射(重点)进行对象的实例化,类名()实际上就是类中的构造方法,默认系统在编译时会自动 添加一个无参的什么都不做的构造方法,如果手动定义了构造方法,系统将不会添加无参构造,要求在定义类,类中一定要存在无参构造 使用对象访问类中定义的属性,调用方法 7.4 面向对象的三大基本特征:封装,继承,多态 7.4.1 封装,为了保护类中的一些资源(属性,方法),使用private修饰,只能在那本类中访问,需要提供共有的setter和getter方法来进行操作,将一些特定的操作进行内部细节的保护和隐藏,面向接口的编程,就是基于封装的原理 7.4.2 继承,获取父类中定义的非私有化的属性和方法,如果父类中定义了私有的属性或者方法,能不能被子类锁所继承?但是有一个依据,在jdk的官网,可以简化操作,提高代码的可读性和复用性,还可以对父类进行特征和功能的扩展,如果发现父类中继承的方法不能满足子类的需要,可以进行方法的重写(覆写,在子类中定义与父类中的方法名称,返回值类型,参数列表完全一致的方法,而且不能拥有比父类的方法更加严格的访问权限),如果使用子类对象调用方法时将调用被子类锁覆写之后的方法,也可以直接定义新的属性和方法 7.4.3 多态,也就是实例化出的对象的数据类型的转变,必须在遵循继承的基础上进行类型的转换,向上转型,将子类对象转型成父类对象的过程,自动完成,如果是向下转型将父类对象转型成子类对象,必须要强制完成,而且在发生对象的向下转型之前必须首先发生对象的向上转型,使用instanceof关键字进行转型前的判断,如果将子类对象向上抓转型成父类对象之后调用的方法,实际上是被子类覆写以后的方法,而且不能直接调用子类单独定义的方法,真正的应用是在进行一些功能的封装时,可以提高方法的数据类型的通用性 7.5 工厂模式:工厂主要负责对象的实例化操作,我们目前采用new关键字在静态的工厂中来实例化对象,但是new存在天然弊端,如果添加一些新的类需要工厂进行生产,必须要修改源码,所以该工厂尾简单工厂,如果真的实现一个完善的工厂需要结合反射机制。 7.6 抽象类和接口的使用 7.6.1 抽象类实际上就是包含抽象方法的类,抽象方法指的是一个方法之定义了方法名称,但是没有一个具体的实现,一般是用来标识某种特定的功能的模板,抽象类不能直接使用,要使用的话必须定义子类,子类如果不是抽象类必须要重写抽象类中的全部抽象方法,抽象类一般用于模板模式(也就是使用抽象类定义一些具备一些列特定功能的模板,就可以生产具备这些特定功能的对象)或者适配器模式(是解决接口中多个方法是否需要全部定义的一种处理方式) 7.6.2 接口实际上就是全局常量和公共的抽象方法,接口中的抽象方法也不需要实现,接口也不能直接使用,需要定义接口的实现类,必须要重写接口中全部的抽象方法,可以获取接口实现类的对象通过对象的向上转型转型成接口的对象,接口通常用来定义标准 7.6.3 抽象类和接口的对比? 1)抽象类和接口都包含抽象方法,都不能自己直接使用,必须定义子类或者实现类,通过对象的转型才能获取抽象类和接口的对象 2)抽象类使用的是继承关系,但是继承在java中存在单继承的局限性,所以继承关系能不用就不用 3)接口使用的是实现关系,可以克服java单继承的局限性,同时接口可以继承接口,并且多继承,这也是java中唯一的多继承 4)在实际的使用中,通常都是使用接口,而少用抽象类 7.7 内部类和匿名内部类 7.7.1 内部类就是在一个类的内部定义的另一个类,好处是可以直接访问外部类中的私有的属性和方法,但是这种使用会破坏程序的结构和一些规范性,导致代码的可读性差,因此几乎不用。 7.7.2 匿名内部类,也就是在一个类的内部声明的没有具体名称的一个内部类,只能默认实例化一次对象,如果定义的是抽象类或者接口的匿名内部类,通常需要在匿名内部类中覆写该抽象类或者接口的抽象方法。 8.常用类 常用类无非也就是系统提供的一些封装好的类库 String(两中实例化方式,两种比较方式,中的内容都是字符串,是常量,String的内容一旦声明,不要反复修改,会出现很多垃圾对象,存在于常量池,垃圾回收器无法准确及时进行资源的回收,导致系统的性能几句下降) StringBuffer,提供一个变更字符串的解决方案,操作与String类似,方法存在差异 Math,数学运算 Date,日期操作 Calendar,日期操作 System,系统操作类 Runtime,运行时操作类 包装类:八种基本数据类型(Integer,Character),自动装箱和自动拆箱(jdk1.5) 9.异常处理 9.1 什么是异常:中断了正常指令流的事件,如果不处理将导致程序的意外停止 9.2 如何使用异常:try{异常捕获}catch(Exception e){异常处理}finally{异常的统一出口} 9.3 异常匹配,存在优先匹配原则,要求将小范围的异常匹配catch卸载上面 9.4 throw和throws关键字的用法,throw表示抛出异常类的对象,throws表示将异常类的对象向上抛,不能直接跑给虚拟机 9.5 异常的分类和结构 1)checked型异常,在程序编译时会进行异常处理校验,如果不处理,程序无法通过编译 2)unchecked型异常,在程序编译时不去校验异常,只在程序执行时,发生异常的情况下才抛出异常,是RuntimeException以及其子类 3)java异常的结构Throwable,存在两个子类(Exception,Error),区分Exception和Error 9.6 自定义异常:定义系统提供的Exception的子类即可

转载请注明原文地址: https://www.6miu.com/read-1145115.html

最新回复(0)