配色: 字号:
java学习
2020-12-05 | 阅:  转:  |  分享 
  
java学习2020-12-03演讲人目录语法1面向对象201语法语法序列化注解文件jdbc基本数据类型关键字语法P6P5接口P4继承P3反
射P2泛型P1数组字符串语法异常语法序列化01通过反射API可以获取程序在运行时刻的内部结构02使用序列化实现对象的拷贝语法jdb
c查询查询StatementCallableStatement0103通用查询是用于存储过程PreparedStatement
02执行参数化查询语法基本数据类型01整型0502内存中的存储浮点类型0403boolean类型char类型(2个字节)整型040
20301short(2个字节)int(4个字节)long(8个字节)byte(1个字节)浮点类型float(4个字节)doubl
e(8个字节)12大小端存储大端模式数据的高字节保存在内存的低地址中,数据的低字节保存在内存的高地址中小端模式数据的高字节保存
在内存的高地址中,数据的低字节保存在内存的低地址中整型存储正数原码、反码、补码相同,负数反码除符号位外其他位取反,补码是原码取反后
+1符号位:0为正数,1为负数以二进制补码形式存储short存储为例子浮点类型存储整数部分转化为二进制,小数部分转化为二进制,
然后整数部分与小数部分相加,float数值指数位+127,double数值指数位+1023以20.5为例float符号位(1位)
+指数位(8位)+尾数位(23位)double符号位(1位)+指数位(8位)+尾数位(52位)语法关键字staticfinal
static被static修饰的成员变量和成员方法是独立于该类的,在类加载时就会被初始化,它不依赖于某个特定的实例变量,也就是说它
被该类的所有实例共享。所有实例的引用都指向同一个地方,任何一个实例对其的修改都会导致其他实例的变化作用对象成员变量方法代码块sta
tic修饰的静态变量实例变量不依赖任何实例,static局限02030401只能调用static变量只能调用static方法不能
以任何形式引用this,superstatic变量在定义时必须要进行初始化,且初始化时间要早于非静态变量final表示被final
修饰的部分是不能给改变的final不想被改变的原因效率设计使用final的三种情况2015201620172018数据方法类参数目
的:定义常量,能够减轻系统运行时的负担作用地方所有被final标注的方法都是不能被继承、更改的,所以对于final方法使用的第一个
原因就是方法锁定,以防止任何子类来对它的修改如果某个类用final修改,表明该类是最终类,它不希望也不允许其他来继承它。在程序设计
中处于安全或者其他原因,我们不允许该类存在任何变化,也不希望它有子类,这个时候就可以使用final来修饰该类了参数被final修饰
了,则代表了该参数是不可改变的语法字符串01特性0502String常用方法创建string对象的方式0403Intern()方法
判断相等特性string对象是不可变的,string类中每一个修改字符串的方法其实都是返回一个全新的string对象创建strin
g对象的方式Stringstring=newString(ok“”)首先会在堆内存申请一块内存存储字符串ok,ok1指向
其内存块对象。同时还会检查字符串常量池中是否含有ok字符串,若没有则添加ok到字符串常量池中。所以newString()可能会
创建两个对象Stringstring=“ok”?先检查字符串常量池中是否含有ok字符串,如果有则直接指向,没有则在字符串常
量池添加ok字符串并指向它.所以这种方法最多创建一个对象,有可能不创建对象判断相等==equal比较类中的数值是否相等使用equa
ls(),比较类中的数值是否相等使用equals(),比较两个包装类的引用是否指向同一个对象时用==312equal比较两个包装类
的引用是否指向同一个对象时用==Intern()方法?intern()是扩充常量池的一个方法,当一个String实例str调用in
tern()方法时,java会检查常量池中是否有相同的字符串,如果有则返回其引用,如果没有则在常量池中增加一个str字符串并返回它
的引用String常用方法搜索字符串检查序列的单个字符提取子字符串比较字符串创建字符串副本将所有字符全部转换为大写或小写Strin
g常用方法Java语言提供对字符串串联符号(\"+\")以及将其他对象转换为字符串的特殊支持字符串转换是通过toString
方法实现的,该方法由Object类定义,并可被Java中的所有类继承字符串串联是通过StringBuilder(或St
ringBuffer)类及其append方法实现的语法数组定义数组使用与其他容器的区别特点ABCD定义010203数组是一个简
单的复合数据类型,它是一系列有序数据的集合,它当中的每一个数据都具有相同的数据类型数组是一个特殊的对象[代表了数组的维度,一个[表
示一维两个[表示二维可以简单的说数组的类名由若干个''[''和数组元素类型的内部名称组成数组使用声明数组、分配空间、赋值、处理与其他容
器的区别01效率、类型和保存基本类型的能力02数组是一种效率最高的存储和随机访问对象引用序列的方式特点?数组是定长的,一旦初始化声
明后是不可改变长度的可以给其扩容Arrays.copyOf()创建数组副本的同时将数组长度增加就变通的实现了数组的扩容语法泛型“
参数化类型”实例化时的传参泛型接口泛型方法泛型指定边界“参数化类型”123就是将类型由原来的具体的类型参数化,类似于方法中的变量参
数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。在定义时不确定类型,编译时根据具
体的类型确定根据传入的类型,泛华到不同的类型,本质上是同一个类的实例,但是泛化后,代表不同的对象实例化时的传参在使用泛型的时候如果
传入泛型实参,则会根据传入的泛型实参做相应的限制,此时泛型才会起到本应起到的限制作用。如果不传入泛型类型实参的话,在泛型类中使用泛
型的方法或成员变量定义的类型可以为任何的类型。泛型的类型参数只能是类类型,不能是简单类型。不能对确切的泛型类型使用instanc
eof操作。如下面的操作是非法的,编译时会出错泛型接口泛型接口定义//定义一个泛型接口publicinterfaceGene
rator<T>{publicTnext();}泛型接口实现未传入泛型实参未传入泛型实参时,与泛型
类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中传入泛型实参在实现类实现泛型接口时,如已将泛型类型传入实参类型,则所有
使用泛型的地方都要替换成传入的实参类型类型通配符?;当操作类型时,不需要使用类型的具体功能时,只使用Object类中的功能。那
么可以用?通配符来表未知类型。是类型实参,而不是类型形参代表传入的某一个具体的类型,比如说:Integer,String
等泛型方法的声明子主题1、public与返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。2、只有声明
了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。3、<T>表明该方法将使用泛型
类型T,此时才可以在方法中使用泛型类型T。4、与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数
常用于表示泛型泛型方法与泛型类的概念区别是调用泛型方法的时候确定具体的泛型类型泛型类是在实例化泛型类的时候,志明具体的泛型类型语
法反射010203代理类对象(Class)基础代理静态代理通过手动编写代理类,代理关系在编译时就已确定动态代理在运行时动态生成代理
类java自身的动态代理实现cglib动态代理实现JDK动态代理所用到的代理类在程序调用到代理类对象时才由JVM真正创建,JVM
根据传进来的业务实现类对象以及方法名,动态地创建了一个代理类的class文件并被字节码引擎执行,然后通过该代理类对象进行方
法调用代理什么是代理?一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过
滤消息并转发消息,以及进行消息被委托类执行后的后续处理类对象(Class)Class类成功Class类是在java源码中存在的实实
在在的类,与class关键字是不一样的Class类被创建后的对象就是Class对象,注意,Class对象表示的是自己手动编写类的类
型信息JVM再根据这个类型信息相关的Class对象创建我们需要实例对象或者提供静态变量的引用值无论我们手动创建的实例有多少个,其对
应的Class对象在jvm的堆中只有一个Class对象的加载原理加载完成后,根据Class对象找到对应的类,然后进行实例化加载时会
对.class文件进行验证当创建第一个静态成员引用时,加载这个被使用的类字节码.class文件通过类加载器实现类对象(Clas
s)Class.forName方法调用forName方法获取Class对象将会导致类被加载使用字面常量的方式获取Class对象的引
用不会触发类的初始化类对象(Class)按照不同构造函数构造的实例对应该类的Class对象是否只有一个??是的基础0102获取Cl
ass对象class实例化030405获取构造器-Constructor对象获取方法-返回的是一个方法数组获取成员变量基础获取Cl
ass对象使用Class类的forName静态方法:调用某个对象的getClass()方法直接获取某一个对象的class基础cla
ss实例化成功使用Class对象的newInstance()方法来创建Class对象对应类的实例先通过Class对象获取指定的Co
nstructor对象,再调用Constructor对象的newInstance()方法来创建实例。这种方法可以用指定的构造器构造
类的实例基础获取构造器-Constructor对象子主题基础获取方法-返回的是一个方法数组成功getDeclaredMethods
()方法返回类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。getMethods()方法返回
某个类的所有公用(public)方法,包括其继承类的公用方法。getMethod方法返回一个特定的方法,其中第一个参数为方法名称,
后面的参数为方法的参数对应Class的对象基础获取成员变量getFiled:访问公有的成员变量getDeclaredField:
所有已声明的成员变量。但不能得到其父类的成员变量语法继承030102子类定义父类060405多态抽象类object(所有类的超类)
语法继承泛型数组列表对象包装器与自动装箱参数数量可变的方法定义继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,
并能扩展新的能力。父类Java中不需要将方法声明为虚拟方法子类默认公有继承子类构造器不支持多继承123super调用父类的方法
多态多态是同一个行为具有多个不同表现形式或形态的能力静态绑定(编译时)重载它是根据参数列表的不同来区分不同的函数,通过编辑之后会变
成两个不同的函数动态绑定(运行)12继承重写重写3向上转型在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用
父类的方法和子类的方法。抽象类0102定义特征抽象类定义使用了关键词abstract声明的类叫作“抽象类”。如果一个类里包含了
一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。抽象
类特征抽象类体现了数据抽象的思想,是实现多态的一种机制不能被实例化,只能有引用,实例化应该由子类实现它定义了一组抽象的方法,至于这
组抽象方法的具体表现形式有派生类来实现只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法抽象类中可以
包含具体的方法,当然也可以不包含抽象方法子类中的抽象方法不能与父类的抽象方法同名抽象类特征抽象方法必须由子类来进行重写abstra
ct不能与final并列修饰同一个类abstract不能与private、static、final或native并列修饰同一个方
法extends进行继承方法StringtoString()当打印引用,如调用System.out.println()时,会自
动调用对象的toString()方法,打印出引用所指的对象的toString()方法的返回值,booleanequals(Obj
ectobj)定义特征inthashCode()定义约定语法接口定义特点对象克隆定义接口(Interface)是一系列方法的声
明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现特点010203040506Java接口中的成员变量默认都是publ
ic,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用\"_\"分隔)Ja
va接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化Java接口中只能包含publi
c,static,final类型的成员变量和public,abstract类型的成员方法接口中没有构造方法,不能被实例化一个接口不
能实现(implements)另一个接口,但它可以继承多个其它的接口Java接口必须通过类来实现它的抽象方法特点当类实现了某个Ja
va接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类不允许创建接口的实例(实例化),但允许定义接口类型的引用变量
,该引用变量引用实现了这个接口的类的实例一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承.语法异常定义分类捕获
异常throws与throw关键字定义异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域的情况,
称之为异常。Throwable类Error类虚拟机异常线程死锁Exception类RuntimeException异常(非检查
异常)检查异常throws与throw关键字throws出现在方法函数头,声明将要抛出何种类型的异常(声明)。;而throw出现在
函数体throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对
象。两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异
常由函数的上层调用处理02面向对象面向对象面向对象设计原则对象相关的职责创建对象的方式Java反射机制抽象访问修饰符面向对象010
302多态内部类类的唯一标识面向对象面向对象设计原则010203单一职责原则开闭原则里氏代换原则040506依赖倒转原则接口隔离原
则合成复用原则面向对象面向对象设计原则迪米特法则单一职责原则含义一个类只负责一个功能领域的职责,引起类变化的原因只有一个作用用
于控制类的粒度大小开闭原则含义软件实体尽量在不修改源代码的情况下,实现扩展软件实体可以是一个软件模块、由几个类组成的局部模块、一
个独立的类抽象化是关键,利用编程语言提供的抽象层接口,定义抽象业务作用使软件具有良好的扩展性里氏代换原则含义作用程序员:使用基类定义对象,JVM:在运行时确定子类对象,并对其进行替换所有引用基类(父类)的地方,必须透明的可以使用其子类对象注意事项子类必须实现父类中声明的所有方法尽量把父类设计成抽象类或者接口依赖倒转原则含义抽象不应该依赖于细节,细节应当依赖于抽象,也就是应当依赖接口编程,而不是针对实现依赖倒转原则注意事项01传递参数时或者关联关系时,尽量引用层次高的抽象层02使用接口或抽象类进行变量的声明、参数类型的声明、方法返回类型的声明03以及数据类型的转换,不要用具体的类做这些04一个具体的类应当只实现接口或抽象类中声明的方法05具体类的对象通过依赖注入的方式注入到其他对象中依赖倒转原则依赖注入当一个对象要与另一个对象发生关系时,通过抽象来注入到其他对象依赖注入方式构造注入设值注入AB通过构造函数来传入具体类的对象接口注入C依赖倒转原则作用感谢聆听
献花(0)
+1
(本文系职场细细品原创)