Java 是由Sun Microsystems 公司于1995年5月推出的高级程序设计语言。
Java 可运行于多个平台,如Windows,Mac OS及其他多种UNIX版本的系统。
移动操作系统 Android 大部分的代码采用 Java 编程语言编程。
我的第一个JAVA程序
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World");
}
}
首先我们要知道java的原理以及最最最最基础的知识,为了自己更好的理解和学习,也为了和别人探讨的时候,也知道人家在说什么,尤其是在面试的时候,你觉得呢?
好了,接下来的日子里,我会不定期的进行更新java 的基础知识,希望我们一起学习,一起成长,喜欢是一切事物的成功的开始,要么你目标明确, 为了钱, 要么为了你的梦想,你的爱。
好啦,我们要开始学习了哦,首先,我们要知道的知识如下:
1、阐述什么是JVM、JRE和JDK,以及他们的区别
JDK:(Java Development Kit )Java开发工具包,Java开发必备
JRE:(Java Runtime Environment)Java运行环境,运行java程序必备
JVM:(Java Virtual Machine) Java虚拟机
JDK包含JRE,JRE包含JVM
2、Java 标识符命名规则
使用英文字母、数字、_ 、$、但是不能以数字开头,不能使用Java关键字和保留字
在Java中大小写敏感,多个英文单词组成的时候第二个单词开始的单词首字母要大写,其他单词的首字母也要大写,
变量和方法的首字母要小写
3、java基本数据类型并写出在内存中占用空间大小
整数类型:byte 1个字节,8位二进制位
short 2个字节,16位二进制位
int 4个字节,32位二进制位
long 8个字节,64位二进制位
浮点类型:double 8个字节,64位二进制位
float 4个字节,32位二进制位
字符类型:char 2个字节,16为二进制位
布尔类型:Boolean 1个字节,8位二进制位
基本数据类型转换
原始数据烈性,简单类型,基本类型都是一个含义;分为定点类型和浮点类型
(基本类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数)
符合类型,扩展类型,复杂类型,引用类型都是一个含义;
(引用数据类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。)
浮点类型,实数,实型都是一个含义
逻辑性,布尔型都是一个含义
(定点:定点的意思是把小数点定在末尾,小数点后没有数字的数据,Java中通常把他们称为整数;常量:就是直接的值;变量:防止常量的容器,除了放置常量之外,也可以给变量一个运算式,变量中的值是可变的;)
八种基本数据类型除了布尔型之外剩下的7种类型之间都可以进行相互转化
小容量向大容量转换,称为自动类型转换,不同类型的大小排序如下:
byte < short (char) < int < long < float < double
注:任何浮点类型不管占用多少字节,都比整数类型的容量大
char和short可以表示的种类数量相同,但是char可以取到更大的正整数(因为short为整型,正负值的个数相同,但是char为字符型,只有正值,所以char可以表示更多的正值)
大容量转换成小容量,要进行 【强制类型转换】 ,要加强制类型转换符,程序才能编译通过,但是在运行阶段可能导致精度损失,所以应该谨慎使用强制类型转换功能。
当整数字面值没有超出byte,short,char的取值范围,可以直接赋值给byte,short,char
byte,short,char混合运算的时候,先转换成int类型,再进行运算
多种数据类型混合运算的时候,先转成容量最大的那种类型,再进行运算
4、引用数据类型:类,接口,数组
5、Java数据类型在内存中的存储
1)基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的内存栈上的, 数据本身的值,就是存储在栈空间里面,而Java语言里面八种数据类型是这种存储模型;
2)引用类型的存储原理:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存站上,而对象本身额的值存储在内存堆上的;
6、Java语言的三种技术架构
J2EE:企业版
是为开发企业环境下的应用程序提供的一套解决方案。
该技术体系中包含的技术如Servlet、Jsp等,主要针对于Web应用程序开发。
J2SE:标准版
是位开发普通桌面和商务应用程序提供的解决方案。
该技术 体系是其他两者的基础,可以完成一些桌面应用程序的开发。
比如 Java版的扫雷
J2ME:小型版
是位开发电子消费产品和嵌入式设备提供的解决方案。
该技术体系主要应用与小型电子消费类产品,如手机中的应用程序等。
7、Java内存划分的5个部分:
1)栈 stack :储存局部变量
存放的都是方法重的局部变量,方法的运行一定要在栈当中,
局部变量:方法中的参数,或者方法{}内部的变量(方法定义中的,或者方法声明中的)
作用域:一旦超出作用域,立刻从栈内存当中小时
- 特点:栈内存的数据用完就释放。
2)堆 heap:储存new出来的东西
堆内存里面的东西都有一个地址值,16进制
对内存里面的数据,都是默认值,规则:如果是整数,默认位0;浮点数默认0.0,字符\u0000,布尔false ,引用类型默认null。
特点:堆内存使用完就变成垃圾,但是并没有立即回收,会有垃圾回收器空闲的时候回收。
3)方法区method area :存储.class相关的信息,包含方法的信息(一个对象运行的过程)
a)程序从main方法中进入,运行到phone p时,在栈中开辟了一个空间,
b)new phone()时,在堆中开了一个内存空间,此时会有一个内存值位0x0001;此时,会找到对应的phone的class文件,发现有三个变量和三个方法,于是将三个成员变量放在了堆中,但是此时的值为默认值,注意,再放方法去里也有一个地址值,假设为0x001,可以认为在堆中也有一个位置,在堆中的位置,可以找到方法区中相对应的方法;
c)继续运行,p.brand = "三星";将三星赋值给 p.brand,通过栈中的 p 找到了堆中的 brand,此时的 null 值变为“三星”。剩下的类似;
d)当运行到 p.call("乔布斯") 时,通过栈中的 p 找到堆中存在的方法区的内存地址,从而指引到方法区中的 Phone.class 中的方法。从而将 call 方法加载到栈内存中,注意:当执行完毕后,call 方法就从栈内存中消失!剩余的如上。
e)最后,main 方法消失!
4)本地方法栈 native method stack:与操作系统相关
5)寄存器 pc register:与CPU相关
8、Java基本类型取值范围计算
从计算机组成原理的角度可以解释:
byte在计算机中是占8个字节的, 而且byte 是有符号整形,用二进制表示时候最高位为符号位 0代表正数 1代表负数。
最大值:127 即2的7次方减去1;最小值: 即2的7次前面加个负符号:-128 。(包含开始,不包含结尾);
正数在计算机中是以原码形式存在的;
负数在计算机中是以其补码形式存在的,就是负数的绝对值的原码转为二进制再按位取反后加1。
下边这个10和-10为例来介绍的 :10原码:0000 1010 它在计算机中的存储就是 0000 1010,-10 按照前面说的算除其绝对值为10,转为二进制 0000 1010 按位取反 1111 0101 再加1后:1111 0110,此为-10补码 ,好的,计算机中的1111 0110就是代表-10了。
我们来看 -128 绝对值128的二进制表示:1000 0000 按位取反 0111 1111 加1后:1000 0000,也就是说 -128在计算机中的表示就是 1000 0000 了, 再来看一下-129 在计算机中的表示,绝对值129的范围已经超出了了byte的位数。所以要注意这类问题;
byte(字节类型) 一个byte 8位,取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1)默认是0
short(短整型) 一个short 16位,取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)默认是0
int(整型) 一个int 32位,取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)默认是0
long(长整型) 一个long 64位,取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)默认是0L或0l推荐用大写;