java里面的这种写法是啥意思?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java里面的这种写法是啥意思?相关的知识,希望对你有一定的参考价值。
public class DaoConfig
private static final String resource = "com/ibatis/jpetstore/persistence/dao.xml";
private static final DaoManager daoManager;
对成员用final进行修饰,是说不能再进行继承了吗?那直接用private进行修饰不就行了?
一 final数据
这里又可分为两种:
1.在修饰基本类型时,表示它是一个常量,在定义时必须给予赋值.特别的一个既是static又是final 的字段只占据一段不能改变的存储空间。
2.在修饰对象或者数组时,它表示对对象或数组的引用恒定不变,然而对象本身却是可以修改的.
空白final:声明为final但末给定初值的字段,但必须确保空白final在使用前被初始化,一般在构造方法完成。
final参数:在方法的参数列表以声明的方式将参数指明为final,这意味着在方法里无法修改参数的引用所指向的对象。
二 final方法
使用final使用的原因有两个:
一. 把方法锁定,使得在子类(导出类)中不能修改它的含义。
二.效率,一个final方法被调用时会转为内嵌调用,不会使用常规的压栈方式,使得运行效率较高,尤其是在方法体较简单的情况下,但也并不绝对。(与C++中的inline关键字类似)
特别的:类中的所有private方法都隐式地指定为是final,所以在继承关系中不存在覆盖问题。
三 final类
声明为final的类不能派生出了子类,也就是不能被继承,一个final类中的所有方法都隐式地指定为final. 参考技术A 对与java中的final变量,java编译器是进行了优化的。每个使用了final类型变量的地方都不会通过连接而进行访问。
final关键字是最终的、最后的意思,在程序中可以用来修饰类、成员变量和方法的声明,由该关键字修饰的内容都是不可变的,
final修饰的数据是常量,常量既可以出现在类的内部,也可以出现在方法或构造方法的内部。在程序中常量只能赋值一次。也就是说不能再次给他赋值了。 参考技术B private 一般特指类内使用。
final 一般指不可被更改的。相当于C中的常的意思(constant)
具体,你可以写个小程序,尝试定义两个成员变量,分别用final和private修饰,再更改两个变量值,试着运行并输出,你就可以发现它们的不同了。 参考技术C private进行修饰是可以被改变的,private修饰可以被同个类内的方法所访问,是可以被修改的,只是类外的方法才是不能直接访问private修饰的内容
final是表示不能再被更改,基本类型是值不能被更改,类是引用不能被更改 参考技术D 被final修饰的变量无法被修改,必须在声明的时候或构造函数里赋值。
这种写法在连接数据库的类中非常常见,有利于提高编译及运行效率。
而且被定义成静态(static)之后,可以从类的外部随时调用,而不需要实例化该类。
更深的原理,你可以百度一下final相关文章,会从底层角度给你解释
JAVA里面方法回调是啥意思
所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。例如Win32下的窗口过程函数就是一个典型的回调函数。一般说来,C不会自己调用B,C提供B的目的就是让S来调用它,而且是C不得不提供。由于S并不知道C提供的B姓甚名谁,所以S会约定B的接口规范(函数原型),然后由C提前通过S的一个函数R告诉S自己将要使用B函数,这个过程称为回调函数的注册,R称为注册函数。Web Service以及Java的RMI都用到回调机制,可以访问远程服务器程序。下面举个通俗的例子:
某天,我打电话向你请教问题,当然是个难题,^_^,你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出办法后打手机通知我,这样,我就挂掉电话办其它事情去了。过了XX分钟,我的手机响了,你兴高采烈的说问题已经搞定,应该如此这般处理。故事到此结束。这个例子说明了“异步+回调”的编程模式。其中,你后来打手机告诉我结果便是一个“回调”过程;我的手机号码必须在以前告诉你,这便是注册回调函数;我的手机号码应该有效并且手机能够接收到你的呼叫,这是回调函数必须符合接口规范。
通过上面个人感觉到回调更多的应用就是结合异步。比如:Ajax中js通过组件和服务器的异步通信。 参考技术A
回调只是个概念,就是把你的接口对应的实现类的一个实例当成一个参数传递给一个函数调用,那个函数处理过程中会调用你的这个接口中的方法。
在下面这个方法中,formatter 是一个回调,因为 receiveMessage 本来是被你调用的,但它回过头来调用你提供的 MsgFormatter 方法,这就是概念。
Msg receiveMessage(SocketChannel channel, MsgFormatter formatter)
// 读取网络数据,并请求 formatter 来识别它是什么格式,如果是某种消息格式的一个完整的报文条目(比如一个完整的QQ消息)就返回它,否则返回 null 并缓存部分不完整的内容并在下一次得到一条完整消息时再返回它。
buffer = getBytes(channel);
// 读取到部分字节后询问 formatter 来猜测一下它的格式,这是否一条完整消息以及消息类型。
boolean fullyReceived = formatter.guessFormat(buffer);
if (fullyReceived)
Msg msg = formatter.decode(buffer);
// 消息已经处理了,清空缓存的部分内容,下次重新接收。
buffer = ... ;
return msg;
else
return null;
参考技术B
注明:此答案为转载,出处:百度知道
====================================
比如你写了两个类A和B,并且各生成一个对应的实例a 和b ,在a 中有一个方法fa( 此方法只负责生成两个随机数)要调用b中的一个方法fb(此方法对两个数进行求各) 来进行求和,fb求得结果后要调用a的另一个方法ffa(此方法用于显示求得的结果),这时ffa就叫作回调函数,(反回来调用一下的意思)
为什么要这么麻烦呢,如果fb直接返回结果不好吗,试想如果fb执行时间较长,那么fa就会一直等结果而导致fa不往下执行了,此时如果用回调这个功能实现,由于 回调函数一般是由系统异步调用的,方法fa调用fb后就不用等而直接往下执行,比如可以再生成两随机数给fb,fb会依次得到结果后通过回调机制来调用ffa显示出来,其实就是为实现生成随机数和计算随机数的异步执行。好象fa和fb是两个独立执行的线程,提高程序效率。
异步调用是回调函数的一种典型应用
正是因为回调函数大多数情况下(98%的比例)最常用于异步的多线程程序中,所以大家经常认为只要用到回调函数了则程序就是异步的.这个理解不对
fa ,fb方法分别运行于两个线程中才能实现异步工作,因为回调函数只是实现异步调用的手段, 线程间通信(比如要进行线程间同步)时程序员常通过在一个线程中引发事件来通知另一线程响应,而引发事件其实就是一种调用回调函数的过程.由此可以理解VB的事件编程模式下我们写的那些按钮点击事件中的代码其实就是回调函数的实现代码
参考技术C 有一天小王遇到一个很难的问题,问题是“1 + 1 =?”,就打电话问小李,小李一下子也不知道,就跟小王说,等我办完手上的事情,就去想想答案,小王也不会傻傻的拿着电话去等小李的答案吧,于是小王就对小李说,我还要去逛街,你知道了答案就打我电话告诉我,于是挂了电话,自己办自己的事情,过了一个小时,小李打了小王的电话,告诉他答案是2 参考技术D '
以上是关于java里面的这种写法是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章