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修饰的变量,无论是类属性、对象属性、形参还是局部变量,这些变量都是需要进行显示初始化。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010819416/article/details/53985244

Kotlin基本语法到Android实战开发

课程两个阶段: 第一阶段:Kotlin的基本语法,包括类和方法的定义及调用、数组、条件判断、循环控制、接口定义及实现、泛型等等; 第二阶段:用Kotlin创建Android项目,运用kotlin初始化界面、控件、网络请求及数据处理并展示等
  • 2017年11月03日 18:25

第二章:Java基本语法

第一部分2.1 关键字2.2 标识符2.3 变 量 基本数据类型 基本数据类型转换 2.4 运算符第二部分2.5程序流程控制2.6 数组...
  • u012195214
  • u012195214
  • 2017-02-06 20:59:41
  • 1217

java基本语法总结

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • zhangfengzhang123
  • zhangfengzhang123
  • 2017-02-28 16:36:27
  • 392

java 基础语法自己总结

Java数据类型:     基本数据类型  数值型 整数类型 byte short int long                   浮点类型 float  double  字符类型 ...
  • javald
  • javald
  • 2015-07-30 00:25:26
  • 1012

python 基础语法总结(一)

Python 标识符 在python里,标识符有字母、数字、下划线组成。 在python中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。 python中的标识符是...
  • suofeng1234
  • suofeng1234
  • 2016-07-01 16:25:45
  • 5213

Java 面向对象(基础) 知识点总结I

1、   类与对象的区别,类是对象的模板,对象是类的实例 2、   创建类的语法:class 类名称{},类中由属性及方法组成 3、   对象的创建语法:          · 声明对象:类名称 对象...
  • aikongmeng
  • aikongmeng
  • 2013-05-28 13:30:07
  • 2836

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

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

python基本语法概述

  • 2018年03月19日 14:20
  • 61KB
  • 下载

HTML基本语法总结

简介   HTML(Hyper Text Mark-up Language 超文本标记语言):不是编程语言,而是一种描述性的标记语言,用于描述网页中内容的显示方式,比如文字以什么颜色、大小来显示等,这...
  • ZHOUCHAOQIANG
  • ZHOUCHAOQIANG
  • 2014-06-25 20:38:31
  • 8254

java基础学习总结——面向对象

目录 一、面向过程的思想和面向对象的思想 二、简单理解面向对象 三、面向对象的设计思想 四、对象和类的概念 五、如何抽象出一个类? 六、类(对象)之间的关系 七、Java与面向对象 八、为什么使用面向...
  • hello_zhou
  • hello_zhou
  • 2016-05-19 21:22:48
  • 2130
收藏助手
不良信息举报
您举报文章:1 Java基本语法总结
举报原因:
原因补充:

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