作为个人笔记,不具有参考价值。
1:Java final关键字解释
final 对于常量来说,意味着值不能改变,例如 final int i=100。这个i的值永远都是100。但是对于变量来说又不一样,只是标识这个引用不可被改变,例如 final File f=new File("c:\\test.txt");那么这个f一定是不能被改变的,如果f本身有方法修改其中的成员变量,例如是否可读,是允许修改的。形象的比喻:一个女子定义了一个final的老公,这个老公的职业和收入都是允许改变的,只是这个女人不会换老公而已。
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
final类中的成员变量,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可以明确的给final类中的方法加上一个final,但这显然没有意义。
2:
类型 大小
boolean 1位 不是数字类型,不能对布尔变量进行算术运算
char 16位 字符型在java中,被看做无符号整型.26个字母和特殊字符,每个国家的字符等。char a = 'a',b='%';输出 a=a,b=%。
byte 8位 字节型。代表了26个字母对应的数值,byte a='a'; 表示了a对应的数值为97,byte b = '1',c=1; 打印出b,c后,输出b=49,c=1. b表示字符1所在的位置。
short 16位
int 32位
(1):int类型向double类型或者float类型的时候,不需要强制类型转换,因为32位精度向高位,不需要转换;但是double向int转换,64位的高精度向32位低精度转换,需要强制类型转换。
例如:double a=1,b=2;
int m = a+b;必须写成int m =(int)(a+b);
(2):两个byte相加,变成了短整型。byte a=1,b=2,c; 当a+b之后,编译器会自动转换成整型。c=(byte)(a+b);
3: StringBuilder与StringBuffer和String 的区别
转载自:http://apps.hi.baidu.com/share/detail/33501758
String类型和StringBuffer类型的主要性能区别其实在于 String 是不可变的对象,因此在每次对String类型进行改变的时候其实都等同于生成了一个新的 String对象,然后将指针指向新的String对象,所以经常改变内容的字符串最好不要用 String
如果是使用StringBuffer类则结果就不一样了,每次结果都会对StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用
先简单介绍一下, StringBuilder 是 JDK5.0 中新增加的一个类,它跟 StringBuffer 的区别看下面的介绍:
Java.lang.StringBuffer线程安全的可变字符序列。类似于 String 的字符串缓冲区,但不能修改。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5.0 开始,为该类增添了一个单个线程使用的等价类,即 StringBuilder 。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
但是如果将 StringBuilder 的实例用于多个线程是不安全的。需要这样的同步,则建议使用 StringBuffer 。
在大部分情况下
StringBuilder > StringBuffer > String
4:[转载]finalize() 和 system.gc() 的区别
finalize()是由JVM自动调用的,你可以用System.gc(),但JVM不一定会立刻执行,JVM感觉内存空间有限时,才会开始执行finalize(),至于新的对象创建个数和被收集个数不同是因为收集的对象只和JVM的垃圾收集策略有关。
finalize()和gc()
(1)问题:finalize()函数是干嘛的?Java不是有Garbage Collection(以下简称gc)来负责回收内存吗?
回答:
gc 只能清除在堆上分配的内存(纯java语言的所有对象都在堆上使用new分配内存),而不能清除栈上分配的内存(当使用JNI技术时,可能会在栈上分配内存,例如java调用c程序,而该c程序使用malloc分配内存时).因此,如果某些对象被分配了栈上的内存区域,那gc就管不着了,对这样的对象进行内存回收就要靠finalize().
举个例子来说,
当java 调用非java方法时(这种方法可能是c或是c++的),在非java代码内部也许调用了c的malloc()函数来分配内存,而且除非调用那个了 free() ;否则不会释放内存(因为free()是c的函数),这个时候要进行释放内存的工作,gc是不起作用的,因而需要在finalize()内部的一个固有方法调用它(free()).
finalize的工作原理应该是这样的:
一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存.所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作.
(2)问题:finalize()在什么时候被调用?
回答:
有三种情况
1.所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候.
2.程序退出时为每个对象调用一次finalize方法。
3.显式的调用finalize方法
除此以外,正常情况下,当某个对象被系统收集为无用信息的时候,finalize()将被自动调用,但是jvm不保证finalize()一定被调用,也就是说,finalize()的调用是不确定的,这也就是为什么sun不提倡使用finalize()的原因. 简单来讲,finalize()是在对象被GC回收前会调用的方法,而System.gc()强制GC开始回收工作纠正,不是强制,是建议,具体执行要看GC的意思简单地说,调用了 System.gc() 之后,java 在内存回收过程中就会调用那些要被回收的对象的 finalize() 方法。
5:List,Set,集成接口Collection。
list允许重复的元素,Set是集合不允许重复的元素。
list放入元素的顺序是什么样的,取出来就是什么样的。
Set按照哈希法进行了排序。所以存入和取出的顺序不一样。
Map:是键值对的存取。按照哈希法进行了排序。所以存入和取出的顺序不一样。
6:枚举类型
public enum Action {
TURN_LEFT,
TURN_RIGHT,
SHOOT
}
public class EnumDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
doAction(Action.SHOOT);
}
public static void doAction(Action mAction){
switch(mAction){
case TURN_LEFT:
System.out.println("turn left");
case TURN_RIGHT:
System.out.println("turn right");
case SHOOT:
System.out.println("turn shoot");
default:
break;
}
}
}
好处:少输入一些字符,对switch中输入的类型进行检查,如果不是action中的成员,会报错。枚举类型实质也是类。每个变量是对应的enum实例。
分享到:
相关推荐
Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和强大的类库而闻名。本文主要探讨Java基础知识、面试技巧及SCJP(Sun Certified Programmer for Java)考试的相关知识点。 一、Java基础知识 1. **...
在IT领域,Java容器是一个非常重要的概念,尤其对于软件开发者来说,它们是理解和构建高效、可扩展的应用程序的关键。...在日常工作中,不断学习和实践这些知识点,对于成为一名专业的IT行业大师至关重要。
Java开发日常总结 Java开发是一项复杂且广泛的领域,涵盖了前端技术、后端开发、数据库管理、框架应用等多个方面。以下是对这些领域的详细说明。 1. JavaWeb前端技术 - **超文本标记语言(HTML)**:HTML是构建...
在“日常总结:Java + 大数据.zip”这个压缩包中,我们可能找到了关于Java编程语言和大数据技术的综合学习资料。尽管没有具体的标签来指示具体主题,但从标题来看,我们可以期待一系列关于这两个领域的关键概念、...
总结来说,"JAVA WEB日常事务管理系统"利用了Java Web的多个核心技术和框架,构建了一个全面的事务管理平台。通过Struts实现MVC架构,用Hibernate处理数据库操作,借助JavaMail API实现邮件功能,利用JSP和Servlet...
这些工具包含在JDK(Java Development Kit)中,是开发者日常工作的基础。下面将对这些Java命令行工具进行详细的总结和说明。 一、基础工具(Basic Tools) 1. javac:Java编程语言的编译器。开发者使用它将.java...
此外,Java的集合框架包括数组、ArrayList、LinkedList、HashSet、HashMap等,提供了存储和操作对象的工具,是日常编程中不可或缺的部分。 函数式编程的概念在Java 8引入后变得重要,Lambda表达式和Stream API使得...
此外,演示项目和日常教学也应紧密结合,确保学生在动手实践中学习,而非仅仅依赖观看和听讲。 Java实训的一个独特之处在于强调“真项目”和“真流程”。这意味着实训项目应直接来源于企业,并随着企业需求和技术...
Java.util包是Java标准库中的核心包之一,它包含了大量用于日常编程的工具类和接口。这个包在Java 2版本中得到了显著增强,引入了许多重要的数据结构和算法,为Java程序员提供了更丰富的功能。 首先,Java.util包中...
【Java工程师面试知识点详解】 Java后台开发面试涵盖了广泛的知识点...这些知识点不仅是面试的重点,也是Java工程师日常工作中必须掌握的基础。持续学习和实践经验将有助于提升你的面试表现,增加获得理想工作的机会。
本项目集合了Java的日常练习小项目,旨在帮助开发者提升Java编程技能,理解面向对象设计原则,以及熟悉Java核心技术。 在Java开发中,基础概念如类、对象、封装、继承、多态是学习的重点。类是对象的蓝图,它定义了...
总结来说,Java 8 的 Lambda 表达式极大地提升了Java的表达力,使得代码更加简洁、易读。通过与Stream API的结合,开发者能够优雅地处理数据集合,提高了程序的可维护性和性能。学习和掌握Lambda表达式是Java 8...
在Java编程语言中,常用的类是开发者日常工作中不可或缺的基础组件,它们构成了Java Standard Edition (Java SE) 库的核心。本文将深入探讨一些关键的Java类,这些类在各种应用程序开发中都发挥着重要作用。 首先,...
根据提供的文件信息,以下是从标题、描述以及部分内容中提取并扩展的相关知识点: ### Java经典面试题汇总 #### 一、面向对象与面向过程的区别 ...这些知识点不仅适用于面试准备,也是日常开发中必不可少的基础知识。
(27条消息)某Java大佬在地表最强Java企业(阿里)面试总结_日常发呆-CSDN博客.webarchive
常用API部分,毕向东可能讲解了Java标准库中的常用类,如集合框架中的ArrayList、LinkedList、HashMap、HashSet等容器,以及String、Date、File等日常开发中常见的类。这些API的掌握能帮助开发者更高效地进行程序...
本文将围绕“java编码总结1”这一主题,结合标签“源码”和“工具”,深入探讨Java编码相关的知识。 首先,我们要理解的是字符集。在Java中,最常用的字符集是Unicode,它是一个包含几乎世界上所有字符的标准,如...
在日常的软件开发工作中,积累经验并进行总结是提升个人技能和团队效率的关键步骤。"日常开发的总结"这个主题涵盖了广泛的知识点,涉及到编程语言、设计模式、项目管理、版本控制、测试策略等多个方面。以下是对这些...
正如我们日常生活中打电话那样,网络编程并不像想象中那么复杂,只要掌握了基本原理,就能轻松入门。 在计算机网络的世界里,网络是由各种硬件设备连接而成,包括计算机、路由器和交换机等。尽管对硬件的深入理解...