(十)Core Java 基础常识 (91)

目录结构     :   java基础常识


1 ) .  基本常识

2 ) . Java的跨平台性

3 ) . Java环境搭建(安装)

4 ) . Java环境搭建(环境变量配置)

5 ) .  Java环境搭建(环境变量配置技巧)

6 ) .  Java环境搭建(环境变量临时配置方式)

7 ) . Hello World

8 ) .  classpath配置

9 ).   Hello World的组成部分

10 ). -注释

11 ).标识符

12 ). 常量

13 ).进制的特点

14 ).进制转换(十进制和二进制)

15 ).进制转换(八进制和十六进制)

16 ).进制转换(负数二进制)

17 ).变量

18 ).类型转换

19 ).算数运算符

20 ).转义字符

21).赋值和比较运算符

22 ).逻辑运算符

23 ).位移运算符(左移,右移)

24 ).位运算符(与-或-异或)

25). 位运算符(练习)
 
 
     一 .   基本常识

1 ) . 理解软件

1.1 定义 : 一系列按照特定顺序组织的计算机数据和指令的集合 

1.2 目的 : 是为了处理现实生活中的数据

1.3 常见软件 :

[1]系统软件 --> 如: DOS,windows,Linux等
 
[2]应用软件--> 如: 扫雷,迅雷,QQ等

1.3  开发  -->制作软件

2 ) . 理解人机交互 -->交互指操作

2.1  软件的出现实现了普通的人机交互,利于普及

2.2 交互方式 : 

[1]图形化界面 :  简单直观,易于接受,易于上手,适合非专业人员

[2]命令行方式 :  需在特定的控制台输入特定的指定完成特定的操作,适合专业人员


3 ) .  命令行方式 : 

3.1 常见的dos命令 : 

dir
列出当前目录下的文件以及文件夹
md
创建目录
rd
删除目录
cd
进入指定目录
cd..
退回到上一级目录
cd/
退回到跟目录
del
删除文件
exit
退出dos命令行


3.2  关于常用的命令 : 

[1] 删除目录  :  delete 目录名  -->rd 目录名

[2]目录中选择性删除 : delete    *.txt   -->后缀名的方式

 
4 ) . 计算机语言 : 

4.1 语言 : 人与人之间用于沟通的一种方式

4.2计算机语言 :  人与计算机用于交流的方式

[1]语种有 : C ,C++.Java等


小结 :  

           1.  删除有文件夹的目录 :  删除目录中所有文件-->删除目录  
        
           2.   人机交互的过程使用的一种交流方式,可以是dos窗口命令,也可是图形化界面的点击,前期是计算机需识别,才能达到效果

     

       二.  Java的跨平台性


1 ) . 简述 : 

[1] 发源  : 是sun(Stanford University Network,斯坦福大学网络公司)1995年推出的一门高级编程语言

[2] 类型 : 是一种面向Internet的编程语言

[3] 发展 : 在web方面较为成熟,已经成为Web应用程序的首选开发语言

[4] 特点 : 简单易学,完全面向对象,安全可靠,与平台无关(操作系统)的编程语言

[5] 架构 : 

J2EE -->企业级-->为在企业环境下开发的应用程序所提供一套解决方案

J2SE-->标准版-->开发桌面和商务应用提供的解决方案

J2ME-->小型版-->为开发电子消费产品和嵌入式设备提供解决方案


[6] java版本 :  java.5.0是java的里程碑

版本5.0 之前 ,架构叫 J2EE,2SE,J2ME

版本5.0之后,架构加JAVAEE,JAVASE.JAVAME

2 ) . 什么是跨平台性?

2.1 简述 : 通过java语言编写的应用程序在不同的系统平台(操作系统)上都可以运行

2.2 原理是什么?

为何可跨平台,只因java虚拟机(JVM java virtual Machine),由他来解析java程序来支持在不同系统中运行


2.3 图解 :  JVM -->依赖于系统,不同的系统需要不同的JVM


 


 

