java编程遇到的几个代码问题

1、List<PolicyBasicBo> listPolicyBasic = new ArrayList<>();

List list = new ArrayList();
这是个典型的向下转型,即多态性的表现.
因为list是一个接口,接口的方法需要被覆写才能够直接拿过来使用.

相当于:Animal a=new Monkey();猴子也是动物的一种。

这是用父类的引用指向子类对象。
面向接口编程都是这么写的。如:public void test(List list) {
   //do something...
}如果这个方法带的参数是ArrayList类型的,那么只有ArrayList的对象才可以传过来
而现在是用List做为参数,就表示只要是List接口的子类对象都可以传进来,如ArrayList,LinkedList,Vector 。

List<String> list =  new ArrayList<String>();

编译时类型是List,运行时类型是ArrayList,而List接口的实现类不只有ArrayList一个,用一个List类型的引用这是“面向接口编程”,好处有很多,提但是尽量面向接口编程,这里只说一个这样写的好处:

以后我们会用到很多不是我们写的类,我们叫第三方类库,在类库里面很可能会返回一个这样的列表,但是他未必会返给你一个ArrayList,没准是人家自 己写的一个实现类都说不准,那么我们面向接口编程,不需要了解是什么实现类,我们都把它们当List接收过来就好了,我们就当成List来用。提高程序的 透明性,让底层的实现对上层使用者封装。 对底层来说,这种转换的时间几乎可以忽略不计,这个是实现多态的基础,
如果了解工厂方法设计模式,只有这样才能达到要求,这种做法也是面向对
象程序设计三大特性之一——多态。如果我哪天不用 ArrayList 了,要用
其他的 LinkedList 了,这样我只要在变量声明部分修改就可以了,下面
的代码可以一行不动。

实际上这样做,在 Java 中还有很多,像 JDBC 中的 Connection、
PreparedStatment、ResultSet 等等,这些都是接口,如果不去研究 JDBC
驱动提供的源代码,根本就不会知道其具体的实现类是哪一个,对于开发人员
来说,只要知道这些接口中的方法,以及该如何使用这些方法就足够了,不需
要去考虑底层的实现,正因为如此,换一种数据库只要更改其连接驱动和连接
字符串就够了,其他的根本用不着改。

当然了,如果要使用某个类中的独有的方法,那只能使用第二种写法了。

2、if (null != listPolicyBasic && !listPolicyBasic.isEmpty()) {
                PolicyBasicBo policyBasic = listPolicyBasic.get(0);
                policyBo.setPolicyBasic(policyBasic);
            }

判断字符串不为空,然后执行逻辑,原来是listPolicyBasic.size()>0, IsEmpty函数 返回Boolean值 。

1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.
2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.
3.java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!
这个例子来演示这两个方法和一个属性的用法
public static void main(String[] args) {
String []list={"ma","cao","yuan"};
String a="macaoyuan";
System.out.println(list.length);
System.out.println(a.length());
List<Object> array=new ArrayList();
array.add(a);
System.out.println(array.size());
}
输出的值为:
3
9
1

 

3、

@Repository("polResumeDao")
public class PolResumeDaoImpl implements PolResumeDao {
    
    /**
     * 日志管理工具实例.
     */
    private static final Logger logger = LoggerFactory.getLogger(PolResumeDaoImpl.class);


}

final 是本 logger 不能再指向其他 Logger 对象 , static 修饰的变量是不管创建了new了多少个实例,也只创建一次,节省空间,如果每次都创建Logger的话比较浪费内存, static 是加载即创建实例。使用的时候可以直接拿来 ,用static修饰既节约空间,效率也好 ;

**.class是将你要加入日志的类加进入  假如你的 PolResumeDaoImpl 这个类需要加日志信息就在
private static Logger logger = Logger.getLogger( PolResumeDaoImpl .class); 
这是获取一个 PolResumeDaoImpl 类的logger,  PolResumeDaoImpl 内定义的日志信息就能够显示出来了,
得到 PolResumeDaoImpl 的Class类型对象,因为Logger.getLogger方法需要传入Class类型对象,这样该logger的信息中会详细体现出是哪个路径的哪个类的日志。

转载于:https://my.oschina.net/u/2822116/blog/709638

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值