【进收藏夹吃灰系列】——Java基础快速扫盲

时间:2020-07-14 13:46:42   收藏:0   阅读:55

建议看完目录后扔进收藏夹吃灰,需要用的时候再翻出来。(手动狗头)

本文主要包括Java入门的一些知识,包括JDK环境安装,常用语法以及面向对象编程等。

目录结构

Java基础

1,Java语言的特点

2,配置开发环境

JDK版本多样,主要包括Oracle JDK 和OpenJDK

支持国产的话可以考虑阿里的dragonwell:https://cn.aliyun.com/product/dragonwell

【win10安装JDK的常用步骤】

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

技术图片

【下载的这个安装包主要包含JDK,JRE,JavaFx包】(JavaFX主要用于桌面端开发)

技术图片

技术图片

技术图片

技术图片

添加刚刚复制的路径到path里:

技术图片

点击三个确定。

技术图片

技术图片

3,经典HelloWorld

3.1 命令行运行Java程序

技术图片

3.2 使用IDEA 运行Java程序

技术图片

package com.company;

public class Main {

    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

4,数据类型&变量

4.1 为什么要设计不同种类的数据类型?

以结果为导向来分析:Java的整数类型分为4种:byte,short,int,long。四种的区别在于占用的存储空间不一样。

byte占用1个字节,short占用2个字节,int占用4个字节,而long占用8个字节。

1字节等于8位而八位可以表示数-128 - 127。这是byte类型的表示范围。那如果想用计算机计算1000加上1000,byte明显是不可用的。因为byte表示不了1000这个数值。

而short类型的存储空间为2个字节,也就是16位。对于short数据类型来说,能表示多大的数呢?根据8位的表示范围推算:

-2^15 = 2^15-1   -32768--32767

以此类推,int为4个字节,long为8个字节,能表示的数更大。

Java通过定义变量的类型来规定变量的内存空间大小,通过阶梯式的定义,既有满足小数值运行的byte类型,也有支持大数值运算的long类型。这样不仅满足运算的最大支持(long),同时也能节省系统内存资源(byte)。

【总结】

数据类型的区分是一种系统资源分配优化的方案。

【字节和位的关系】

字节是一种存储单位的度量。1个字节等于8位。

位可以理解为计算机的最小单位:0或者是1。也就是是说1个字节是8个0和1的排列组合:

比如说:00000000,00000001,00000011,......11111111。

【理论上1个字节可以表示多大的数呢?】

【实际上1个字节可以表示多大的数呢?补码登场】

上述引入符号位的8位二进制数可以理解为原码。对于正数来说,原码就是补码,而对于负数来说,符号位不变,其他原码按位取反加1所得即为补码。

为什么需要补码?

补码的出现使得加减法只有加法,简化了计算结构,提高运算速度。(减法变成了加一个负数)

【为什么8位二进制数补码表示的范围是-128-127?】

无符号位原码:0000 0000 - 1111 1111 表示范围0 - 255

有符号位原码:1111 1111 - 0111 1111 表示范围-127 - 127

补码:符号位不变,在原码的基础上按位取反加1,理论上最大的数0111 1111 = 127 ,最小的数 1111 1111 = -127

但是特殊情况:原码0000 0000 理论上表示正数,也就是+0,原码1000 0000理论上表示负数,变为补码后去掉最高为也是0000 0000。

[+0]原码=0000 0000, [-0]原码=1000 0000
[+0]反码=0000 0000, [-0]反码=1111 1111
[+0]补码=0000 0000, [-0]补码=0000 0000

+0的补码和-0的补码都是0000 0000。但8位二进制数的补码可以表示2^8也就是256个数1-127,-1-(-127)一共数254个数。

所以计算机将补码-0(1000 000)特殊设为-128。这个数没有原码和反码。

(就是多了一个表示的数,计算机就特殊处理了)

4.2 数据变量&类型的定义

变量是内存中的一个存储区域。而数据类型的定义决定了这块存储区域的大小。

比如 int x ;其中x变量在内存中占有一定空间,而int决定这个空间是4个字节。

【关于变量的描述】

4.3 基本数据类型

4类8种:4种整数型,2种浮点型,1种字符型,一种布尔型

byte 1字节 默认值
short 2字节 0
int 4字节 0
long 8字节 0L
float 4字节 0f
double 8字节 0d
char 2字节 ‘u000’
boolean 4字节 false

4.4 自动类型转换&强制类型转换

自动类型转换:由表示范围小的自动转换为表示范围大的。

技术图片

强制类型转换:反向转换

技术图片

4.5 包装类

包装类是Java设计之初提出的,主要解决基本数据类型无法面对对象编程的问题。

技术图片

装箱:基本数据类型 to 包装类

拆箱:包装类 to 基本数据类型