小结 :  

           1.  java之所以跨平台是因为JVM (虚拟机)
        
 

      三.  Java环境搭建(安装)

1 ) . 明确什么是JDK,JRE ?


1.1 JRE -->java运行环境 :   虚拟机,运行java程序的必需品 ,主要支持运行

1.2 JDK-->java开发工具包 :  内含JRE,和相关开发工具类例如 : javac.exe ,jar.exe,主要支持开发

1.3 区别之处 :   

[1]     JDK 包含 JRE

[2]     用JDK开发的java程序,用JRE用来运行

1.4 可下载的平台  :

www.oracle.com  -->收购后网址   

java.sun.com --> 收购前网址

1.5 jdk安装的过程可以理解为复制的过程

1.6 采用安装JDK,还是复制别人JDK目录两者的区别是 : 

[1] 采用安装的方式会在注册表里遗留信息,这样在版本更新联网状态下会自动更新

[2] 而复制别人目录则不会自动更新


1.7 JDK1.8目录结构解析 : 




[1] bin -->全称是binary,是二进制的意思,此目录用来存储java启动命令以及其他开发工具命令(javac)

[2]db --> 纯java开发的数据可Derby,是一个开源的100%java开发的关系数据库

[3]include --> C语言头文件,支持用Java本地接口和Java虚拟机接口来实现本机代码编程

[4]jre --> JDK自含JRE的根目录,这是系统属性java.home所指向的目录

[5]lib -->开发工具所使用的文件

[6]COPYRIGHT-->版权

[7]javafx-src.zip -->JavaFx脚本是一种声明式,静态类型编程语言

[8]LICENSE --> 许可证

[9]README.HTML -->  信息说明

[10]release -->发布版本

[11] src.zip --> Java所有核心类库的源代码

[12] THIRDPARTYLICENSEREADME.txt -->  第三方许可证信息

[13] THIRDPARTYLICENSEREADME-JAVAFX.txt -->JavaFx的第三方许可证信息

1.8 Jre1.8目录结构解析 : 


[1] bin --> 全称是binary,是二进制的意思,此目录用来存储java运行环境命令

[2]lib -->  开发工具所使用的文件

[3]COPYRIGHT --> 版权

[4]LICENSE --> 许可证

[5]README.TXT -->  信息说明

[6]THIRDPARTYLICENSEREADME.TXT -->  第三方许可证信息

[7]Whlcome.html -->欢迎页面
 

      四.  . Java环境搭建(环境变量配置)


1 ) .  为何要配置环境变量 : 

原因 : 在dos窗口执行的命令的两个前提 :  要么在当前目录下有该执行文件,要么在系统变量中有配置的目录下有该执行文件

目的  :为了更好的使用java开发程序
 
 
小结 :  

       
   1.  对于程序而言,JVM是提供平台,JDK提供支持, JRE提供环境,JDK内含JRE,JRE内含JVM
        
           2.  命令带参数,主要作用是用已扩展其命令的功能

           3. 配置环境变量的目的是为了让系统可扫描到相关目录下的执行文件,从而在dos窗口用以执行,通俗讲 让娘家人,还是婆家人成为自家人 ,给个标志吧
 
          
          
 五 .   Java环境搭建(环境变量配置技巧)

1 ) . %% -->用来动态的获取已存在的环境变量的值 


 
 
小结 :  

           1.   JAVA_HOME 不是特定的名字,是约定俗称的名字,行业规范
        
 
 

       六.    Java环境搭建(环境变量临时配置方式)


1 ) . dos窗口的set命令 :   用来查看或设置环境变量的值

2 ) . 场景 : 需在用户电脑或合作伙伴电脑上运行java程序,但不能更改对方的环境变量,可通过以下方式临时更改

 set path=" S:\develop\DevInstall\jdk1.8._10\bin "   即可临时更改path 

3 ). 若需求让我们追加path而不是更改path呢 ? 


