各种语言的简介
现在主要的语言有:C,C++,JAVA,GO,C#,SHELL,PYTHON,PHP
每种语言都能实现对方的全部功能,但是开发效率不同即实现同一目标的代码量不同
JAVA和GO擅长超大系统的开发,如服务器集群,由于其提供的类、库比较多,所有所需代码很少
硬盘
内存
基础语言汇编与C语言
各种语言在执行时都会翻译成C语言,各种语言所安装的环境就是用来翻译的
进程
块
Java所占内存
方法区
package com;
public class Person {
public int age;//非静态属性
public int height;//非静态属性
public String name;//非静态属性
public static int flag;//静态属性
public void m1() {//非静态方法
}
public void m2() {//非静态方法
}
public static void m3() {//静态方法
}
}
package com;
public class Test {
public static void main(String[] args) {
m1();
m2();
}
public static void m1() {
m2();
}
public static void m2() {
m3();
}
public static void m3() {
}
public static void m4() {
}
}
package com;
public class Car {
public float price;
public int speed;
}
类常量池
静态常量池
栈
程序计数器决定T.m3执行完毕后开始出栈T.m3→T.m2→T.m1
程序计数器决定T.m3执行完毕后开始出栈T.m3→T.m2→T.main
Java的基本类型
int a = 2; // 0000000000000000000000000000010
引用类型
可以拆分成基本类型,所占大小不固定,每次值发生改变申请新的一块内存
在Java中如果一块空间没有被任何变量指向,则会被清理(自动垃圾回收机制,有一定延迟)
(在C语言中不会清理此内存,随后没有指针能指向该内存,发生内存泄漏)
package com;
public class Test {
public static void main(String[] args) {
int a = 111;
int b = 234;
short c = 67;
int[] aa = {2,3,4};
aa = new int[]{1,1,12,3,3};
Person x1 = new Person();
Person x2 = new Person();
Person x3 = new Person();
x1.age = 23;
x1.height = 140;
x1.name = "aaa";
x1.name = "aassss";
m1(x1);
}
public static void m1(Person x) {
m2();
x.name = "asd";
}
public static void m2() {
m3();
}
public static void m3() {
int a = 10;
int b = 23;
a = 45; b = 33;
if(a <b) {
int c = 89;
if(c >a +b) {
int d = 10;
d = 99; c = 66; a = 67;
}
}
}
public static void m4() {
}
}
当执行到int[] aa = {2,3,4};时,要将数据放入堆中,假设地址为111
随后执行aa = new int[]{1,1,12,3,3};aa指向的地址改变,原地址将会被回收
Person也是引用类型,依次执行相同操作(其中的flag与m3已经储存在了静态常量池中)