JavaSE学习体会

📅 2026/7/28 20:09:07
JavaSE学习体会
JavaSE学习体会总结整体感受总结我是最棒的基础不牢地动山摇整体感受​ 通过一个月沉下心来重新学习JavaSE部分真的是收获颇多。想我之前自学的路上走了不少弯路也有许多东西未曾了解不过这一个月给我带来的提升真的很大。​ 人成长是一个过程Java学习也是一个过程。首先对我产生最大影响的就是一个观念不仅知道一个东西怎么用也需了解这个东西是怎么做出来的。从最简单的定义变量例如基本数据类型和引用数据类型了解到堆栈中他们是怎么出来的。​ 举个栗子publicstaticvoidmain(String[]args){inta1;String strHello World;}​ 上面的main方法在栈中有一个栈桢int a 1相当于在main方法这个栈桢里面开辟了一块空间里面有一个a变量存放了 1 这个值。而String是引用类型它会在堆中开辟空间存储“Hello World”并且有一个地址然后将这个地址存放在栈中的str里面。以前都是片面的认为定义变量都是一回事现在画一个堆栈图很容易就能理解。后面的许多知识点都可以用堆栈图来分析。示例图如下然后我的代码的风格也变得越来越好格式注释还有空行等。以前自己写的代码可能是一团乱麻现在看起来条理清楚自己看着也很有成就感。命名使用大小驼峰来完成不会使用拼音或者中西结合。遇到不会的词就去查查再用英文来命名舒服多了。可能现在的我看到我以前写的xuesheng类也会有打死自己的冲动吧2333。但是呢我现在写注释的习惯不是很好感觉一个东西很简单就不愿意去写注释这一点出大问题需要静下心来多写写注释不然以后人家提刀来见我就不好了。下面是我自己写的一个模拟断点续传代码勿喷注释确实写的少packagecn.itsource.randomaccess;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.RandomAccessFile;/** * 模拟实现文件的断点续传 */publicclassResume{//记录指针位置privatestaticlongposition-1;publicstaticvoidmain(String[]args){//定义源文件与目标文件File srcFilenewFile(test.txt);File destFilenewFile(F:/test.txt);//使用随机文件访问类来完成RandomAccessFile srcRafnull;RandomAccessFile destRafnull;try{srcRafnewRandomAccessFile(srcFile,rw);destRafnewRandomAccessFile(destFile,rw);//定义字节数组一个字节一个字节的读取byte[]bsnewbyte[1];//读取操作while(srcRaf.read(bs)!-1){//写出操作destRaf.write(bs);//模拟网络中断if(destFile.length()3){//记录断开时的指针位置positionsrcRaf.getFilePointer();System.out.println(网络连接中断);thrownewFileAccessException();}}}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}catch(FileAccessExceptione){//续传操作resume(srcRaf,destRaf,position);}finally{//关流操作try{if(destRaf!null){destRaf.close();}}catch(IOExceptione){e.printStackTrace();}finally{if(srcRaf!null){try{srcRaf.close();}catch(IOExceptione){e.printStackTrace();}}}}}/** * 续传方法 * param src * param dest * param position */publicstaticvoidresume(RandomAccessFile src,RandomAccessFile dest,longposition){//模拟网络中断10stry{Thread.sleep(10000);}catch(InterruptedExceptione1){e1.printStackTrace();}try{byte[]bsnewbyte[1];//将指针位置设置为上次断开时的位置src.seek(position);dest.seek(position);//继续完成读写操作while((src.read(bs))!-1){dest.write(bs);}System.out.println(续传成功);}catch(IOExceptione){e.printStackTrace();}}}/** * 自定义异常类 */classFileAccessExceptionextendsException{}​ 最重要的是学到了很多新的知识点比如JDK8新特性里面的Lambda表达式简化了匿名内部类很多步骤同时也认识了函数式接口。还有就是以前一些很模糊的概念也变得很清晰了比如设计类的时候需要注意的很多地方封装、无参构造、public修饰符、get和set方法等等。还有代码块的执行顺序继承和多态等。以前我都是一知半解现在应该掌握了大半剩下的就是用心敲代码至熟练咯。IO流里面的各种流以前自学的时候没分清楚字节流和字符流不知道到底有什么区别现在问题不大。后面学习的流式处理从头到尾就像管道一样对源数据操作但是不会改变源数据的类型。Lambda表达式的一个栗子接口packagecn.itsource.lambda;FunctionalInterfacepublicinterfaceIMyInterface{voidtest();}测试类packagecn.itsource.lambda;publicclassLambdaTest{publicstaticvoidmain(String[]args){//匿名内部类方式IMyInterface iMyInterfacenewIMyInterface(){Overridepublicvoidtest(){System.out.println(wdnmd);}};iMyInterface.test();//Lambda表达式IMyInterface iMyInterface2()-System.out.println(wdnmd);iMyInterface2.test();}}是不是感觉很舒服这代码量​ 最后一天学习了反射这个知识点我以前只是有所耳闻现在有一点理解了通过全限定类名来获取该类的字节码文件然后通过字节码文件获得该类里面的成员字段构造方法普通方法等。后面会学习的框架很多是基于反射的后续会继续加强。反射的示例代码packagecn.itsource.reflectdemo;importjava.lang.reflect.Constructor;importjava.lang.reflect.Field;importjava.lang.reflect.Method;publicclassReflectTest{publicstaticvoidmain(String[]args)throwsException{/* * 利用反射获取该类的构造方法并且使用newInstance创建对象 */Class?forNameClass.forName(cn.itsource.reflectdemo.A);Constructor?constructorforName.getConstructor(int.class,int.class);System.out.println(constructor);// Constructor?[] constructors forName.getConstructors();// for (Constructor? constructor : constructors) {// System.out.println(constructor);// }// Constructor?[] declaredConstructors forName.getDeclaredConstructors();// for (Constructor? constructor : declaredConstructors) {// System.out.println(constructor);// }Object newInstanceconstructor.newInstance(1,2);System.out.println(newInstance);/* * 使用反射调用普通方法 */Method[]declaredMethodsforName.getDeclaredMethods();for(Method method:declaredMethods){System.out.println(method);}Method methodforName.getMethod(test);method.invoke(newInstance);Method method2forName.getMethod(test3,int.class);method2.invoke(newInstance,3);/* * 使用反射调用字段 */Field[]fieldsforName.getFields();for(Field field:fields){System.out.println(field);}Field[]declaredFieldsforName.getDeclaredFields();for(Field field:declaredFields){System.out.println(field);}// Field field forName.getDeclaredField(a);Field fieldforName.getField(c);field.setAccessible(true);field.set(null,3);System.out.println(field.get(null));/* * 获取限定名和简写名 */String nameforName.getName();System.out.println(name);String simpleNameforName.getSimpleName();System.out.println(simpleName);}}/** * 自定义类 */classA{privateinta;intb;publicstaticintc;privateA(){}publicA(inta,intb){this.aa;this.bb;}publicvoidtest(){System.out.println(test);}publicvoidtest3(inta){System.out.println(a);}privatevoidtest2(){System.out.println(test2);}}​这个月的学习获益匪浅不过需戒骄戒躁继续保持下去。感谢每个真心待我的人谢谢你们也感谢自己有勇气做出选择铁石心肠也有水滴石穿的一天继续加油