set path=%path% ; S:\develop\DevInstall\jdk1.8._10\bin --> 用%%动态获取当前path值,而后在后用;隔开 ,写入路径即可
 

小结 :  

           1.  临时更改 -->指在当前窗口更改,退出则path配置无效

2.更改sql的服务配置路径 : 

第一步 : 在dos窗口中--> regedit--> HKEY_LOCAL_MECHINE--->SYSTEM --->CurrentControlSet-->services->Mysql56

第二步 :  双击配置此变量值


    
第三步 : 查看服务是否被更改

 
    七 Hello World

1 ) . 图解

2 ) . 流程图-->javac.exe用来将源文件编译为class文件(java可运行文件,字节码文件),java.exe用来将class文件运行出结果    


3 ) .相关组成  :  

class文件组成 (三部分) :class text{}  --> 关键字--类名 --区间   

man方法组成 : Public static void main(String[] args){ }   --> 

输出语句组成(三部分) :  System.out.println("hello,world");  -->系统.输出.打印("内容");

4 ). 了解什么是Hello World :

4.1 简述 : 代表学习计算机 语言的第一个入门小程序,现在泛指接触新事物的  第一步

4.2 class :  是java中的关键字,用于定义类,java语言的程序代码都需要定义在类中

4.3 关键字 : 被java语言赋予了特殊含义的单词

4.4 Demo : 为了方便使用这个类,给类自定义的类名

 
  
小结 :  

           1.  后缀名标识着某种文件的类型,用来相关程序便于检索编译
        
           2.  切记 :  javac 编译源文件 ,  java  运行class文件,注意java后跟源文件中的类名要一致,否则会出现找不到主类

   3 . public --> 加上此范围后就必须保证类名 与 文件名一致 

   
          
 

     八 classpath配置

1 ) . classpath:c:\;  与  classpath:c:\  的区别 :   -->建议不加; 号

classpath:c:\;  --> 用此配置时 ,若classpath中没有java程序,则会在当前目录进行查找

classpath:c:\  --> 用此配置时,若classpath中没有java程序,则不会在当前目录进行查找


2 ) . classpath' 与path 的区别 : 

classpath -->系统会现在classpath配置的路径中查找java源程序,然后再在当前目录进行查找

path -->系统会先在当前目录下找源程序执行文件,然后再在 path中查找java源程序执行文件

3 ) .  配置步骤 : 

  3.1 临时配置 :-->在dos窗口 -->通过set 值 的方式配置

  3.2 永久配置 : -->在系统环境变量下-->通过设置classpath值进行配置

 
4 ). 小案例 : 

  通过将qq的.exe执行文件配置在path上,通过dos窗口打开qq


小结 :  

           1.  JVM虚拟机在运行java命令时,先找classpath再找当前目录
        
      
          
     九   Hello World的组成部分

1 ) . 

class Day01{

public static void main(String[] args)

    {

    System.out.println("hello");

    }
}

[1] class --> 关键字 , 用于定义类 

[2] main -->主函数,在于保证类的独立运行,是JVM在调用他,是我们程序的入口

[3] 关键字 --->是赋予了特殊含义的单词


2 ) . 

3 ) .  规范 :  

[1] 类名由单词组成,开头字母大写,若为多个单词则每个单词开头大写; 

[2] 见名知意增强阅读性 ;

4 ) . java命令运行流程 : 

java day01.class --> JVM 虚拟机  -->windows底层内容执行该类 -- > 再找该类当中是否有 main 函数 -->执行主函数当中的代码

5 ).  疑难杂症处理方式 : 

   要么是目录路径错误,要么是文件名/扩展名错误





小结 :  

           1.  javac 编译成功,仅仅是语法规范没错,java运行成功才是代表 代码命名或内容没错  
        
      
 

       十.  注释 -->用来注解说明解释我们的程序
 

1 ) . //    --->单行注释  

2 ) . //*/---> 多行注释

