JAVA学习路线之夯实基础

第一章

开发环境

JDK(Java SE Development Kit),Java标准版开发包,提供编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行环境,以及常用的Java类库等。

JRE(Java Runtime Environment),Java运行环境,是运行Java程序的必须条件。

JVM(Java Virtual Machine),Java虚拟机,是运行Java程序的核心虚拟机。

三者关系:JDK包含JRE,JRE包含JVM。

Java程序需要经过编译才能运行,编译的是.java文件,运行的是通过编译生成对应的.class文件。

编译命令:javac + 空格 + java文件全称(包含扩展名);

运行命令:java + 空格 + class文件名称(不包含扩展名);

【以上命令必须进入文件所在目录】

面向对象

面向对象是一种更优秀的程序设计方法,它的基本思想是使用类、对象、继承、消息等基本概念进行程序设计。【类】是采用面向对象方式开发的程序的最小程序单元,【成员变量(状态数据)+ 方法(行为) = 类 】

面向对象方法的三个基本特征:封装、继承和多态。

封装指的是将对象(类)的实现细节隐藏起来,然后通过一些公用方法来暴露该对象(类)的功能;

继承是面向对象实现程序复用的重要手段,当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法;

多态指的是子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征,这意味着同一个类型的对象在执行同一个方法时,可能表现出多种行为特征。【通俗的讲,就是一个父类有一个或者多个子类,在创建子类对象时,类型定义为父类或子类,而这个对象在表达行为(方法)时,可能表达出子类的行为(方法),也可能表达出父类的行为(方法)】

第二章

数据类型

Java数据类型有两种:基本数据类型、引用数据类型。

基本数据类型

基本数据类型有四大种八小种,即整型(byte【1字节】、short【2字节】、int【4字节】、long【8字节】)、字符型(char【2字节】)、浮点型(float【4字节】、double【8字节】)、布尔型(Boolean)

整型中每种数据类型大小范围:-2n-1至2n-1-1;n为该类型所占内存空间的位数。【1(byte)字节=8(bit)位】

Java整型数值有4种表达方式:二进制【以0b或0B开头】、八进制【以0开头】、十进制及十六进制【以0x或0X开头】。【十进制就是我们正常使用的数值】

二进制与十进制相互转换:二进制转十进制,二进制数值从末尾开始依次与2n相乘,n从0开始,得到的数值再依次相加,得到就是对应的十进制数值;十进制转二进制,十进制数值除以2,直到商为0【除不尽时,视为商为0,余数为上次相除所得的商】,依次所得的余数,再从右至左排列,所得的数值就是对应的二进制数值。

在十进制中,使用大写或者小写的e表示幂,e2或者E2表示102

引用数据类型

再Java中,除了上述讲的四大种八小种基本数据类型之外,其他数据类型都是引用数据类型。换句话说,Java中,除了基本数据类型,就是引用数据类型

引用数据类型包含类、接口及数组声明的的数据类型。

类型转换

所有数值型变量(整型及浮点型)之间可以转换。转换分为两种:自动转换及强制转换。自动转换发生在小数值型转大数值型;强制转换发生在大数值型转小数值型,强制转换会丢失精度。【这里说的大小数值型是以类型所占内存大小(位数)来衡量的】。

类型自动转换顺序为byte -> short (char)-> int -> long -> float -> double【数值型从小到大】

强制转换格式:数据类型 变量名 = (数据类型) 变量名

char类型比较特殊,char可以自动转换成int、long、float、double,但byte与short类型不能自动转换成char类型,而char类型也不能自动转换成byte与short类型【注意这里说的是不能自动转换

在Java中,char是16bit长的无符号整数,因此范围是:0~65535,而short则是16bit长的带符号整数,范围是-32768~32767。 所以,两者虽然字长相同,但意义却不一样(表示范围并不完全重合或包含),因此不管是char转换成short,还是short转换成char,都属于数值的“窄化转换”(Narrowing Primitive Conversion)。 窄化转化都可能“丢失精度”,因此必须强制转换。虽然,这里的“丢失精度”跟从int到short的丢失精度给人的感觉似乎不一样,但仔细想想也没有什么区别,一方面,char有16个bit表示数值,而short用于表示数值大小的只有15个bit,因此,从char到short会“丢失数值精度”,而另一方面,short有1个bit表示数值的符号,而char却根本没有这么个符号位(所有的bit都用来表示数值大小了),所以从short到char也可能“丢失精度”,只是这里丢失的是有关正负的“精确程度”。

自动类型转换不仅发生在赋值过程,在进行数学计算时也会发生自动类型转换。在计算中往往是先将数据类型转换为同一类型,然后在进行计算。转换规则为:操作数只有byte、short与char三种类型,则将转换为int类型;操作数中包含除了byte、short及char之外的数据类型,则将转换为操作数中最大数值型的数据类型

