Java的3大版本
-
Java有三大版本,Java SE, Java ME, Java EE
-
Java SE(Java Platform. Standard Edition, Java平台标准版) 是Java ME,Java EE的编程基础,可以用来开发一些桌面应用,游戏
-
Java ME Java平台微型版。 主要应用在移动设备和嵌入式设备,比如手机,PDA,电视机顶盒等
-
Java EE Java平台企业版,主要用于企业级应用,比如电子商务网站,后台管理系统。 属于后台开发的范畴
C\C++的跨平台原理
C\C++的源代码(.c,cpp文件)
Mac: 源文件编译成Mach-O格式的文件(机器指令已经存储在Mach-O文件中),然后再在Mac上运行
Windows:源文件编译成PE格式的文件,然后运行在windows上
Linux: 源文件编译成ELF格式的文件,然后运行在Linux上

使用平台相关的编译器生成对应平台的可执行文件 也就是需要多次编译,针对不同平台编译出对应的可执行文件
Java的跨平台原理
JVM:(Java Virtual Machine):Java虚拟机

在Mac/Windows/Linux 上安装JVM
源文件(,java文件)编译成字节码(,class文件),然后各平台上的JVM会对字节码进行解析,解析成机器指令,然后程序就可以运行起来了
所以Java的跨平台是一次编译,到处运行,编译出的是跟平台无关的字节码文件
Java为何开发效率高?
-
跨平台
- 不用操心编译器
-
垃圾回收机制
- 不用手动管理内存
- 不用担心内存泄漏
- 不用担心循环引用
-
历史悠久,强大的技术生态圈
- 各种成熟强大的第三方库,辅助工具
Java开发必备
两个软件:JDK, JRE
JDK:(Java Development Kit) java开发工具包,提供了开发中用到的各种常用工具
JRE: (Java Runtime Environment)java运行环境,将开发完的java程序运行到JVM上
Java语法须知
- 每一条语句都必须以分号;结尾
- Java语言中的方法就是其他语言中的函数
- 程序的入口时main方法,没有main方法Java程序无法启动
- 方法必须包含在class内部,先有class, 再有方法
- public class的名称必须要和文件名一致
Java对象
分为基本数据类型和引用类型
基本数据类型:byte char short int long float double boolean
引用类型: 除了基本类型之外的类型, 数组,对象
类型转换
-
拓宽基本类型转换
数据范围小的转为数据范围大的,可以自动转换
byte b = 12;
// byte转为short
short s = b;
// short转为int
int i1 = s;
-
窄化基本类型转换: 数据范围大的转为数据范围小的,可能会丢失精度,需要强制转换
- short 转byte,char short和char都是两个字节,但他们互相转化的时候 java中规定了他们转换的时候也要强制转换
- char 转 byte, short
- int 转 byte, short, char
- long转byte, short, char,int
- folat转byte,short, char, int, long
- double转byte,short, char,int, long, float
这几种需要强制转换
short s = 512;
char c = (char) s;
byte b = (byte) c;
double d = 1.23;
float f = (float) d;
int i = (int) d;
Java数组
数组中存放的并不是对象的内存,而是对象的地址,基于C语言都是这样
数组元素存储在堆空间,指针存储在栈空间
方法
参数传递
值类型是值传递,对象是引用传递,传递的是地址
方法签名
方法签名由方法名和参数类型组成, 不包括返回值
同一个类中,不能定义两个方法签名一样的方法
方法的重载(Overload)
Java的方法支持方法重载:方法名相同,方法签名不同。
也就是方法名相同,参数类型/个数不同
栈帧(frame)
栈帧可以理解为分配给方法的栈空间,
栈帧随着方法的调用而创建,方法的结束而销毁。存储了方法的局部变量信息
Java的内存划分
java的内存划分与c/c++略有不同
-
PC寄存器(Program Counter register):存储java虚拟机当前执行的字节码指令的地址
-
Java虚拟机栈(Java Virtual Machine Stack): 存储栈帧
-
堆(Heap):存储GC管理对象,也就是我们new出来的对象
-
方法区(Method Area):存储每一个类的结构信息(比如字段(成员变量名称)和方法信息,构造方法和普通方法的字节码)
-
本地方法栈(Native Method Stack): 用来支持本地方法的调用,比如C语言编写的方法
对象
java中的对象都是new出来的,所有对象的内存都是在堆空间,所有保存对象的变量都是引用类型
Java运行时环境有个垃圾回收机制(GC),会自动回收不再使用的内存。
当对象没有任何引用指向时,会被GC回收掉内存。
构造函数
构造函数没有返回值和返回类型,方法名必须和类名一致。
构造函数可以调用另一个构造函数
public class Dog {
public int age;
public double weight;
public String name;
public double price;
// 构造函数也是在方法区
public Dog(String name, int age, double weight) {
this.name = name;
this.age = age;
this.weight = weight;
}
public Dog(){
// 调用另一个构造器
this("", 0, 0);
}
// 存储在方法区
public void run() {
System.out.println(price + "_run") ;
}
// 存储在方法区
public void eat() {
System.out.println(price + "_eat");
}
}
this
的本质是一个隐藏的,位置最靠前的方法参数(面向对象编程的语言基本都是如此)
方法都是存储在方法区,而不是存储在每个对象所在的堆空间,也就是说方法只会存储一份,不是对每个对象的方法都存储,这样太浪费空间。
包(package)
Java中的包就是其他语言中的命名空间,包的本质是文件夹,常见的作用
- 将不同的类进行组织管理,访问控制
- 解决命名冲突
命名建议
为了保证包名的唯一性,一般使用公司的域名。
全小写,以避免与某些类名或者接口名冲突
类的第一句代码必须使用 package
声明自己属于哪个包
package urils;
public class StringUtils {
}
java中没有别名的概念
网友评论