3 ) ./**/---> java 特殊注解 ,可通过jdk当中的javadoc.exe生成程序文档说明书,给开发者用的

4 ) . 重点知识 : 

[1] 单行注释中可有单行注释;但多行注释中不可有多行注释

[2] 注释过程--> 需求--思路--步骤 --实现类--实现方法--具体疑难代码 ,以上都需注释


5 ). 涉及范围 : 

[1] 学习中用以标注

[2]工作中用以提醒


6 ). 图解 : 



/*
需求:定义一个hello world小程序
思路:
1.用class类通过设计main方法使类可独立运行,而后写sysytem用以做输出语句
步骤:
1.通过class关键字定义一个类.将代码都写在该类中
2.通过main在类中定义一个主函数,保证该类可独立运行
3.通过jdk中的javac工具在dos控制台中对java文件进行编译
4.通过java命令对生成的class文件进行执行
*/

//定义一个类
class day01
{    //主函数
    public static void main(String[] args)
    {
        //输出语句
        System.out.println("Hello World");

    }
}

7 ). 单行注释,多行注释与文档注释的区别 ?


7.1 相同之处在于 :  三种注释方式都不会被JVM(java虚拟机)解释执行

7.2 不同之处在于 : 文档注释是java特有的注解,其中注释内容可被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的文档说明




小结 :  

           1.  请记得单行结束是 回车
        
           2.  程序文档说明书与软件使用说明书--> 开发者与使用者

           3. 代码仅仅是我们思想体现的一种形式

           4. 蓝色的都是关键字,红色的都是-------

   5 .其他语言支持 // , /**/  , java语言不仅也支持这两种注释,还有独立的一种注释/***/ ,用来生成程序文档说明书 


引入 :  Java语言的基础组成 : 


[1] 关键字  -->指赋予了特殊含义的单词

[2] 标识符 --> 指 在程序中自定义的一些名称

[3]注释    -->   指用来注解说明解释程序,或调试程序使用的

[4] 常量和变量 --> 常量指不能改变的数值;变量指可改变的数值

[5] 运算符 -->

[6] 语句 -->

[7] 函数 -->

[8] 数组 -->
  


    十一.关键字与标识符 

1 ) .关键字简述 : 

1.1 定义 : 被java语言赋予了特殊含义的单词

1.2 特点 : 关键字中所有字母都为小写


用于定义数据类型的关键字
class
interface
byte
short
int
long
float
double
char
boolean
void




用于定义数据类型值的关键字
true
false
null


用于定义流程控制的关键字
if
else
switch
case
default
while
do
for
break
continue
return




用于定义访问权限修饰符的关键字
private
protected
public


用于定义类,函数,变量修饰符的关键字
abstract
final
static
synchronized

用于定义类与类之间关系的关键字
extends
implements



用于定义建立实例及引用实例,判断实例的关键字
new
this
super
instanceof

用于处理异常的关键字
try
catch
finally
throw
throws
用于包的关键字
package
import



其它修饰符关键字
native
strictfp
transient
assert




2 ) .  标识符简述  :

2.1 定义 : 在程序中自定义的一些名称

2.2 组成  :  由26个英文字母大小写,数字;0-9符号 ; _ $ 组成

2.3 规则 :   

[1] 数字不可以开头

[2] 不可使用关键字

2.4 注意 :  Java中严格区分大小写,另外为提高阅读型,起名请见名知意


3 ) .  java中的名称规范 : 

3.1 包名 : -->    多单词组成时所有字母都要小结                   例 :  xxxyyyzzz

3.2 类名接口名 : -->  多单词组成时,所有单词的首字母大写     例 :  XxxYyy

3.3 变量名和函数名 : -->  多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写     例 :  xxxYyy

3.4 常量名 : -->  所有字母都大写,多单词时每个单词下划线连接     例 :   XXX_YYY


 
          
 

     十二 .常量 

1 ) . Java中常量的分类 : 

1.1 整数常量 : 所有整数

