发表于: 2018-03-23 21:08:50
1 680
今天完成的事情:
1.白天忙事情,回来把台式机配置了一遍,整理了一下。
2.抽象过程。
3.注解问题。
4.访问控制。
2.抽象,抽象
今天看了一下面向对象开发过程,看了抽象概念。慢慢补全相关知识。
抽象是一个抽象的概念。我的理解是抽出来某个事物的属性把它支撑起来作为一个对象。
所有编程语言都提供抽象过程。
“1)万物皆对象
2)程序是对象的集合,它们通过发送消息来告知彼此所要做的
3)每个对象都有自己的由其他对象所构成的储存
4)每个对象都拥有其类型
5)某一特定类型的所有对象都可以接收同样的消息”
拿接口来说,以我的理解说一下接口——实现类这个对象的概念
拿鼠标做一个对象,接口就是为了确定能对它发送什么请求,然后它自己去实现。
比如一个鼠标mouse接口,它里面有基础的点击click()方法,有移动move()方法。这是最基础的,所以我们需要定义这几个命令。当我们需要鼠标的时候就使用接口定义一个实例出来,然后需要点击的时候就对它发送click()命令,然后这个实例就会自己去完成click()命令的内容,如何点击、如何告诉电脑我点了这里等等,这是实例要做的事情。接口就是发送命令,定义方法,而实例去实现它。
“ 我们在开发或者理解一个程序的时候最好的方法之一就是将对象想象为“服务提供者”。程序本身向用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。你的目标就是去创建(或者是直接使用现有的)能够提供理想的服务来解决问题的一系列对象。”
“而在良好的面向对象设计中,每个对象都可以很好的完成一项任务,但它并不试图做更多的事。”
3.注解问题:
今天写的一直报Null空指针异常,查了好久没找到,最后发现是注解的问题:
@Autowired
UserMapper userMapper ;
之前以为注解跟注释是类似的,可以不用理会,但是注解开发跟注释开发是不一样的。
注解是Annotation,jdk5.0以后引动的一个特性,以@开头,讲给程序的,程序可以看懂并编译。是参与开发的。
而注释是//或者/**/标注,是程序员写的解释或者提示性的描述,给人看的,对程序完全没有影响。
springMVC注解:https://wenku.baidu.com/view/6ffcc422da38376bae1fae8f.html
junit注解:https://www.yiibai.com/junit/junit-annotations.html
今天出现的空指针异常就是引用UserMapper的时候没有注解@AutoWired;如果不懂的话完全不知道问题出在哪里,因为代码没有错误的地方。只是少了一个注解。
@Autowired
Spring框架中进行注入时,使用@Autowired。它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。之前看了依赖注入,而使用@Autowired可以不用使用set之类的去注入。如果我们定义了一个接口,而需要使用它的时候,就可以使用@Autowired注解来用(不只是接口,可以用在任何你需要的地方)。就拿今天的例子来说:
@Autowired
UserMapper userMapper ;
@org.junit.Test
public void testSelectById(){
System.out.print(userMapper.selectById(3));
// userMapper.selectById(1);
}
这里使用了@Autowired注解,因为我要使用这个接口(Mapper)来测试。如果不用的话我们就需要用其它办法去调用这个接口,比如:
@org.junit.Test
public void testSelectById(UserMapper userMapper){
System.out.print(userMapper.selectById(3));
// userMapper.selectById(1);
}
可以这样使用匿名类传入这个接口,这样写就相当于new一个对象做为参数来使用,用的时候要再写一个方法来使用它:
public void a(){
testSelectById(new UserMapper(){ 实例化方法 });
}
这样写有好处也有坏处,不过基本上不这样写,我只是要测试,这样不是徒增额外功么。而且不写实例的话这里这样的使用会报no parameters:
这是因为这样没有setget方法得不到它的参数,那就需要在其它地方调用(比如 a();)这个方法的时候实例化传入,但是我只是要在这里测试。
而直接在内部使用的话必须要实例化它的方法,或者直接赋空值,如果直接声明的话运行会报未初始化变量:
如果直接赋空值:
@org.junit.Test
public void testSelectById(){
UserMapper userMapper = null;
System.out.print(userMapper.selectById(3));
// userMapper.selectById(1);
}
这样就没什么意义了。而且这不是我使用它的初衷。
这是使用@注解的方便之处。
java有自己的注解类,spring有,junit也有,所以注解对开发很有帮助,这是一个避不开的地方。
4.访问控制
访问控制就是程序控制了某些东西让它无法被随意访问。根据对象一说,我们使用的任何对象都是在不断的调用其它的对象直到满足要求。(那最下面最基础的对象下面没有对象了,它该怎么处理这些问题?),所以我们在不断的使用任何类,创建类,也就意味着它们可以被随意更改,但是这是应该是不被允许的,因为总有不懂的人碰到不该碰的东西。如何保证我们创建的方法和对象不被不相关的人所更改调用,这需要访问控制。
限制外面的人不会碰到你封装的东西。限制你可以改变自己代码的工作方式而使别人使用的时候不会造成影响。
所以这就是这些关键字的作用
·public 公共的,任何人都可用
·private 除了类型创建者和类内部的方法之外任何人都不能访问
·protected 跟private一样,但是限制了继承类也不能访问
·default 默认的访问权限,没有使用之前的任何一个访问指定词的时候它就发挥作用,它能被同一个包里的其它类访问,但是出了包就访问不到了
·今天也跑完了一个spring-mybatis-jdbc流程,好像每天都要跑一遍,然后每次出现的bug都不一样…时间不是用在找bug就是用在“写bug”的路上。其它是用在边看资料边查找“如何找bug”上。
明天计划的事情:
学习spring,配置服务器,学习复用具体实现
遇到的问题:
(注解相关原因)空指针异常java.lang.NullPointerException
开数据池会延长测试时间,数据池的配置。有些概念不清楚,应该是数据比较少,没有清晰的认识到方便之处。
收获:
·对象的概念
·访问控制
·写日志是总结,也是整理思想
·看资料的时候注意到一点,不管以后学的怎么样,我们工作的时候是要对公司有解决问题的价值。所以代码只是一个方面,它只是我们帮助公司解决问题的一个办法,虽然是一个非常棒的办法,但是并不代表我们不能用其方法帮助公司解决问题。这样我们的价值才会体现出来。之前有新闻说国外某公司的一位顶尖程序员将自己的工作外包给中国沈阳的一家软件公司,然后自己去做喜欢的事情,拿着高薪到处玩耍,虽然后面被解雇了……
举这个例子是说我们需要开拓思维,要换个角度思考。但是程序员的开发能力和解决问题的能力是硬功夫,必不可少的。但是程序的本质是思想,是怎么去写,所以充实自己是最主要的。
评论