java一些问题的思考】的更多相关文章

1.思考 为什么java规定作为程序入口点的main() 方法静态的? 在java中,main()方法是java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void类型的,方法必须是接受一个字符串数组的参数等. 因为main()方法是由Java虚拟机调用的,所以必须是public,虚拟机调用的main()方法的时候,不需要产生任何对象,所以main()方…
1. 多线程并发访问一个静态方法(static method)会不会有什么性能影响? 思考:不会,原因是static method编译后及时一串指令(jvm中的静态方法区,也叫non-heap(包含了Perm Gen),jvm规范对该区没有GC 要求): 如果没有数据竞争,就不会有并发不安全的问题.   那个数据调用了改方法,则对改数据做一系列的指令. 2.所谓的minor GC ,full GC 和常见的内存溢出,你的理解是什么? 思考:jvm 内存模型分几大区域:栈(线程).堆(实例).静态…
在Java中,获取数组的长度和String的长度是两种不同的方法,这引起了本文作者的一番思考.本文从JVM的角度,探讨了Java数组在JVM中是什么对象,有哪些成员,以及声明方法. 作者:jarfield来源:JavaEye博客|2010-01-08 09:30 移动端 收藏 分享 本文来自jarfield的博客,原文标题为<为什么如此获取Java数组的长度>. 记得vamcily 曾问我:“为什么获取数组的长度用.length(成员变量的形式),而获取String的长度用.length()(…
我们都知道,java的gc是基于java的分代前提,不管是CMS还是G1,都是基于分代思想:老年代和新生代 思考一:为什么可以分代? 1.java中对象的生命周期是不一样的,在gc中对应年龄的概念. 短命的对象:如方法临时变量等. 长命的对象:如缓存对象.连接池等. 2.长命对象和短命对象之间的引用关系比较少(很重要). 思考二:分代的优点是什么? 从垃圾回收的角度看,可以针对不同的分代采用不同的回收算法,提升垃圾回收的效率,降低系统stw的时间. 思考三:分代没有缺点吗? 假设我们有一个场景的…
排序的算法是很多公司的笔试和面试题,个人感觉Java中其实无需使用这些排序方法,因为Java中已经为我们提供了很方便效率很高的sort()方法.但是不使用不能代表不需要学习这些算法,也不是仅仅为了面试和笔试才去学这些算法,这些算法中有很好的数据结构方面的思想,掌握这些算法可以帮助我们更好的理解数据结构.这次既然是回顾和思考,我决定使用很形象的图文展示的方式,透彻的去理解每一个排序算法. 一.选择排序 原理:第n轮比较将数组中除过自己的所有元素与第n个元素比较,如果大于(小于)第一个元素则交换.…
关于异常的一点思考 异常生命周期 异常的来源 所有的异常都是抛出来的 有底层api抛出的 有自定义抛出的 异常的处理 1, 运行时异常 不做任何处理仍可编译通过 不建议捕获(不建议用异常来做流程控制,异常是程序中的非正常情况) 2, 受检查异常 必须处理,否则编译通过 处理方式:捕获处理 或者抛出处理 异常的终态 1, 对于捕获处理的异常 虚拟机不再做额外处理 2, 对于抛出的异常 受检查异常:在编译通过的情况下,会一直抛出直到main 层,如果在main仍然没有 捕获处理 则 虚拟机会调用 e…
==================================== =======学而时习之======================== ===================== 1. public class Test { public static void main(String[] args) { String str = "123"; changeStr(str); System.out.print(str); } public static void chang…
Java 日志缓存机制的实现 Java 日志管理最佳实践 混乱的 Java 日志体系 log日志远程统一记录 浅谈后端日志系统 Java异常处理和接口约定 用SLF4j/Logback打印日志-1 用SLF4j/Logback打印日志-2 用SLF4j/Logback打印日志-3 spring boot日志升级篇—logback[从零开始学Spring Boot] jdk-logging.log4j.logback日志介绍及原理 log4j日志输出性能优化-缓存.异步 Spring Boot中对…
转载自:http://www.cnblogs.com/heshan664754022/archive/2013/03/24/2979495.html 十年半山 今天在论坛闲逛的时候发现了一个很有趣的题目: package test; public class Test { public void myMethod(String str) { System.err.println("string"); } public void myMethod(Object obj) { System…
最近在看一本书 Java与模式,里面提了一句不建议使用常量接口,甚至举了个java源码的反例, 蛋疼的是没有说为什么? 查了网上一圈发现他们也是知道怎么做而不知道为什么这么做. 然后我只能找谷歌了,翻译后,我把自己理解外加总结的放在下面. 第一 常量类应该是final,不变的,而接口里的参数是final,也是不变的. 那么,看起来接口是放常量没有一定问题,还省去了final的输入,非常的合适. 但是,类是只能单继承的,接口是允许多实现的. 要是类实现的多个接口出现重名的常量,会报错,必须要在实现…
自从JDK5開始Java開始添加了对元数据(MetaData)的支持,也就是注解(Annotation),到JDK7时已经有四种基本注解,新添加了一种@SafeVarargs. @Override注解标注一个子类重写了父类的某个方法,假设父类中没有这种方法,编译器会报错: @Deprecated注解作用于方法.类.接口,表名此内容已经过去,是不是不推荐使用?可是标注过也是能够使用的: @SupressWarnings注解用来抑制编译器的警告信息.比如使用集合时假设不指定泛型将有警告信息: @Sa…
我们知道在Java中数组是非基本类型既数组是对象(Object)的子类,所以用下面的这种方式是不能复制该对象的 public static void main(String[] args) { int[] arry1 = new int[]{1, 2, 3, 4}; //数组赋值 int[] arry2 = arry1; //一个数组对象,两个引用同时引用该对象 System.out.println(arry1[1]); System.out.println(arry2[1]); arry1[1…
学习Java已经三年了,现在开始做Android开发,虽说还在用Java语言但本人现在才真真的意识到无论学什么基础才是最重要的,可能一些刚接触Java或者Android的朋友现在还体会不到基础的重要性,感觉能做出实实在在的东西来才是自己真真能力的集中体现.都说IT行业是一个要会学习的行业,因为这个行业的知识更新很快,也许就是这个原因很多新人很重视新技术的使用方法缺往往忽视了基础.我认为作为技术人员的我们两样东西很重要,一个是兴趣.二是会学习,如何才能做到这两点呢? 兴趣不能说是一个人与生俱来的东…
遇到个bug,noClassFoundEx,很常见. 但是问题来了. 比如我的服务器目录是 /opt/tomcat/webapps/ROOT/WEB-INF/classes/cn/controller,开发目录是projectdir/src/main/java/cn/controller, 开发目录下有个InfoController.java,我在这个目录下compile这个文件,然后我在把这个class文件放到服务器目录时,我把它放到cn/controller/demo/目录下,此时程序跑起来…
快速上手 Record 类 我们先举一个简单例子,声明一个用户 Record. public record User(long id, String name, int age) {} 这样编写代码之后,Record 类默认包含的元素和方法实现包括: record 头指定的组成元素(int id, String name, int age),并且,这些元素都是 final 的. record 默认只有一个构造器,是包含所有元素的构造器. record 的每个元素都有一个对应的 getter(但这…
Java Record 序列化相关 Record 在设计之初,就是为了找寻一种纯表示数据的类型载体.Java 的 class 现在经过不断的迭代做功能加法,用法已经非常复杂,各种语法糖,各种多态构造器,各种继承设计导致针对 Java 的序列化框架也做得非常复杂,要考虑的情况有很多很多.每次 Java 升级,如果对类结构有做改动或者加入了新特性,那么序列化框架就都需要改来兼容.这样会阻碍 Java 的发展,于是设计出了 Record 这个专门用来存储数据的类型. 经过上一节的分析我们知道,Reco…
坚持每天写一个总结的博客,今天又是一个新的开始! 今天我要说的是一个关于发送短信通知发送的问题.具体的业务流程是这样的,现在需要对用户的一个提现的申请进行审核,审核的内部需要控制很多的业务, 1.检查用户的提现余额-> 2.减去用户的账户金额->3.减去公司的结算账户的余额-> 4.创建用户的提现日志记录->5. 创建公司账户的资金变动日志-> 6.提现成功 后,需要给用户发送提现到账的短信通知.这是一系列需要处理的事情. 要实现这个流程,保证资金的数据的不出错,就必须要在一…
一.问题 最近基于JSR269做的代码插桩有一个编译问题需要定位,而且问题不是每次都能复现,需要多编译几次才行,出问题的项目是Maven构建的,相对较大,每次构建耗时就比较长.所以我就想,是否有什么配置项能加快编译的速度,比如:并行编译?最近在看Javac源码,也的确没有发现有任何多线程处理源码编译的痕迹. 二.过程 经过一番Google发现不只我有此疑问,在文章最后放上了检索的一些链接.有一个典型的声音: Javac is a very fast compiler. If you have a…
public static void main(String[] args) { Integer a = 0; count(a); System.out.println(a); // 问题: a 输出是多少? 原因 } private static void count(Integer a) { for (int i = 0; i <10 ; i++) { a+=a; } }…
Java是最早开始有并发的语言之一,再过去传统多任务的模式下,人们发现很难解决一些更为复杂的问题,这个时候我们就有了并发. 引用 多线程比多任务更加有挑战.多线程是在同一个程序内部并行执行,因此会对相同的内存空间进行并发读写操作.这可能是在单线程程序中从来不会遇到的问题.其中的一些错误也未必会在单CPU机器上出现,因为两个线程从来不会得到真正的并行执行.然而,更现代的计算机伴随着多核CPU的出现,也就意味着不同的线程能被不同的CPU核得到真正意义的并行执行. 那么,要开始Java并发之路,就要开…
一.文件下载简述 1.使用浏览器从网页上下载文件,Servlet需要增加一些响应头信息 (1)response.setContentType("application/force-download"); (2)response.setContentLength(fis.available()); (3)response.setHeader("Content-Disposition","attachment;filename="+filename)…
这两天回忆一些Java基础,感觉自己很多地方都不是很牢固,也花费在不少时间和不少流量在手机上查资料. 还是写下来这些东西以免再忘记. 同时还是要记住多动手,编程最重要的就是动手敲啊,有想法有疑问就要自己去实现去验证. 1. 访问控制 Java的默认访问权限(包访问权限)跟C++中的友元很像其实,都具有一定的特殊性. 同一个包中的类是可以任意访问其他类的非私有成员的,而如果继承关系发生在同一个包中,子类继承的所有非私有成员都是可见的. 但如果继承不是发生在同一个包中则会有很大不同,通过继承导入的包…
Atitit.异步编程 java .net php python js 的比較 1. 1.异步任务,异步模式,  APM模式,,  EAP模式, TAP 1 1.1.       APM模式: BeginXXX/EndXXX, IAsyncResult 2 1.2.       EAP模式(基于事件的异步模式) 2 1.3.      TAP(基于任务的异步模式) 2 2. 异步的实现机制::主要是通过线程and线程池实现的... 2 3. 异步编程的开发::当前都是通过api的,将来应该能够使…
1.java 设计模式:http://blog.csdn.net/JAVE_LOVER/article/category/2379703 2.Java web框架的思考:http://www.oschina.net/question/12_52027?fromerr=NEknevKe 3.下载的英文课件…
教学目标:1.使学生了解JAVA课程的性质.定位.作用:为什么要学习JAVA?让学生知道如何学好JAVA: 教学内容: 一.        问几个问题 1.             你们到这里来干什么的? 来学习JAVA程序设计 为什么要来学习JAVA呢? 找个好工作,拿到高薪水 2.             怎么样才能达到你们的目标呢? 有的同学说学好JAVA就可以了,但是如何才能学好呢? 学好JAVA的几个关键 1.             认认真真上课 2.             按时按…
为前期学习过反射,再这里再次复习总结下:[转载请说明来源:http://www.cnblogs.com/pony1223/p/7659210.html ] 一.透彻分析反射的基础_Class类 Class是一个类,他代表一类事物,它代表一类什么样的事物呢? Java 程序中的各个java类属于同一类事物,描述这类事物的java类名就是Class. 思考:众多的人可以用一个什么类表示? Person众多的类用一个什么类来表示?    答案是Class 我们知道Person代表一个人,一个人有他的身…
关于java学习笔记的思考问题 第一章:JDK与JRE,JVM之间有没有必然的联系 第二章:可执行文件夹找到相关链接库 第三章:for与while循环的用法与比较,break与continue跳出的注意事项 第四章:对象数组以及比较对象的用法 第五章:对象开销里面的16字节究竟存储了什么?填充字节又存储了什么? 第六章:作用域的范围问题. 第七章:多态多个子类对同一方法重写的不同行为 第八章:在用throw重抛异常时的追踪堆栈起点 第九章:comparator对象告知如何排序? 第十章:read…
Atitit.异步编程 java .net php python js 的比较 1. 1.异步任务,异步模式,  APM模式,,  EAP模式, TAP 1 1.1.       APM模式: BeginXXX/EndXXX, IAsyncResult 2 1.2.       EAP模式(基于事件的异步模式) 2 1.3.      TAP(基于任务的异步模式) 2 2. 异步的实现机制::主要是通过线程and线程池实现的... 2 3. 异步编程的开发::当前都是通过api的,将来应该可以使…
Map<String,Integer> hashMap = new HashMap<String,Integer>(); hashMap.put(); // hashMap.put(123, ""); 编译出错 hashMap.get(new Date()); 不多说 直接上代码,泛型在编译期提供类型检查,如果不符合泛型的定义的类,那么在编译期会报错. 比如put()方法. 但是key 是String 类型,按理说参数传入Date()类型 get()方法应该会报…
1. 数组名区别 -------------------------------------- 1. java中不用说,本着一切皆对象的原则,所以java中的数组也是对象.那么数组类是哪个,当然不是java.util.Arrays.详见Java数组方法的思考 2. 而在c++中数组名其实是一种数据结构,有人会说不是指针吗,关于这一点见(C++中数组名其实是一种数据结构). 从上面两点中我们可以看出java数组名是对象,而c++数组名是数据结构.那么有人又会问对象和数据结构又有什么区别呢?详见数据…