1.2 小数常量 : 所有小数

1.3 布尔型常量,较为特殊,只有两个数值,true,false

1.4 字符常量 : 一个数字字母或符号用单引号''所标识的

1.5 字符串常量 : 一个或多个数字字母字符组成用双引号""所标识 的

1.6 null常量 : 只有一个数值就是 : null


2 ) . 对于整数 :  java有四种表现形式 :

2.1 十进制 : 0-9  ,满十进一

2.2 八进制 :  0-7 ,满八进一,用0开头表示

2.3 十六进制 : 0-9 ,A-F ,满十六进一,用0x开头表示

2.4 二进制 : 
 
 
小结 :  

           1.  任何一个数都有不下三种表现形式
        
  
          
 十 .   进制的特点

1 ) . 进制的由来 : 

1.1 任何数据在计算机中都是以二进制的形式存在的,二进制早起由电信号开关演变而来

1.2 推动二进制优化的原因是因为 用一大串01组成的数据使用不方便


2 ) .  生活中的进制有 : 周(一周七天,满七进一) ,月 (一月若干天,满若干进一),年(一年12个月,满十二进一)

3 ) .  二进制的发展 : 

开关-->二进制 01-->  :二进制 : 01  ,此时出现ASCII 编码表 , 用来让不同排列组合的01 代表与之对应的英文字母 -->

-->   二进制 : 01   , 此时出现   ,用来让不同排列组合的01代表与之对应的中文字 

4 ) . 二进制的瓶颈 :   --> 随着数据量的增大,二进制表现形式不易查看,这时候要优化了


4.1 二进制的三位代表一位形成-->八进制

4.2二进制的四位代表一位形成-->十六进制
 

小结 :  

           1.   让0与1 以不同的方式进行重组从而产生出不同的表现形式以代表不同的含义
        
           2.  一字节 = 8个二进制,计算机上所存放的都是二进制数据

           3.  进制的发展目的是为了更方便的表示数据,其规律是进制越大表现形式越短
 
 

       十四.进制转换(十进制和二进制)


1 ) . 十进制转二进制的原理是对十进制数进行除2运算 ,能整除则得 0 ,不能整除则得 1 ,最后把余数拿到第一位 ,然后进行逆序拼接即为 十进制转二进制  

注意 : 拼接时 应该是  从先后再前


2 ) . 二进制转十进制的原理是 : 对二进制数进行乘2的幂方的运算,然后把得出的数加在一起的过程



3 ) .  二进制转十进制的快捷算法  ? 

例如 :   1 1 0 0 1 0 1 0

分析 : 由原理得出 每个下标所代表一个 2 的幂次方 ,那么先确定 每个数值 下边的值分别为 :    128  64  32  16 8 4 2 1

                    2  8  64 128   =  202  ,发现无误



4 ) . 计算器底层的运算都是通过二进制 的,以下有个小例子 : 

4.1 传统方式  : 5 +4 =9 

4.2 编程方式(十进制转二进制)  : 5 =  101  ; 4 = 100  ;   101 +100 = 1001 



         若看不懂请思考二进制加的 逢二进一 就可明白


    4.3 1001 ->将此二进制再转化为十进制 为  9  ,也就是结果了


5 ). 关于IP最大值为何是255 ? 


  原因 :  IP地址最大值是255,因为一字节有八个字符,若每位都为1 的话 ,最大值转化成十进制也就是255 ,也可以理解为一字节最大值为 255






小结 :  

           1.  无论是加减乘除,计算机所识别的二进制都是逢二进一

  


      十五.  进制转换(八进制和十六进制)

1 ) . 十进制转十六进制解题思路 ? 

1.1 十进制转二进制

1.2 二进制转十六进制

2 ) . 十六进制为何要拿四位为一组 ? 

因为  当 二进制的四位 都为最大值,也就是 1 时,换算成 十进制 是 15 ,而十六进制 是满16进1 的规则


