Java 平台实现原理
java执行流程:跨java源代码(.java)—> 编译 —> java 字节码(.class)—> JVM执行。不同的平台上都需要运行JVM,以此实现跨平台.
我们可以从这张图片(源自网络)清晰的看出,不同平台的JVM的解释方法是不一样的。但是他们最终执行结果是一样的
JDK、JRE、JVM 有哪些区别
JDK : Java Development Kit. The JDK is a development environment for building applications, applets, and components using the Java programming language. It includes tools useful for developing and testing programs written in the java programming language and running on the java platform
JRE : Java Runtime Environment. The JRE supports to run java programs
JVM : Java Virtual Machine. The JVM is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode
Java 语言的特点
面向对象.
目前我们接触有两种编程思想:
- 面向过程(Procedure Oriented):比如C语言,当解决一个问题的时候,我们会把问题的处理方法拆分成一个个函数和数据。然后按照一定的顺序执行。方法执行完,问题得以解决。
- 面向对象编程(Object Oriented):比如Java,C++,当解决一个问题的时候,我们会把问题抽象成对象的概念,给这些对象赋予属性和方法,通过使用这些对象的属性和方法去解决问题。
平台无关
Write Once, Run any Where。
简单性
相对于其他的面向对象编程的语言,比如C++:
- Java 舍弃的重载,多继承。
- 不使用指针,加入了垃圾回收机制,解决了程序员需要管理内存的问题。
解释执行
Java 程序在 Java 平台运行时会被编译成字节码文件,然后可以在有 Java 环境的操作系统上运行。在运行文件时,Java 的解释器对这些字节码进行解释执行,执行过程中需要加入的类在连接阶段被载入到运行环境中。
多线程
Java 支持多线程“同时”执行,并提供多线程之间的同步机制。任何一个线程都有自己的run() 方法,要执行的方法就写在run()方法体内。
分布式
Java 语言支持 Internet 应用的开发,在 Java 的基本应用编程接口中就有一个网络应用编程接口,它提供了网络应用编程的类库,包括 URL、URLConnection、Socket 等。
健壮性
Java 的强类型机制、异常处理、垃圾回收机制等都是 Java 健壮性的重要保证。对指针的丢弃是 Java 的一大进步。另外,Java 的异常机制也是健壮性的一大体现。
高性能
Java 的高性能主要是相对其他高级脚本语言来说的,随着 JIT(Just in Time)的发展,Java 的运行速度也越来越高。
安全性
Java 通常被用在网络环境中,为此,Java 提供了一个安全机制以防止恶意代码的攻击。除了 Java 语言具有许多的安全特性以外,Java 还对通过网络下载的类增加一个安全防范机制,分配不同的名字空间以防替代本地的同名类,并包含安全管理机制。
Java 语言的众多特性使其在众多的编程语言中占有较大的市场份额,Java 语言对对象的支持和强大的 API 使得编程工作变得更加容易和快捷,大大降低了程序的开发成本。Java 的“一次编写,到处执行”正是它吸引众多商家和编程人员的一大优势。
Java 中如何获取明天此刻的时间
1 | //JDK1.8之前: |
Java 中如何跳出多重循环
这里我们可以使用以下两种方法跳出多重嵌套循环:
- 定义一个标号,使用break加标号的方式
1 | breakhere: for(int i=0; i<=100; i++) { |
使用全局变量终止循环
java1
2
3
4
5
6
7
8
9boolean flag = true;
for(int i=0;i<=100 & flag; i++){
for(int j=0;j<=100;j++){
if(j==10){
flag = false;
break;
}
}
}
char 变量不能存储一个中文汉字
char 是可以存储汉字的,因为Java使用的默认编码方式是Unicode,一个char类型占两个字节(16 bit)
关于 if else
知道为什么图一跟图二为什么会有不同的执行结果吗? 原因在于 else 匹配了距离它最近的if, 也就是说图二等价于图三。要想避免这种情况发生,我们应该使用语句块“{}“。
关于逻辑运算
我给出了一下例子来验证:
Java中的基本类型有哪些
java原始类型按值存储.意思就是当创建变量的时候,需要在内存中申请空间,系统会为变量分配相应类型大小的空间,分配的空间用来存储该数据的真实值而不是引用。
Java String class
它并不像char存储单个字符, String类型存储了一系列的Unicode字符 (UTF-16).
String 对象一旦创建出来一个字符串对象,它就永远不能修改。
java1
2
3
4
5//内存分配系统会为greeting 开辟一块空间存储"aries", greeting持有这块内存空间的地址(引用)
String greeting = "aries";
/*
* 当我们尝试修改这个字段的时候,内存分配系统会开辟另外一块新的空间来存储新的greeting值, 相应的 greeting 所指向的地址也是一个全新的地址*/
greeting = "hi ," + greetingString 比较:
”==“ : 仅仅使用与基础类型的比较。这种比较引用对象,例如String, 其比较时比的是两个对象在堆中的引用.
java1
2
3
4
5
6
7
8
9/* s1 == s2, print result as true。这里之所以为true是由于java编译器将源码中的字符串常量全部放置在一块内存区域中(文字池),当一个字符串声明时复制的时一个已经存在的字符串常量,编译器会将直接引用地址传给这个变量*/
String s1 = "Aries";
String s2 = "Aries";
System.out.println(s1==s2);
/* s1 != s2, print result as false。这里是因为运行期间的字符串操作会使两个变量的引用发生变化(在运行期间所得到的字符串内容,将不会放到所谓的"文字池"之中,然后如果有相同内容的变量引用相同内容,这样作的话需要每次字符串改变时需要检查它的内容,并再在文字池中查找看是否有相同内容的常量,太过浪费效率.)*/
s1 = s1 + "hi";
s2 = s2 + "hi";
System.out.println(s1==s2);“equals”: 所有对象的equals方法继承自Object类的方法,而String重写了equals方法的比较算法,它比较的是字符串的内容,即在堆中的了符序列
java1
2
3
4
5
6
7
8
9/* s1 equals s2, print result as true*/
String s1 = "Aries";
String s2 = "Aries";
System.out.println(s1.equals(s2));
/* s1 equals s2, print result as true*/
s1 = s1 + "hi";
s2 = s2 + "hi";
System.out.println(s1.equals(s2));
















