java学习笔记

.补码,反码,原码
比如byte类型:8位带符号的数   -128-127    127:01111111    127+1=01111111+00000001=10000000(溢出)  -128:10000000(补码)
带符号的数在计算机的表示方式都是以补码进行表示,正数的补码还是原码,负数的补码是反码+1
之所以出现补码,是因为计算机无法判断带符号的数,在带符号的数进行减法运算时会出现两个0的情况

.java虚拟机类加载机制分为五个阶段:加载,验证,
jvm有三种类加载器:
jvm的结构:方法区

.java提供中提供的异常主要分为三种:
1.系统错误,用error类表示,描述的是系统内部错误,这种错误是由jvm抛出的,一旦发生程序员不能捕获也处理不了
2.异常,用exception类表示,这种是由程序或者外部环境导致,程序员可以捕获这种异常并处理。如:Filenotfoundexception,sqlexception,IOexception
3.运行时异常,用runtimeexception类表示,描述的是程序设计错误 如:数组下标越界
error和runtimeexception类下的异常称为免检异常    exception类下的异常称为必检异常
使用throws声明异常,使用throw抛出异常
.如果方法没有在父类中声明异常,那么就不能在子类中对其进行继承来声明异常

.线程和进程:那我举个例子吧,比如说平时我们都会使用笔记本,一边打开浏览器浏览网页,一边打开QQ音乐,一边打开Word写文档这些对于操作系统来说,都是多个任务,还有一些任务是在后台运行的,我们看不见,这些每个任务都是一个进程,而我们在Word中也可以在打字时,进行拼音检查,这对于Word来说是多个子任务,这些子任务称作线程。线程和进程都是受CPU调度的。所以根据例子可以看出线程是cpu调度的最小的执行单元,而进程至少由一个线程组成的独立运行的程序。

多线程

.接口和抽象类
1.由abstract修饰的方法,而方法没有方法体以分号结束,这种方法称为抽象方法,含有抽象方法的类必须定义为抽象类,也就是用abstract修饰
的类。在抽象类中可以不含有抽象方法。不能使用new操作符为抽象类创建实例。
2.接口是一种与类相似的结构,使用interface来定义接口,它内部只包含常量和抽象方向,不能含有构造方法,
所以也不能用new操作符为其创造实例。接口可以实现多继承多个接口之间使用逗号分隔。一个类可以实现多个接口,但是只能继承一个父类。

.对象转换  总是可以将一个子类的实例转换为父类的变量,这称为向上转换
向上转换之后如果父类要使用子类方法,需要显示转换,在转换对象的时候防止报错classcastexception异常,可以使用instanceof判断对象是否属于当前类的实例,然后再转换。

.继承和多态
父类的构造方法不会被子类继承,可以在使用super关键字在子类构造方法第一行显示调动父类构造方法,其实不在子类构造方法中使用
super调用父类构造方法,子类在创建对象时,也会先调用父类无参构造方法

.什么是多态,什么是动态绑定
1.多态是同一行为的不同表现形式。在java中实现多态的前提有三点:1.需要有继承;2.需要重写父类方法;3.父类引用指向子类对象。比如说一个方法的参数是父类,可以向该方法的参数传递任何子类的对象。
2.动态绑定:父类引用指向子类对象之后,子类中重写了父类的tostring方法,我们使用父类变量调用tostring方法,此时调用父类
方法还是子类方法,由父类引用的实际类型决定。这里我们会调用子类对象中实现的tostring方法。

.所有传递给方法的参数都是值传递。对于基本类型的参数,传递的是实际值;而若参数是引用数据类型,传递是对象的地址。

.可以使用final来修饰类,被final修饰的类不能继承

.修饰符:public,private,protect,default
子类可以重写父类中protect修饰的方法,并将修饰符改为加强访问性

