【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

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语法基础之运算符

运算符是一种特殊符号,用以表示数据的运算、赋值和比较。运算符共分为算术运算符、赋值运算符、比较运算符、逻辑运算符、移位运算符。 一、算术运算符 算术运算符的功能是做各种算术运算,其操作数可以是字符...

java基本语法

                     Java语言发展史 课程大纲: Java语言发展史; 1、sun公司1995年推出,2009年Oracle公司收购s...

java基础之基本语法

JAVA的基本语法 一、程序框架 publicclassHelloWorld { publicstaticvoidmain(String[] args) ...

Java基本语法-----java函数

函数的概述 发现不断进行加法运算,为了提高代码的复用性,就把该功能独立封装成一段独立的小程序,当下次需要执行加法运算的时候,就可以直接调用这个段小程序即可,那么这种封装形形式的具体表现形式则称作函...

java基本语法总结

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

java基本语法

1 变量按所属的数据类型划分:基本数据类型变量和引用数据类型变量基本数据类型:关键字 字节Boolean 1 byte 1 Short 2 Int 4Long 8Char 2Float 4Doub...

java程序员学C#基本语法两个小时搞定(对比学习)

对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想。 1.引包   using System;java用im...
  • com360
  • com360
  • 2012-11-20 01:19
  • 8547

Java基础语法

一、标识符及字符集 Java语言规定标识符是以字母、下划线"_"或美元符号"$"开始,随后可跟数字、字母、下划线或美元符号的字符序列。Java标识符大小写敏感,没有长度限制,可以为标识符取任意长...

第二章:Java基本语法

第一部分2.1 关键字2.2 标识符2.3 变 量 基本数据类型 基本数据类型转换 2.4 运算符第二部分2.5程序流程控制2.6 数组

JAVA语法基础之变量和基本数据类型

一、变量的概念 变量是Java程序中的一个基本存储单元。变量是一个标识符、类型及一个可选初始值的组合定义。所有的变量都有一个作用域,即变量在某一区域有效。 基本的变量声明方式如下: type i...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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