Java开发每日复盘2018_0514
今天主要跟大家分享3个部分:
一、「Java的核心机制」
二、「Java命名规范」
三、「Java数据类型相关」
下面我们来一个一个的说:
「Java核心机制」
Java是一种强制面向对象的解释型语言(OOP -- Object Oriented Programming)。
即,不支持面向过程(Procedure Oriented Programming)。
其类与类之间,只支持单继承。(Class)(extends)
但是接口与接口之间,支持多继承。(Interface)(extends)
类与接口之间有一套实现机制(implement)
Java的核心机制,主要分为2个部分:
一、Java虚拟机(JVM -- Java Virtal Machine)
二、垃圾回收机制(GC -- Garbage Collection)
其中JVM的出现,使得Java拥有了一处编译,到处执行的特性。(Write once, Run Anywhere)
简单的说,JVM是一台介于Java和各个不同的操作系统(MacOS、Windows、Linux等)之间的,起到兼容各个不同操作系统使得Java可以在其上运行作用的,虚拟的电脑,即Java虚拟机--JVM--Java Virtal Machine。
而垃圾回收机制GC,则是使得在Java开发中,不需要过多的关注内存释放的问题,也不需要手动释放当前不需要但占用着内存的变量。
当GC检测到内存不足时,它会自己自动释放当前不需要使用但占用着内存的变量。
就像是,不需要的东西被装进了一个垃圾桶,当垃圾桶差不多装满时,GC会自动开着垃圾车过来,把这个垃圾桶清空(自动清理释放内存空间)。
好处是,开发过程中不用分心考虑内存问题,可以专注于代码逻辑实现,同时可以防止手动释放内存时的错误操作,把还需要使用的变量给释放掉了,产生异常错误。
Java语言有三大特点:
一、面向对象:
【1】基本概念:类、对象。
【2】三大特性:封装、继承、多态。
二、健壮性:
吸收了C/C++语言的有点,同时剔除了影响健壮性的操作(如:指针操作、开辟内存与释放内存等),使得Java的健壮性大大提升。
三、跨平台性:
如上JVM所述。
「Java命名规范」
【1】包名:
全部小写。
如:aaabbbccc
【2】类名、接口名:
大驼峰命名法。
如:AaaBbbCcc
【3】变量名、方法名:
小驼峰命名法。
如:aaaBbbCcc
【4】常量名:
全部打写,及用下划线分割。
如:AAA_BBB_CCC
「Java数据类型」
【1】「Java里的八大基本数据类型(原始数据类型)」
byte
short int long
float double
char
boolean
【2】「变量按数据类型分类」
数据类型分为:
一、基本数据类型:
1、数值型
1、整数类型
byte
short
int
long
2、浮点类型
float
double
2、字符型
char
3、布尔型
boolean
二、引用数据类型:
1、类
class(字符串在这里)
2、接口
interface
3、数组
[]
一与二的区别:
「基本数据类型」存放于内存的「栈」中,「引用数据类型」存放于内存的「堆」中(其地址(指针)存放于内存的栈中)。
补充:
内存中的存储主要分为4块区域:栈、堆、静态区域、常量池。
其中:
栈:存放「基础数据类型」的变量(地址和值),「引用数据类型」的变量的地址(指针)。
堆:存放「引用数据类型」的变量的内容(值)。
静态区域:存放静态变量(用static修饰的变量)。
常量池:存放字符串常量。
【3】「自动类型转换」
1> Example 1:
int a = 60;
double b = 20.99
double c = a+b
(a已经发生了自动类型转换,即 a= 60.0)
int c = a+b
(编译报错)
(目标类型大于原类型,会发生自动类型转换,反之则不会。
如上例:
double类型大于int类型,所以int类型会自动转换为double类型,而double类型则不会自动转换为int类型)
2> Example 2:
short a = 50;
short b = 20;
long c =(i+j);
short d =(i+j);
(这么写会报错,因为short + short = int,而int类型大于short类型,所以int类型不会自动转换为short类型)
3> Example 3:
char a = 'A';
String b = "abcd";
String result = a + b;
(a已经发生了自动类型转换, 由char自动转换为String)
4> 数据类型大小排序:(由大到小)
double
float
long
int
short(char与short同级)
byte
5> byte/short/char
这三种数据类型之间不会互相转换。在计算时会先自动转换成int,然后再开始计算。
(如上例2:「short + short = int」)
6> 任何类型 + 字符串String类型
都会自动转换成Sting类型。
如:
int a = 6;
String b = "hello";
String c = b + a;
字符串String类型会这样,但字符Char类型是不会的。
如:
int整型 + 字符Char类型,字符char会先转换成int(对应ASCII码),再计算。
String a = "Hi" + 'a' + 2;(a = "Hia2")
String b = 'a' + 2 + "Hi";(b = "99Hi")
7> 布尔值类型Boolean
不能被转换成其他类型。
【4】「强制类型转换」
是「自动类型转换」的逆过程,会丢失精度。
如:
Random ramdom = new Random();
int i =(int)(ramdom.nextDouble()*10);
【5】「null值」
null值可以赋值给任意「引用数据类型」(类、接口、数组,等),赋值后,表示这个引用类型变量中保存的地址为空。
因为String属于引用类型,所以可以赋值为null
【6】「String字符串类型」
String a = new String("abcd");
("abcd"存放在「堆」中)
String a = "abcd";
("abcd"存放在「常量池」中)
(可参考上方所述的「内存存储分区」)
【7】「补码」
当你第一次接触「补码」时(补码:该数据的反码+1),会不会觉得这东西有什么用?反码的作用好理解,数据取反时可以用,但补码是在反码的基础上,加1,这个有什么用啊?
其实它的作用很简单,也很直接,就是:计算机底层是以数据的补码来存储的。(二进制)
-- zeroOS·复盘于2018/5/14
「zeroOS·简书号」