`
wu_quanyin
  • 浏览: 204659 次
  • 性别: Icon_minigender_1
  • 来自: 福建省
社区版块
存档分类
最新评论

JAVA基础---知识积累

    博客分类:
  • J2SE
阅读更多

 

一,transient

 在序列化(ObjectInputStream)时就是可以将对象序列化进物理空间上,在这个类中若设有transient的变量,序列化时不被存储,对象还原时,也不会有这个变量(作用是安全问题,有些不希望把类里面所有的东西都能存储)。

  transient int a;

 

二,volatile:

 Java 语言中 volatile 变量可以被看作是一种 “程度较轻 synchronized”;与 synchronized 块相比,volatile 变量所需编码较少,并且运行时开销也较少,但是它所能实现功能也仅是 synchronized 一部分,在多个线程共享这个变量时,能获取到最新的修改值。

valatile int a;


三,strictfp:

    strictfp修饰类或方法,可以确保浮点运算(以及所有切断)正如早期的Java版本那样准确。切断只影响某些操作的指数。当一个类被strictfp修饰,所有的方法自动被strictfp修饰。
strictfp的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。
你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字,例如下面的代码:

1. 合法的使用关键字strictfp

  1. strictfp interface A {}   
  2.   
  3. public strictfp class FpDemo1 {   
  4.     strictfp void f() {}   
  5. }  


2. 错误的使用方法

  1. interface A {   
  2.     strictfp void f();   
  3. }   
  4.   
  5. public class FpDemo2 {   
  6.     strictfp FpDemo2() {}   
  7. }  


一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规范的。例如一个类被声明为strictfp,那么该类中所有的方法都是strictfp的。
四,Native 

 

Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。

可以将native方法比作Java程序同C程序的接口,其实现步骤:

1、在Java中声明native()方法,然后编译;

2、用javah产生一个.h文件;

3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);

4、将第三步的.cpp文件编译成动态链接库文件;

5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。

五,java.lang.ref(引用)

 Java中有四种类型的引用,按照强弱关系依次为:Strong Reference>SoftReference>WeakReference> PhantomReference

 

   1,强引用(Strong Reference):用new创建的对象,只有在没有句柄指向该对象时,内存回收时,才进行回收

   2,软引用(SoftReference):保证在虚拟机抛出 OutOfMemoryError 之前已经被清除

    直要到 JVM 内存不足时且 没有 Direct Reference 时才会清除,SoftReference 是用来设计 object-cache 之              的。 SoftReference 不但可以把对象 cache 起来,也不会造成内存不足的错误  (OutOfMemoryError)     

  此类的直接实例可用于实现简单缓存;该类或其派生的子类还可用于更大型的数据结构,以实现更复杂的缓存。只要软引用的指示对象是强可到达对象,即正在实际使用的对象,就不会清除软引用。例如,通过保持最近使用的项的强指示对象,并由垃圾回收器决定是否放弃剩余的项,复杂的缓存可以防止放弃最近使用的项。

 

   3,弱引用(WeakReference):在垃圾回收时,对其进行回收

WeakHashMap:WeakHashMap 中的每个键对象间接地存储为一个弱引用的指示对象。因此,不管是在映射内还是在      映射之外,只有在垃圾回收器清除某个键的弱引用之后,该键才会自动移除。

 

   4,虚引用(PhantomReference):

与软引用和弱引用不同,虚引用在加入队列时并没有通过垃圾回收器自动清除。通过虚引用可到达的对象将仍然保持原状,直到所有这类引用都被清除,或者它们都变得不可到达。

 

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;

class MyObject {  
    private String id;  
  
    public MyObject(String id) {  
        this.id = id;  
    }  
  
    public String toString() {  
        return id;  
    }  
  
    protected void finalize() {  
        System.out.println("回收对象:" + id);  
    }  
}  
  
public class TestReferences {  
    public static void main(String[] args) {  
        // 创建强引用  
        MyObject ref = new MyObject("Hard");  
        System.out.println(ref);  
        ref = null;  
        System.gc();  
        System.out.println(ref);  
        System.out.println("------------------------------------------------------");
  
        // 创建软引用  ,只有在内存不够时才回收
        SoftReference<MyObject> softRef = new SoftReference<MyObject>(  
                new MyObject("SoftReference MyObject"));  
        System.out.println(softRef.get());  
        System.gc();  
        System.out.println(softRef.get());  
        System.out.println("------------------------------------------------------");
  
        // 创建弱引用  ,垃圾回收时,一定会被回收
        WeakReference<MyObject> weakRef = new WeakReference<MyObject>(  
                new MyObject("WeakReference MyObject"));  
        System.out.println("before gc —— " + weakRef.get());  
        System.gc();  
        System.out.println("after gc —— " + weakRef.get());  
        System.out.println("------------------------------------------------------");
  
        // 创建虚引用  
        ReferenceQueue<MyObject> rq = new ReferenceQueue<MyObject>();  
        PhantomReference<MyObject> phantomRef = new PhantomReference<MyObject>(  
                new MyObject("ReferenceQueue MyObject"), rq);  
        System.out.println("before gc —— " + phantomRef.get());  
        System.gc();  
        System.out.println("after gc —— " + phantomRef.get());  
    }  
} 

 Hard

null

------------------------------------------------------

回收对象:Hard----》这个表明,system.gc垃圾回收没有直接回收,而是加大权重

SoftReference MyObject

SoftReference MyObject

------------------------------------------------------

before gc —— WeakReference MyObject

回收对象:WeakReference MyObject

after gc —— null

------------------------------------------------------

before gc —— null

回收对象:ReferenceQueue MyObject

after gc —— null


    六,正则表达式

 //以下了解group与find的区别。。。

.*,[\\s\\S],[\\w\\W]等代表任意字符

 

 
String typeregex="\\s*(\\w+)\\s+[\\s\\S]*from\\s+(\\w+)[\\s\\S]*";
//截取select语句
Pattern pattern = Pattern.compile(typeregex, Pattern.CASE_INSENSITIVE);//提供了不区分大小写,或其他的忽略行等...模式
Matcher m = pattern.matcher(resolvedSQL);
if (m.groupCount() > 0) {
	while (m.find()) {//这个是去匹配sql时,出现了几对像以上一样的模式
		list.add(m.group(2) + "|" + m.group(1));
    //这里的group(1|2)是与以上的括号相对应的,可以指定
   }
}

   String typeregex="\\s+join\\s+(\\w+)\\s+";

String resolvedSQL="select d.fguid,b.fguid from D_HR_QXSQQX as d left join d_hr_remove as b on d.fguid=b.fguid left join D_HR_QXSQQX as ss on ";
//如以上所示,这个是用来查找所有join后面的表名称,当要匹配中查找出多种情况时,不能用.*,[\\w\\W]*等,因为这样的话,只能匹配出最后一个
如String typeregex=".*\\s+join\\s+(\\w+)\\s+";

 

 七,实现List1与List2间的拷贝

 

  1,  list1.addAll(list2)进行拷贝

  2,在使用Collections.copy(destList,srcList)时,要注意destList一定要实例化好空间给他,

 

	
List<String> list1=new ArrayList<String>();
list1.add("mm");
List<String> list2=new ArrayList<String>(Arrays.asList(new String[10]));//实例化空间,因为刚创建时,打印getSize()为0
Collections.copy(list2, list1);
 
八,检查异常(Exception)与非检查异常(RuntimeException)
   检查异常:当使用api的程序员能够恢复错误时,用这种异常捕获
      如:数据库的连接操作--用户名,密码等由用户输入,用检查异常让使用者程序员自忆处理,自己捕获,并能自己恢复修改
   非检查异常:一般前提是使用者程序员的违例操作,如使用者传进来的对象是一个空指针,程序立即中断不会往下执行,执行下去没有意思,所以称为运行时异常
九,乱码问题,在对流进行操作时,出现了乱码问题
			InputStreamReader inputStreamReader = new InputStreamReader(
					new FileInputStream(schedulerIndexFile), "UTF-8");
			BufferedReader reader = new BufferedReader(inputStreamReader);
			StringBuffer stringBuffer = new StringBuffer();
			String s = null;
			while ((s = reader.readLine()) != null) {
				stringBuffer.append(s);
				stringBuffer.append('\n');
			}
			String tempString = stringBuffer.toString();
			tempString = tempString.replaceAll("xmlns=\"\"", "");
			OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
					new FileOutputStream(schedulerIndexFile), "UTF-8");
			BufferedWriter writer = new BufferedWriter(outputStreamWriter);
			writer.write(tempString);
			writer.flush();
			writer.close();
			reader.close();

		
 

十,JVM内存设置

 java -Xmx4096 -version

java -Xmx 4095 -version

 

 

 

  • 大小: 15.9 KB
0
1
分享到:
评论

相关推荐

    Java基础语法)教案

    而后两大块内容知识点比较多,不需要大家强行记住,随着知识点的不断学习,和代码量的积累,慢慢的就记住了,不用死记硬背。好了,接下来,我们先来学习今天的第一部分内容:Java开发环境搭建。(切到下页PPT)

    【Java语言程序设计教程】Java课程设计-教学大纲.docx

    使学生能够综合应用JAVA基础知识和基础方法,编写出高效率的应用程序,体会软件设计全过程,提高软件设计能力,为今后进行系统软件和应用软件的开发研究打下坚实的基础,培养刻苦专研和严谨的编程精神,为今后从事...

    JAVA容器知识积累

    JAVA容器基础知识,分析及使用方法,知识总结,数组,List,set,Map

    java基础知识,面试必备啊

    关于java基础知识的资源,n次面试笔试积累的精华啊。

    Java综合技能知识库

    Java面向对象、Java基础类库、JDBC数据库访问、Web编程Jsp&Servlet、Hibernate持久层、iBatis持久层、Structs界面控制层、JSF界面控制层、Spring应用框架、Ejb、WebService技术、J2EE模式等其他Java相关开发技能汇总...

    mavenjava源码-notebook:Java自学系列知识,包含Java基础、源码阅读、JVM、MySQL、Spring相关等

    Java自学系列知识 项目起源于自学Java过程中所做的300+系列笔记,点点滴滴的积累成就了本项目的体系结构... 随着我学习的不断深入,项目也在不断更新、完善中... 非常欢迎大家参与共建~~ 关于作者 就读于华南理工...

    IDEAPractice:Java练习-Java基础知识,面试题,小演示,长期积累| IntelliJ IDEA + Maven +Tomcat

    IDEAP实践 idea上的一些练习 src / main 这个是一些平时的小练习 各种简单的例子集合 ssm_study 开发工具:IntelliJ IDEA 专家:3.3.9 jdk:1.8 Spring:4.1.7 Mybatis:3.3.0 这个项目只是一个简单的建造SSM...

    java基础知识点

    这是我在学习的过程中,自己积累的一些,虽然不是很多,但是还是想和大家一起学习

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    Java代码积累:并发 设计模式 数据结构 使用容器 实用 类 基础知识 并发性 演示线程的生命周期 生产者-消费者 设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者...

    PTA_2022java测试1-基础程序设计&&测试2-面向对象_个人错题汇总

    PTA_2022java测试1-基础程序设计&&测试2-面向对象_个人错题汇总 PTA上的两个小测试,虽然题都是自己做的,但是对于结果并不算满意,简单做一下错题汇总。 “错而能改,善莫大焉。”不要沉溺于自己已经学会的或者熟练...

    java2核心技术第I卷.基础知识(中文PDF完整版)

    全书历经12年多的技术积累与提炼,对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量实用价值极高的示例,可以帮助读者充分理解Java语言以及Java类库的相关特性,使你快速升级到Java SE 6平台,从而提高编程...

    Java JDK 5.0 经典入门

    当然,要想成为熟练的Java程序员,所需的基础知识会略有增多,但都不困难。只要有进取心和一点点对编程的领悟力,你就可以得到足够多的知识,成为一个高效的Java程序员。本书提供了规范化的学习方法,可帮助你...

    java j2se基础知识总结

    这是本人自己学习的积累,希望对大家有所帮助

    java8源码-Blog:个人博客,知识积累!

    Java基础 多线程与并发编程 算法数据结构 SpringCloud Zookeeper Dubbo NoSQL MongoDB MQ ActiveMQ RabbitMQ RocketMQ Kafka 分布式事务 Tomcat Docker MySQL Jenkins Maven Gradle Git Swagger Linux 读书清单 ...

    java经典编程300例

    《Java学习路线图•Java经典编程300例》以基础知识为框架,介绍了各部分知识所对应的常用开发实例,并进行透彻解析。《Java学习路线图•Java经典编程300例》内容包括java语言概述、eclipse开发工具、java语言基础、...

    Java核心技术_第八版(英文原版).part1

    Fundamentals, 8th Edition--《Java核心技术——基础知识》,PDF格式 二、Core Java. Volume II. Fundamentals, 8th Edition--《Java核心技术——高级特性》,chm格式 两部分均为高清晰非影印版,并附含全部源代码...

    Fundamental 2D Game Programming with Java by Timothy M. Wright

    本书使用Java教授基础知识,包括应用编程、全屏游戏、输入处理、矩阵变换、基础物理、相交测试、碰撞检测等。 本书包含3个部分: 基础知识——构建一个简单的原型游戏; 提高技能——进行优化,以创建令人满意的游戏...

    java笔记都是我自己学习的过程中积累下的知识点

    适合java 刚开始学的人,这是我自己做的笔记,分享给大家!

    JAVA经典编程300例

    《Java学习路线图•Java经典编程300例》以基础知识为框架,介绍了各部分知识所对应的常用开发实例,并进行透彻解析。《Java学习路线图•Java经典编程300例》内容包括java语言概述、eclipse开发工具、java语言基础、...

Global site tag (gtag.js) - Google Analytics