发表于: 2017-11-10 21:32:07
1 709
一;先记录一下学习的基础知识,昨天看了流程控制的基础,今天借着熟悉一下debug,之前学的是是而非;
1,是F8 step over; 程序向下执行一行(如果当前行有方法调用,这个方法将被执行完毕返回,然后到下一行)
2;是F7 step into: 程序向下执行一行。如果该行有自定义方法,则运行进入自定义方法(不会进入官方类库的方法),这个查询所有方法,调用了get方法,用F7就可以直接看到get的值了;
System.out.println(s.getId() + " "+s.getName() +" "+ s.getSid() +" "+ s.getQq());
而且shift +F7;还会智能选择进入哪一个.
3;alt+shift+F7;Force step into在调试的时候能进入任何方法,也就是说, 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则进入当前方法体内,如果方法体还有方法,则会进入该内嵌的方法中,依此循环进入;这个暂时不会用,感觉会进入好多内容,应该是官方类库的东西……..
4;shift+F8;step out;在Debug 模式下,跳出,也就是说如果在调试的时候你进入了一个方法(如f2()),并觉得该方法没有问题,就可以使用stepout跳出该方法,返回到该方法被调用处的下一行语句。值得注意的是,该方法已执行完毕。
5;F9, 在 Debug 模式下,恢复程序运行,但是如果该断点下面代码还有断点则停在下一个断点上 ,感觉与上面的类似
6;还有几个知识点,像设置断点判断条件,暂时不说了,等实际用到再理解,先记着这几个常用的了
二;再学习一下数组知识
1;实际上数组就是一个容器,是一个固定长度的,包含了相同类型数据的容器; int[] a; 声明了一个数组变量。[]表示该变量是一个数组;int表示数组里的每一个元素都是一个整数;a 是变量名;也会写成int a[];没区别;
2;还有就是一个.length属性用于访问一个数组的长度, 数组访问下标范围是0到长度-1;一旦超过这个范围,就会产生数组下标越界异常
3; 数组的空间,赋值;
4;数组与循环的结合,做个排序,只要有逻辑,代码都可以实现,这里就可以引入增强型for循环,遍历就不说了
5;数组的复制; 数组的长度是不可变的,一旦分配好空间,是多长,就多长,不能增加也不能减少;有两种方法,一种是通过循环交换复制;一种是指定System.arraycopy(src, srcPos, dest, destPos, length)
6;二维数组简单了解一下; 一维数组, 里面的每一个元素,都是一个基本类型int; 二维数组,里面的每一个元素,都是一个一维数组;所以二维数组又叫数组的数组;
7;最后说一个数组的工具类Arrays;是针对数组的工具类,可以进行排序,查找,复制填充等功能,提高开发工作效率
A;简单实验几个,比如复制功能,之前用的是System.arraycopy(src, srcPos, dest, destPos, length); 不同的是System.arraycopy,需要事先准备好目标数组,并分配长度;copyOfRange 只需要源数组通过返回值,能得到目标数组。copyOfRange(int[] original, int from, int to); 第3个参数,表示源数组的结束位置,是取不到的
B;更实用的,如果要打印一个数组的内容,可以通过for循环来挨个遍历,逐一打印;但是Arrays提供了一个toString()方法,可以直接把一个数组,转换为字符串
C;前面排序,要经过循环交换,很麻烦,什么选择法排序,冒泡法排序,而Arrays工具类提供了一个sort方法,超级方便
D;搜索功能,查询元素出现的位置,但使用binarySearch进行查找之前,必须使用sort进行排序;感觉用处不大,或许数据多的情况下,方便排查吧,有一点就是数据重复的话,结果不稳定
E;还有就是提供的Arrays.equals数组比较方法以及Arrays.fill填充方法,就不说了;
三:今天最后的Java基础,也是最初学的时候,最不想看,也是难以看懂的地方;接口与继承,找一个完整的教程一步一步学
A;简单引入接口的概念,也就是一种约定;而实现某个接口,就相当于承诺了某种约定,必须要提供接口里声明的方法,而且可以实现多个接口,那就要完成多个约定
B;引用类型和对象类型的概念
在这个例子里,有一个对象new Hero(), 同时也有一个引用h;对象是有类型的是Hero;引用也是有类型的也是Hero通常情况下,引用类型和对象类型是一样的
C;转型; 是指当引用类型和对象类型不一致的时候,才需要进行类型转换;类型转换有时候会成功,有时候会失败
子类转向父类,可以;父类转向子类,看情况,没有继承关系的一定会失败;还有就是,实现类转换成接口,可以;而接口转成实现类不行,因为一个实现类可以实现多个接口,一个接口转型到实现多个接口的类,会多出一些方法,不合理,还有一个instanceof A说一下,用来判断一个引用所指向的对象,是否是A类型,或者A的子类
D;重写;子类可以继承父类的对象方法;在继承后,重复提供该方法,就叫做方法的重写;又叫覆盖 override.这个不多说了,也就是要重写,首先要是能够被继承的;所以必须是public,protected,或者同包下的父类;而像private以及非同包父类,是不能继承的,不能继承也就谈不上重写了。还有一点就是如果没有重写这样的机制,那么继承的所有方法都不能修改,要想实现方法的变动只能,重新编写,这会增大时间的开销;不利于开发.( 与重写类似,方法的重写是子类覆盖父类的对象方法,隐藏,就是子类覆盖父类的类方法)
E;多态的学习,实际上+加号就是一个多态的体现;在运算过程中是数字相加,在字符串中是拼接;而多态学习是,更多的是类的多态,如果两个类都继承了一个父类,并且重写了方法,那么都是同一个类型,调用同一个方法,却能呈现不同的状态;也就是说多态的条件: 一个是父类引用指向子类对象,还有就是调用的方法有重写;具体作用的话就是可以少些代码,不用多态,每一个方法都要写出来.
三,关于web应用的知识点,之前没有仔细理解,就是简单运用;
A;先说Filter的概念, Filter就像一个一个哨卡,用户的请求需要经过Filter,并且可以有多个过滤器;找教程实现简单过滤器的编写;通过request的方法来获取信息
大致原理就是这样,filter会提供方法参数,不是很理解,不过还是跑一下.
有一点,就是过滤器会自动,不像sevlet需要配置才行;还有一点就是中文过滤器的配置原理类似,就像在代码里加入调用request方法request.setCharacterEncoding("UTF-8");然后封装好,直接配置在spring框架里调用了,而且不用设置response的utf-8原因是,mvc架构里配置了视图解析器,而解析器由jsp负责,在jsp最上面都会加上contentType="text/html;charset=UTF-8",也就等同于返回的中文信息了;response.setContentType("text/html; charset=UTF-8");
最后,Filter是web应用非常重要的一个环节,如果Filter启动失败,或者本身有编译错误,不仅这个Filter不能使用,整个web应用会启动失败,导致用户无法访问页面,这里试了一下,果然会报错,而且web应用启动失败
B;对于是否登陆过的验证问题,同样可以用过滤器来处理,之前没有过滤器的时候,需要通过代码来判断,先把信息放进session,然后取出来判断;
在处理登录的loginServlet 中使用将用户名保存在session中。
在ListServlet中查看session中是否为空;如果为空,就表示用户没有登陆过,就跳转到登陆页面
如果多个servlet,那所有的Servlet都要加上一样的代码,比较麻烦;而有了过滤器;就可以一次性解决,写好类
配置一下过滤器就可以了;
这只是过滤器的原理,底层机制吧,真正应用的话,还是导入包,封装好,然后调用吧;还有就是看到说过滤器和拦截器的区别: 拦截器是struts或者springmvc框架里的"过滤器”,有的项目没有使用框架,就只能使用过滤器了,也就是说框架里的过滤器也叫做拦截器;听起来更精致点???而过滤器范围更大,叫起来不会错.
C;学习监听器,学习web应用的时候只是简单运用,原理都没看,流程机制也没看,,这里也看一下吧;专业术语; Listener 的作用是用于监听 web应用的创建和销毁,以及在其上attribute发生的变化。web应用即ServletContext对象(jsp的隐式对象application)除了对web应用的监听外,还能监听session和request的生命周期,以及他们的attribute发生的变化。
明日计划的事情:
1;专心做任务
2;抽小部分时间学习基础
遇到的问题及解决方法:
1; 对于debug的几个步骤还是不够好,不能够清晰的使用逻辑,去调试问题所在;慢慢练习习惯吧
2;用过滤器获取ip地址时,会出现本地ip变成0.0.0.0.0.0.1的形式; 照道理讲,应该是127.0.0.1才对,获取的值变成了ipv6了,这种情况百度说只有在服务器和客户端都在同一台电脑上才会出现,两种解决方案
一种是直接不用locahost访问,用127.0.0.1;这个简单;事实也是;还有一种时修改文件,系统文件etc/hosts,需要权限比较麻烦,还是直接本地访问吧
收获:
1;对于debug的使用有了真正意义上的学习
2;简单的语法基础,数组及其工具类的学习使用
3;对于过滤器,监听器有了进一步的了解
评论