.自动装箱,自动拆箱
java为八种基本数据类型提供了对应的封装类,将基本数据类型转化为封装类称为装箱,将封装类型转为基本数据类型这是拆箱,java为基本数据类型和对应封装类之间提供自动转换机制,基本数据类型运用在对象环境下会将基本类型自动转换为对应封装类,这是自动装箱;将封装类对象用在基本数据类型下会自动转为基本数据类型这是自动拆箱。
.String  StringBuffer  StringBuilder
string 字符串类型,是final修饰的类,由它创建的字符串内容是不可变的。
replace方法替换字符串中的字符a.replace("a","b")     split分隔   ("adb&ss&dd").split("&")返回字符串数组,数组存了分隔后的子串
StringBuffer和StringBuilder创建的字符串对象都是可变的 使用append方法添加字符串
stringbuffer修改缓冲区的方法是同步的,所以在多线程并发访问时使用stingbuffer,而在单线程的环境下使用stringbuilder更有效。

string类为不可变的
要创建不可变的类满足三点:
1.所有数据域都是私有的
2.没有修改器方法
3.没有一个返回指向可变数据域的引用的访问器方法。


java 主要支持两种类型的容器:
一种为了存储一个元素的集合,简称集合
一种为了存储键值对,简称图

java 集合框架主要支持三种集合:set(规则集)   list(线性表)   queue(队列)
set集合主要用于存储不重复的元素。
list集合可以存储重复的元素,并且有序的,可以通过下标来访问元素,增加了一个能够双向遍历线性表的新列表迭代器listiterator
queue集合可以按照先进先出的方式处理元素。

set集合主要有三个实现类,hashset(散列集),linkedhashset(链式散列集),treeset(树形集)
hashset是无序的,默认存入空间为16实际内部创建了一个hashmap对象来存储,因为hashmap默认是16(1<<4),load factor默认加载因子为0.75(也就是当集合中存储元素超过默认容量*客座率集合容量翻倍),
linkedhashset可以按照元素插入集合的顺序进行存储  
treeset可以对存入的元素进行排序

list集合具体实现的两个类:ArrayList 数组线性表类    linkedlist  链表类
ArrayList是用数组存数据,这个数组是动态创建的   如果只是希望通过下标访问集合,除了在末尾,不在其它位置插入或删除元素,可以
选择ArrayList效率高  使用trimtosize()方法来讲容量缩小到这个列表的当前的大小+  
linkedlist是用链表存储数据,如果是在任意位置插入或删除元素,选择linkedlist效率高

向量类vector和ArrayList是一样的,只是vector提供的方法是同步的,所以在多线程中要使用vector可防止多个线程同时访问数据时造成
数据不一致。但是在不需要同步的应用程序来说应该使用ArrayList比使用vector效率高。vector初始容量为10,内部创建长度为10的数组

栈类stack是vector的子类,对vector类进行了扩展  pop方法  push方法  peer方法   search方法检测是否含有某元素,并返回元素位置

队列queue
offer方法向队列中添加元素   poll方法获取并删除队列头,remove也是删除,这两个在队列为空时返回值不同,poll返回空,remove抛出异常
peek方法获取队列头但是不删除,element也是,为空时peek返回空,element抛出异常
可以使用linkedlist创建队列,因为linkedlist实现了deque接口,deque接口有扩展了queue接口

priorityqueue优先队列  优先队列中元素具有优先级  初始容量为11,也就是创建一个长度为11的数组

线性表和数组的区别:线性表的大小是动态增大或减小,但是数组大小一旦创建就是固定的,所以如果不需要在集合任意位置插入和删除,
应该选择效率高的数组实现

图Map  以key value键值对的形式存储元素  key是任意对象,但不可重复
图的类型分为三种:hashmap散列图   linkedhashmap链式散列图  treemap树形图
hashmap存储的条目是没有顺序的
linkedhashmap扩展了hashmap,他可以按照插入顺序,访问顺序进行排序,使用无参构造方法是按照插入顺序创建的对象 使用
    linkedhashmap(初始容量,loadfactor,true)
