Java开发·持续学习·分享新知程序员

Java开发每日复盘2018_0514

2018-05-14  本文已影响59人  07e819eca0df

今天主要跟大家分享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·简书号」

上一篇 下一篇

猜你喜欢

热点阅读