        //int与Integer之间的转换
        int x = 5;
        Integer y = new Integer(x);
        System.out.println("int转换为Integer,y="+y);

        int z = y.intValue();
        System.out.println("Integer转换为int,z="+z);

        System.out.println("=======================");

        //Integer与String转换
        String s1 = "666";
        Integer i1 = Integer.parseInt(s1);
        System.out.println("String转换为Integer,i1="+i1);

        String s2 = i1.toString();
        System.out.println("Integer转换为String,s2="+s2);

        System.out.println("=======================");


        //int与String转换
        int xx = 2;
        String ss1 = String.valueOf(xx);
        System.out.println("int转换为String,ss1="+ss1);

        int yy = Integer.parseInt(ss1);
        System.out.println("String转换为int,yy="+yy);

        System.out.println("=======================");


        //JDK1.5后Java采取自动装箱和自动拆箱功能
        //自动装箱,编译器执行了Integer x1 = Integer.valueOf(x)
        Integer x1 = x;
        System.out.println("自动装箱,x1="+x1);

        //自动拆箱,编译器执行了 int y1 = y.intValue()
        int y1 = y;
        System.out.println("自动拆箱,y1="+y1);

面向对象

1,灵魂拷问,什么是面向对象?

百度的解释:

面向对象(Object Oriented)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

网上有一个生动的例子来说明面向对象的特点:

我要用洗衣机洗衣服,只需要按一下开关和洗涤模式就可以了。有必要了解洗衣机内 部的结构吗?有必要碰电动机吗?有必要了解如何通电的吗?

这是一个很“真实”的例子,没有人会为了使用洗衣机去学一下电学的组成原理,但我们却方便使用者洗衣机,手机,电脑等各种各样的事物却并不了解它们的原理。这是好事还是坏事?洗衣机可以洗脏衣服,手机可以和亲朋好友打电话,电脑可以帮助我们方便的处理难以解决的各种问题。但这个世界上并不是没有人不懂洗衣机的原理,手机的制造,电脑的组装。我们不懂其内部结构却正常的使用着这些设备,并不是单纯科技的进步,而是人类对于事物的处理思路发生了变化,究其根本是为了更高的效率!设计手机的人也许用着别人制造的洗衣机,敲着键盘的人是另一个领域的创造者,社会分工明确,整体效率极大提升,你只需专注一项,就可获得所有的便利。

回到面向对象的问题上来,什么是面向对象呢?

个人认为:如果摒弃软件开发的范畴,这是一种通过明确社会分工而提高效率的方法。在软件开发的范围内,就是通过抽象出系统功能而实现最大化代码复用的开发模式。

面向对象的延伸:

面向对象是软件开发的名词,但其中蕴含的是这个世界的发展规律。

比如,住房子不一定自己建,也可以买;吃饭不一定自己做,也可以出去吃或者叫外卖;至于洗衣机,电脑冰箱这些更不用提了。你只需要做好自己的事,剩下的,交给其他人就好了。

在软件开发的范畴内,除了编写代码上运用了面向对象的思想,使用第三方框架等同样是面向对象的延伸,从底层的操作系统,JVM虚拟机,包括Java语言,我们并不需要重新再发明一遍,站在巨人的肩膀上,我们能做的事更多。

2,如何实现面向对象?——封装,继承,多态

2.1 封装

技术图片技术图片参考这位女司机豪横:https://zhuanlan.zhihu.com/p/37853346

2.2 继承

核心目的:实现代码复用。

2.3 多态

3,关键字盘点

3.1 static

static可以修饰方法,变量,代码块,类,前两种应用更加常见。

3.2 final

final关键字可以修饰类,方法,变量。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!