1 Java基本语法总结

原创 2017年01月03日 00:42:27

一 基本语法

1 值传递 引用传递

2 浅拷贝 深拷贝

浅拷贝:Object类提供的方法clone只是拷贝本对象,其对象内部的数组、引用对象等都不拷贝,还是指向原生对象的内部元素地址。

3 序列化
持久化对象:使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。
除了持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。
只要一个类实现了java.io.Serializable接口,那么它就可以被序列化。

4 堆 栈
栈 : 存放基本类型的变量数据和对象的引用,栈中的数据大小和生命周期是可以确定的,栈中的对象可以共享,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
堆:存放所有new出来的对象,堆中的对象由垃圾回收器负责回收,因此大小和生命周期不需要确定,堆中的对象不可以共享,要在运行时动态分配内存,存取速度较慢
常量池:存放字符串常量和基本类型常量(public static final)。

字符串的引用存储在栈中,如果编译器已经创建好(直接用双引号定义的)就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。

*new String(“China”)
对于通过new产生一个字符串时,会先去常量池中检查是否已经有了“china”对象,如果没有则在常量池中创建一个此字符串对象,然后在堆中再创建一个常量池中此“china”对象的拷贝对象。
?String s = new String(“xyz”);产生几个对象?
一个或两个,如果常量池中没有“xyz”,就是两个。

局部变量的数据存在于栈内存中,成员变量存储在堆中的对象里面。

5 java 运行时数据区域
java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。

1) 程序计数器(线程私有)
可以看作是当前线程所执行的字节码的行号指示器。

2)Java虚拟机栈(线程私有)
虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直到执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
局部变量表存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用和returnAddress类型(指向了一条字节码指令的地址)。其中64位长度的long和double类型的数据会占用2个局部变量空间,其余的数据类型只占用1个。

3)本地方法栈(线程私有)
虚拟机栈为虚拟机执行Java方法服务,
本地方法栈为虚拟机使用到的Native方法服务,其他类似。

4)Java堆(线程共享)
所有的对象实例以及数组都要在堆上分配。
Java堆是垃圾回收器管理的主要区域。

5)方法区(线程共享)
用于存储已被虚拟机加载的类信息、常量、静态变量、即是编译器编译后的代码等数据。

6)运行时常量池
是方法区的一部分。
class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分将在类加载后进入方法区的运行时常量池中存放。

6 Object类总结
1)类构造器public Object();
在类定义过程中,对于未定义构造函数的类,默认会有一个无参数的构造函数。

2)private static native void registerNatives()
java中,用native关键字修饰的函数表明该方法的实现并不是在Java中去完成,而是由c/c++完成,并被编译成了.dll,由java去调用。用native修饰,即表示操作系统需要提供此方法,java本身需要使用。
registerNatives()方法作用是将C/C++中的方法映射到java中的native方法,实现方法命名的解耦。

3)protected native Object clone() throws CloneNotSupportedException
clone函数返回的是一个引用,指向的是新的clone出来的对象,此对象与原对象分别占用不用的堆空间。
Cloneable接口仅是一个表示接口,接口本身不包含任何方法,用来指示Object.clone()可以合法的被子类引用所调用。

4)public final native Class

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + id;
    //31*result = (result<<5)-result。之所以选择31,是因为左移运算和减运算计算效率远大于乘法运算。当然,也可以选择其他数字。
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    User other = (User) obj;
    if (id != other.id)
        return false;
    if (name == null) {
        if (other.name != null)
            return false;
    } else if (!name.equals(other.name))
        return false;
    return true;
}

7)public String toString();
Object的toString()是由对象的类型和其哈希码唯一确定,同一类型但不相等的两个对象分别调用toString()方法返回的结果可能相同

8)wait(…)/notify()/notifyAll()
这几个方法主要用于java多线程之间的协作。
wait():调用此方法所在的当前线程等待,直到在其他线程上调用此方法的主调(某一对象)的notify()/notifyAll()方法。
wait(long timeout)/wait(long timeout,int nanos):调用此方法所在的当前线程等待,直到在其他线程上调用此方法的主调(某一对象)的notisfy()/notisfyAll()方法,或超过指定的超时时间量。
nofity()/notifyAll():唤醒在此对象监视器上等待的单个线程/所有线程。

9)protected void finalize();
Object类中finalize方法被定义成一个空方法。表明Java中每一个对象都将具有finalize这种行为,在JVM准备对此对象所占用的内存空间进行垃圾回收前,将被调用。

7 final修饰符

1)final修饰类
final修饰类表示此类不能被继承。

2)final修饰方法
表示此方法不能被重写。

3)final修饰变量
一旦定义了final变量并在首次为其显示初始化后,final修饰的变量值不可被改变。
final修饰的变量,无论是类属性、对象属性、形参还是局部变量,这些变量都是需要进行显示初始化。

版权声明:本文为博主原创文章,未经博主允许不得转载。

java web学习心得与总结(1)——jsp基本语法

java web自学快三个月了,前面的基础知识都忘了,以后每天写一篇博客总结一下. 或者关注下我的新浪微博:Mr翅膀君 一.page指令 1.language属性 2.extends属性 该属...

JSP基本语法总结(1)---(12)

  • 2011年02月23日 17:03
  • 23KB
  • 下载

java基本语法自学 练习题1

1.java的优势  java有纯面向对象,继承,封装,多态,跨平台,自动垃圾回收等,并且能够让程序的难度得到有效的控制。 2.什么事环境变量? 环境变量就是操作系统中应用程序获得一些运行参数的...

java基础--1.基本语法 - 3.运算符

1      概述   2      分类 2.1  算术运算符 注意:          如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数则不可忽略。此...

JAVA从零单排1-----搭建开发环境、基本语法

JAVA相关介绍     Java语言是一种特殊的高级语言,Java程序需要先经过编译,在经过解释两个步骤。Java经过编译之后不会产生机器码,而是生成一种与平台无关的字节码(*.class文件)。这...

Java复习笔记[1] —— 基本语法

基本语法: Java语言标识符区分大小写 类名应使用大写字母开头,使用驼峰命名法 方法名应使用小写字母开头,使用驼峰命名法 一个源文件中只能有一个public类,一个源文件可以有多个非pu...

Java核心基础(1) 基本语法

Java基本语法 1、一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制 可以有多个类,但只能有一个 public 的类,并且 public 的类名必须与文件名相一 致。...
  • Elenal
  • Elenal
  • 2016年05月08日 22:12
  • 1618

黑马程序员 JavaSE-02 Java基础语法1:基本概念

Java基础语法关键字关键字概述 被Java语言赋予特定含义的单词 关键字特点 组成关键字的字母全部小写 关键字注意事项 goto和const作为保留字存在,目前并不使用关键字列表用于定义数...

Java学习-数组的定义及其基本方法语法(1)

一维数组的定义,声明,初始化,和它的常用操作

JAVA入门笔记1:基本语法、常量、变量

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1 Java基本语法总结
举报原因:
原因补充:

(最多只允许输入30个字)