3 ) .  案例 : 十进制 90  转换为 十六进制  

第一步 : 十进制 : 90 -->二进制 :  0101 1010

第二步 : 二进制 :  0101 1010 --> 十六进制 :   5A

解题思路 : 

   0101 十进制代表 =   5

  1010  十进制代表 = 10

结果目前为  :   5    +  10  

而 十六进制中的A代表 10 ,因此结果为  5A



4 ) . 为何 后来衍生的都是 八进制,十进制, 十六进制,而没有 就九进制呢?

因为他们都是基于二进制的偶数增长,换算方便


5 ). 十进制90转化为八进制?


第一步 : 十进制 : 90 -->二进制 :  0101 1010

第二步 : 二进制 :  01 011 010 --> 八进制 :  

解题思路 : 


001  十进制代表 =   1   --> 前边可补0占位,但不可补1

011  十进制代表 =   3

010 十进制代表  =   2   

  

八进制结果为  :  1 +3 +2 = 132 ,

 
 
小结 :  

           1.  记住十六进制是 四个二进制位代表一位即可,因为四个二进制位的最大值为15
        
           2.  记住八进制是三个二进制位代表一位即可,因为三个二进制位的最大值是7


   3 .记住十进制如何转化为其它进制,最简便的方式就是通过二进制

   
 

     十六 进制转换(负数二进制)

1 ) . 负数计算的原理 : 

1.1 例子 :  6  ,  -6 就是将6的二进制取反+1  ,取反意思是 : 将0变成1 ,将1变成0 


 
小结 :  

           1.  负数的最高位是1 ,正数的最高位是 0
        
 
     十七 .   变量

1 ) . 简述 : 

1.1 什么是变量?  变量就是将不确定的数据进行存储,也就是需要在内存中开辟一个空间

1.2 如何开辟空间 ?  开辟空间是通过明确定义数据类型,变量名称,数据来完成的 

2 ) . 定义变量的格式 : --> 数据类型  变量名 = 初始化值




3 ) . 常量与变量的数据类型 : 

  引入 : java是强类型语言,对每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的 内存空间

3.1 基本数据类型

[1] 数值型

①整数类型(byte(1字节),short(2字节),int(4字节),long(8字节))

②浮点类型(float(4字节),double(8字节))  --> 双精度和单精度的最大区别是 精确程度不同

[2] 字符型(char)

[3]布尔型(double)

3.2 引用数据类型

[1] 类(class)

[2] 接口(interface)

[3] 数组([])


  ps  : 整数默认int ,小数默认double


4 ) . 为何cpu中会有缓存,为何缓存越大越好?

CPU缓存 (Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。

5 ) .何时定义变量?

在数据不确定的时候,需要对数据进行存储时,就定义一个变量协助完成动作
 

小结 :  

           1.  若常量是固定不变的值,则变量则是可变的值
        
           2.  通过new 开辟一个空间的维度 : 

2.1  名称 : 变量名

2.2 空间类型 :  数据类型

2.3 空间内容 : 初始化值

     

       十八. 类型转换


1 ) . 分类 : 

1.1 自动类型转换(隐式类型转换)

1.2 强制类型转换(显式类型转换)



2 ) . 类型转换原理 :   自动类型转换属于 少--> 多 ,  强制类型转换 属于 多 --> 少   


3 ) .   应用场景 : 

3.1 当数据无需那么精确时,可以进行类型转换

4 ) . 小案例 : 

4.1 byte强制类型的转换



4.1 char强制类型的转换


        正常运算结果应该是 77 +1 = 78  ; 由于加了强制类型转换,因此 结果为 78 在 AISSC表中对应的英文字符




小结 :  

           1.      java有自动类型向上提升,但是没有自动类型向下强制转换(递减),因此强制转换需要人工操作
        
   

      十九. 算数运算符  -->常见的+-*/在此就不列举了

1 ) . \ --> 简单案例 :   -->结果为 2000

 

  --> 原因是因为  第一次除法结果为 double 类型,因此 省略为 2  ,而后第二次 2* 1000 =2000咯