运算符

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。

Java语言中的运算符可以分为算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符和类型相关运算符。

算术运算符

算术运算符执行基本的数学运算:加【+】、减【-】、乘【*】、除【/】、求余【%】、自加【++】及自减【–】。

【+】除了作为数学的加法运算符之外,还可以作为字符串的连接运算符;

【-】除了可以作为减法运算符之外,还可以作为求负的运算符(就是表示负数);

【变量A = 变量B++(–)】先赋再自加(自减),变量A与变量B等值;

【变量A = ++(–)变量B】先自加(自减)再赋值,变量A与变量B不等值;

赋值运算符

赋值运算符用于为变量指定变量值。

位运算符

Java支持7种位运算符:按位与【&】、按位或【|】、按位非【~】、按位异或【^】、左移运算符【<<】、右移运算符【>>】及无符号右移运算符【>>>】。

一般来说,位运算符只能操作整数类型的变量或值。将整数类型的变量或值转换成对应的二进制数值进行计算

按位与【&】

将参加运算的数据,按二进制位进行“与”运算。

运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;即:两位同时为“1”,结果才为“1”,否则为0。另,负数按补码形式参加按位与运算。

“与运算”的特殊用途:清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零;取一个数中指定位。方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。【例:设X=10101110,取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到】

按位或【|】

将参加运算的两个对象,按二进制位进行“或”运算。

运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;即 :参加运算的两个对象只要有一个为1,其值为1。负数按补码形式参加按位或运算。

“或运算”特殊作用:将数据二进制形式的某些位置置1。【例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。】

按位非【~】

单目运算,参与运算的一个数据,按二进制位进行“取反”运算。

运算规则:~1=0; ~0=1;

“按位非”的特殊用法:使一个数的最低位为0,可以表示为:X&~1。~1的值为11……110,再按“&”运算,最低位一定为0。因为,取反运算符的优先级比算数运算符、关系运算符、逻辑运算符和其他运算符都高。

按位异或【^】

参与运算的两个数据,按二进制位进行“异或”运算。

运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;即:当两位相同时返回0,不同时返回1。

左移运算符【<<】

将一个运算对象的各二进制位全部左移若干位,左边超出的二进制位丢弃,右边补0。在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

例:3<<2首先将3转换为二进制数字00000011,然后把该数字高位(左侧)的两个0移出,其他数字朝左平移2位,低位(右侧)的两个空位补0。得到的最终结果为00001100,转换为十进制是12。

右移运算符【>>】

带符号右移,按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。

例:11>>211的二进制形式为:0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。得到的最终结果是0000 0010,转换为十进制是2。

无符号右移运算符【>>>】

按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。 其他结构和>>相似。

【扩展】复合赋值运算符

位运算符与赋值运算符结合,组成新的复合赋值运算符,它们是:“&=” 例:a &= b 相当于a=a & b“|=” 例:a |= b 相当于a=a | b“>>=” 例:a >>= b 相当于a=a >> b“<<=” 例:a <<= b 相当于a=a << b“^=” 例:a ^= b 相当于a=a ^ b

比较运算符

比较运算符用于判断两个变量或常量的大小,比较运算的结果是一个布尔值。

大于预算符【>】

只支持左右两边操作数是数值类型。如果前面变量的值大于后面变量的值,则返回true。

大于等于预算符【>=】

只支持左右两边操作数是数值类型。如果前面变量的值大于等于后面变量的值,则返回true。

小于预算符【<】

只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回true。

小于等于预算符【<=】

只支持左右两边操作数是数值类型。如果前面变量的值小于等于后面变量的值,则返回true。

等于预算符【==】

如果进行比较的两个操作数都是数值类型,即使它们的数据类型不相同,只要它们的值相同,也都将返回true。【例如:97 == ’a‘;5.0 == 5】如果两个操作数都是引用类型,那么只有当两个引用变量的类型具有父子关系时才可以比较,而且这两个引用必须指向同一个对象才会返回true。

不等于预算符【!=】

如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相同,也都将返回true。如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只有两个引用指向的不是同一个对象就会返回true。

逻辑运算符

短路与预算符【&&】

前后两个操作数必须都是true才返回true,否则返回false。如果前一个操作数为false,则跳过其余操作数,直接返回结果false,这就是所谓的短路

不断路与预算符【&】

前后两个操作数必须都是true才返回true,否则返回false。不发生短路,即还会去判断其余操作数。

短路或预算符【||】

只要操作数中有一个是true,就可以返回true,否则返回false。如果前一个操作数为true,则跳过其余操作数,直接返回结果true,这就是所谓的短路