treemap在遍历排好序的键值时是很高效 可以对存储的元素进行排序
hashtable的用法与hashmap相同只是,hashtable的方法是同步的可以在多线程中使用
如果更新时需要保持图中元素的顺序,使用hashmap
如果需要保持图中元素的插入顺序或访问顺序,使用linkedhashmap
如果需要使用按照键值排序,就使用treemap

.泛型   泛型是指将数据类型参数化,随后编译器会使用具体的类型来替换这个参数,在Java中可以定义泛型类,泛型接口,泛型方法;定义泛型类和泛型接口时,在类名和接口名后面
使用<T>表示定义了一个泛型,定义泛型方法时,将泛型类型放在方法返回类型之前。
.通配泛型   使用泛型类的时候,泛型参数不指定具体类,而是使用?表示,这是通配泛型。使用场景,比如在一个A方法中参数使用了泛型类,
并指定了具体类型B,而我们在创建这个泛型类对象的时候,指定的是另外一个类型C,这样调用这个方法将会发生编译错误,因为类型C不是类型B
也不是类型B的子类。
.泛型信息在运行时时不可用的  比如:ArrayList<String>并没有在JVM中存储为单独一个类,所以,在运行时使用它是错误的
.使用类型消除的方法来实现泛型,编译器使用泛型类型信息来编译代码,但是随后消除它。因此泛型信息在运行时时不可用的。
不能使用泛型类型创建数组

.java的网络编程
java提供了socket编程
在服务端使用serversocket类来创建一个连接,并为这个连接指定端口号,然后调用这个对象的accept方法监听客户端的连接
在客户端使用socket类开启一个连接,并为连接指定IP和端口号,这个端口号就是服务器端定义的端口号,ip也是服务器端所在的位置。


.webservice技术   
B系统向A系统插入或者获取数据都是A系统提供接口,A系统需要发布一个web服务,然后A系统将发布的地址给B系统,B系统就可以通过
这个地址访问Web服务。
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
soap:简单对象访问协议
开发web服务分为两种:
                    契约优先:从wsdl契约入手,生成java类来实现服务
                    代码优先:从java类入手,使用注解来生成wsdl文件和java接口
如何发布web服务(如何将自己写的接口暴露在网络中)    
    1.使用jdk自身提供的jax-ws进行发布自己的web服务,使用的jax-ws ri2.3版本报错,其中的类使用java8编译器编译,Tomcat解析不了
      改为低版本的就好用了
        创建需要发布服务的类,并在类上添加@webservice,这样会将类中所有非静态方法进行发布,
        使用@WebMethod(exclude=true)//把该方法排除在外
        最后使用EndPoint类的.publish()方法发布服务。方法需要两个参数,1.发布的URL 2.服务的实现对象
    2.使用cxf框架发布web服务
如何访问别人写的web服务(访问别人提供的接口)
    1.直接在java程序中使用get方法
    2.使用httpclient工具类
    3.使用wsimport生成本地代理,通过wsimport语句可以将wsdl中内容生成本地java文件和class文件,然后复制到项目中就可以以对象的形式访问web服务。

回答项目中如何使用webservice:
1.病理信息系系统中使用jaxws ri实现web服务的发布,我们提供一个存储电子申请单信息的接口,让his系统在发送申请的时候调用这个接口将
患者的申请信息存入本系统,然后患者拿着纸质申请单来病理科登记时,通过扫码枪扫纸质申请单上的条码查询系统中之前his系统插入的电
子申请单进行登记。
2.医保特殊药品审核系统中使用的是wsimort命令直接在本地生成代理文件,可以直接通过对象的方式操作对方发布的web服务
webservice常用命令
wsimport   -d指定生成的目录   -keep指定是否生成java源文件   -verbose显示生成详细过程   网络中的wsdl文件      包默认把命名空间倒过来


.数据结构
1.链表
2.二叉树的定义   
二叉树遍历:
先序遍历  1.先访问根结点,左子树,右子树
中序遍历  2.左子树,访问根结点,右子树
后序遍历  3.左子树,右子树,访问根结点
层序遍历

算法---排序
冒泡排序
归并排序


.spring框架


.Struts2框架


.hibernate框架

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值