2 ) .  %--> 取模 -->简单理解就是取余数,若 没余数则默认 0 

2.1  取模结果规律 :    左边若小于右边则 结果为 左边  ;  左边若等于右边 则结果为零 ;     右边为1  则结果也为 0; 

2.2 若取模出现负数, 则 负数只看 左边 ,也就是被模的数

3 ) .  a++与++a 

3.1 解释 : 

[1]a++ --> 指给a这个变量值进行一次 +1 操作,并将结果赋给 a   形同于  a =a+1;

[2] ++a --> 指给a这个变量值进行一次+1操作,并将结果赋给a 

3.2 区别 : 

[1] ++a    先对内自增,再对外进行逻辑事件

[2] a ++   先对外进行逻辑事件,再对内自增


4 ) . +   :       区分 :   a +b -->加法运算    ;    "a"+"b"--> 字符串拼接


4.1    System.out.println(a+","+b);

4.2    System.out.println("a="+a);

 
小结 :  

           1.  字符串数据和任何数据使用+ 都是相连接,最终都会变成字符串
        
     
 

     二十 .转义运算符 

1 ) . 简述 : 通过 \ 来转变后面字母或者符号的含义

2 ) . 常见的转移字符 : 

2.1  \n  -->换行   -->    System.out.println("hello \n world");
        

2.2  \b  --> 退格,相当于backspace

2.3  \r   --> 按下空格键,window系统,回车符是由两个字符表示 \r\n 

2.4  \t   --> 制表符,相当于tab键   -->    System.out.println("hello \t world");


3 ) .  经典案例  :

3.1      System.out.println("\\hello\\");    -->  输出 \hello\

3.2     System.out.println("\"你好\"");  --> 输出 "你好"
 
 
小结 :  

           1.   char ch='我'   --> 一个汉字两个字符,一个char 两个字符,因此可放置
        
      
          
 二十一 .     赋值和比较运算符

1 ) . 简述 : 

赋值运算符 : =  ,+= , - = ,  *= , / = , %=  

比较运算符 : == , != , < ,> ,<=  , >= ,instanceof


                                  比较运算符
运算符
运算
范例
结果
==
相等于
4 ==3
false
!=
不等于
 4!=3
true
<
小于
4<3
false
>
大于
4>3
true
<=
小于等于
4 <=3
false
>=
大于等于
4 >=3
false
instanceof
检查是否是类的对象
"hello" instanceof String
true

注意 : 

[1]比较运算符的结果都是boolean型,也就是要么是true,要么是false

[2]比较运算符的"==" 不能误写成"="




2 ) .谨记 : 

x += 4    形同于  x =x+4

x -= 4    形同于   x=x-4

x *= 4    形同于   x=x*4

x /= 4    形同于   x=x/4

x %= 4    形同于   x=x%4

3 ) .  s=s+5 与 s+=5 的区别 :   short s;

3.1 s=s+5  -->编译失败, 两次运算 :  先运算s+5 ,而后再赋值给 s,由于 赋值时是int类型,而s是short类型因此失败

3.2 s+=5  -->编译成功,  一次运算 :  直接把合值赋给 s  ,即可以自动强转,可以与 s= 5 放一起理解


4 ) . ps :

4.1 int a,b,c ;  --> 同时定义了三个变量,但未初始化

4.2 int  a=b=c=5;  --> 同时定义了三个变量,并初始化值一致为 5

 
 

       二十二.  逻辑运算符


1 ) . 简述 :  逻辑-->指一种关系--> 逻辑运算符常用于连接boolean类型的表达式

逻辑运算符

运算符
运算
范例
结果
个人理解
&
AND(与)
false&true
false
两边同时为真则为true
|
OR(或)
false|true
true
两边同时为假则为false
^
XOR(亦或)
true^false
true
两边同时为真或同时为假则为false
!
Not(非)
!true
false
假则为真,真则为
&&
AND(短路)
false&&true
false