不断路或预算符【|】

只要操作数中有一个是true,就可以返回true,否则返回false。不发生短路,即还会去判断其余操作数。

非预算符【!】

只需要一个操作数,如果操作数为true,则返回false;如果操作数为false,则返回true。

异或运算符【^】

当两个操作数不同时为true或为false,才返回true,如果两个操作数同时为true或为false,则返回false。

三目运算符

格式:(expression) ? if-true-statement : if-false-statement;

规则:先对逻辑表达式expression求值,如果逻辑表达式返回true,则返回第二个操作数(if-true-satement)的值,如果逻辑表达式返回false,则返回第三个操作数(if-false-statement)的值。

预算符的优先级

所有的数学运算都认为是从左向右运算的,Java语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,是从右向左结合的,也就是从右向左运算。

优先级顺序:分隔符【. [] () {} , ;】> 单目运算符【++ — ~ !】> 强制类型转换运算符【(type)】> 乘法/除法/求余【* / %】 > 加法/减法【+ -】> 移位运算符【<< 、>>、 >>>】> 关系运算符【< 、<=、>=、>、instanceof】 > 等价运算符【==、!=】 > 按位与【&】> 按位异或【^】> 按位或【|】> 条件与【&&】 > 条件或【||】 > 三目运算符 > 赋值【= 、+=、-=、*=、/=、&=、|=、^=、%=、<<=、>>=、>>>=】

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/java/java-learn.html

Like (0)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
Previous 2020年1月11日
Next 2020年3月17日

相关推荐

  • JavaWeb入门案例之用户注册

    前言 之前把Java的基础知识系统的过了一遍,目前总算可以看懂Java代码了,接下来就是要学习Java开发框架(主要是springMVC)。 下面用一个用户注册的小案例,来总结一下…

    2021年1月13日
    1.4K
  • Java自学之异常的捕获与处理

    在程序开发中,程序的编译与运行是两个不同的阶段,编译主要针对的是语法检测,而在程序运行时却有可能出现各种各样的错误导致程序中断执行,那么这些错误在Java中统一称为异常。 异常处理…

    2020年12月11日
    1.2K
  • Java自学之I/O编程

    I/O(Input/Output,输入/输出)可以实现数据的读取与写入操作,Java针对I/O操作的实现提供了java.io工具包,此包的核心组成由File类、InputStrea…

    2020年12月21日
    1.1K
  • Java自学之继承

    在面向对象的设计过程中,类是基本的逻辑单位。但是对于这些基本的逻辑单位需要考虑到重用的设计问题,所以在面向对象的设计里提供有继承,并利用这一特点实现类的可重用性定义。 类继承定义 …

    2020年12月3日
    1.2K
  • Java自学之反射机制

    重用性是面向对象设计的核心原则。为了进一步提升代码的重用性,Java提供了反射机制。反射技术首先考虑的是“反”与“正”的操作,所谓的“正”操作,是指当开发者使用一个类的时候,一定要…

    2020年12月24日
    1.1K
  • spring boot练习篇之用户登录系统【接口篇】

    写在前面 抛弃JSP,只做纯粹的前后端分离项目。 作为一个资深前端工作者,想要转JavaWeb开发,无论是书籍,还是网上视频、资料,竟然没有一篇能清楚明白地讲解怎样搭建一个前后端分…

    2021年5月25日
    1.5K
  • spring boot练习篇之用户登录系统【接入数据库】

    抛弃JSP,只做纯粹的前后端分离项目。 写在前面 学习基础知识是枯燥无味的,之所以会这样,多数是因为心不静,对于如何运用它,感到茫然。所以建议大家在学习Java基础知识的时候,一定…

    2021年5月28日
    1.1K
  • Java自学之类与对象

    定义 类是由成员属性和方法组成。成员属性主要定义类的一个具体信息,实际上一个成员属性就是一个变量,而方法是一些操作的行为。类的定义基础语法如下。 一个类定义完成后并不能够被直接使用…

    2020年11月25日
    1.1K
  • Java自学之多线程编程

    多线程编程是Java语言最为重要的特性之一。利用多线程技术可以提升单位时间内的程序处理性能,也是现代程序开发中高并发的主要设计模式。 进程与线程 进程是一个应用程序。线程是一个进程…

    2020年12月16日
    1.4K
  • 如何使用IDEA2020.2新建servlet工程

    最近自学java时,发现IDEA更新到2020.2版本时,在新建工程时,有了明显的改动。由于小编刚学到servlet,IDEA这一突然间的改动,导致小编不会新建servlet工程了…

    2020年8月17日
    5.5K

发表回复

Please Login to Comment