||
OR(短路)
false||true
true




2 ) .  &  与 && 的特点区分 : 

& :   -->   无论左边是true还是false,右边都运算

&& :  --> 当左边为false时,右边不运算

3 ) .  | 与 || 的特点区分 :

| : -->   两边都参与运算

|| : --> 当左边为true,右边不运算

  

      二十三.  位移运算符(左移,右移)

1 ) . 简述 : 位移运算是直接与二进制参与运算


位移运算符 


运算符
运算
范例
个人理解
<<
左移
3<<2=12-->3*2*2=12
 相当于乘以 2 的倍数 
>>
右移
3>>1=1 -->3/2=1
相当于除以 2的倍数
>>>
无符号右移
3>>>1=1-->3/2=1
 意思是不识别二进制开头是 0 还是1 
&
与运算
6&3=2
通过&拿二进制进行对比比较,1为真,0为假
|
或运算
6|3=7
通过|拿二进制进行对比比较,1为真,0为假
^
异或运算
6^3=5
通过^拿二进制进行对比比较,1为真,0为假
~
反码
~6=-7
指将数值6的二进制全部反转,1为0,0为1




2 ) .  >>  与 >>> 的区别  

2.1 >>  :  最高位补什么由原有数据的最高位值而定;若最高位是0,右移后,则用0 补空位;若最高位是1 ,右移后,用1补空位

2.2 >>> :  无论最高位是什么,右移后 ,都用 0补 



3 ) .  ^  加密  :   

现象发现  :  7 ^ 5 ^ 5 = 7 

得出结论 :  一个数异或同一个数两次,结果还是那个数

拓展延伸 : 通过 ^ 可以进行简单的加密 ,我们只需持有 秘钥 即可

 
小结 :  

           1.  左移或右移 N位,就是对乘以或除以2的N次幂
        
           2.  位移运算是最快的运算方式

           3. 解密的难点在于加密的规律及数值

          

    二十  四.  位运算符(与-或-异或)


1 ) .  详情见上一章

 
 
    二十 五 位运算符(练习)

1 ) . 最有效率的方式算出2乘以8等于几? 

[1]普通人 :  2 * 8 =16     运算方式

[2] 编程员 :  2 << 3  =8         位移方式

2 ) . 对两个整数变量的值进行互换(不需要第三方变量)

int n=3 ,m=8 ;

[1] 第一种方式 : 通过第三方变量

int x =0;

x=n;

n=m;

m=x;

[2] 第二种方式 : 通过求和交换


n=m+n;

m=n-m;

n-n-m;




class day03
{
    public static void main(String[] args)
    {
    
       int m=8,n=3;   
       
           System.out.println("m="+m+",n="+n);
       
       m=m+n;  //若n和m的值非常大,则容易超出int范围,损失精度
       
       n=m-n;
       
       m=m-n;
       
       
        System.out.println("m="+m+",n="+n);
    
    }
 
    
}


[3] 第三种方式 : 通过异或运算


class day03
{
    public static void main(String[] args)
    {
    
       int m=8,n=3;
       
           System.out.println("m="+m+",n="+n);
  
        m = m^n;  

       n = n^m; // n^(m^n)

       m = n^m; //(n^m)^m
       
      
        System.out.println("m="+m+",n="+n);
    
    }
    
    
    
    
    
}


 
小结 :  

           1.  第三方变量是编程员的方式,求和交换是超出范围的方式,异或运算是技巧型方式
        
    




第一章总结  :    

         重点 :         Java语言的基础组成 :    关键字   ,标识符, 注释 ,变量和常量  ,运算符,  语句,  函数,  数组

心得  :   java语言与其他语言最大的区别之处是表现形式的不同,最大的相同之处在于思想,在于基础组成结构

问题 :    进制是先有10进制还是先有16进制 ?  
  
        











你可能感兴趣的:(技术)