java基础回顾

基础入门

人与计算机的交互方式:

图形化的交互方式:操作简单, 功能强大。 


dos命令(命令行)的交互方式: 需要记忆大量的命令,功能弱小。

dos命令的交互方式需要一个控制台窗口:

打开控制台的方式:
    方式一:  开始--------> 所有程序----------> 附件 ------------> 命令提示符窗口 

    方式二: 开始--------> 在输入框内输入"cmd"命令回车即可

常见的dos命令:
盘: :进入指定的盘的根目录。
dir :列出当前控制台所在的路径下的所有文件以及文件夹。
cd 路径 :进入到指定的路径下。
cd / :返回当前路径下的根目录。
cd .. : 返回上一级目录。
md 文件夹的名称 : 创建一个文件夹。只会创建一个文件夹。不会创建文件 的。
rd 文件夹的名称 : 删除一个指定名字的文件夹。 注意: rd命令不能用于删除非空的文件夹。

echo 数据>文件          : 创建一个文件并且写入数据。
type 文件名             : 查看指定文件的数据。
del  文件名             : 删除指定文件名的文件。  注意: del命令后面如果跟的 是一个文件夹的名称,那么就是删除该文件夹中所有文件,


*                       :通配符,通配符可以匹配任何的文件名。。
cls                     :清屏(清除以前执行过的命令)
tab                     : 内容补全。
上下方向键              : 找回之前敲过的命令。
exit                    :关闭当前窗口。

计算机语言: 与计算机交互的语言。

从历史的角度: 
机器语言: 1 10  0010101


汇编语言: 通过大量的单词代替了计算机的指令      1 1 add 


高级计算机语言    java \ c  \c++ \ javascript \ php \c# \ object o

java的发展历史:

1995诞生 , java是一门面向互联网的计算机语言。  雏形

java语言的重要特性之—————-> 跨平台 平台: 操作系统。

跨平台: 一次编译,到处运行。

java的环境搭建:

JRE: java运行环境。   JRE  = java 虚拟机  +  核心类库(辅助java虚拟机运行的文件) 


JDK: java开发工具集.   JDK =  java开发工具 + jre. 

JDK 的安装路径不准出现中文或者是空格。

jdk的目录介绍:

  bin :  存放的就是java开发工具的可执行文件。
  db:     sum公司自带的一个数据库。
  include:  存储的是本地方法的文件。 
  jre:     java虚拟机的文件夹
  lib :    核心类库文件。 
  src :    源代码文件。  java语言是开源的。

目前要使用到的java开发工具:

javac.exe : 启动java编译器对java源文件进行编译

使用格式:
    javac java源文件.

java.exe : 启动java虚拟机解释并执行指定的class文件。

使用格式:
    java  class文件  注意: 不需要后缀名。 

编写java文件的步骤:

第一步: 新建一个txt文件,然后把后缀名改成java即可。

第二步: java中的代码都必须要写在类上,java中的代码是以类作为单位 的。 

    类的定义格式: 

        class 类名{
            大括号中的代码就是一个类的范围。在该打括号中即可写java代码。

        }


第三步: 要编写一个主方法。  主方法是一个程序的主入口,代码就是从主方法上开始执行的。

    主方法的写法是固定的:

        public static void main(String[] args){

        }   


第四步: 启动javac.exe该工具编译 java源文件。

问题: 每次编译的时候都需要写上java源文件的完整路径信息。 烦!!!    javac  java源文件的完整路径

目前如果我可以让javac这个工具在任何路径下都可以找到,那么该问题是否解决了?    

解决方案: 把javac所在的路径保存到path的环境变量上。

在控制台窗口执行可执行文件的原理:
在控制台上编写一个可执行文件的命令,首先windows会在控制台当前所在的窗口下去搜索是否存在该可执行文件,
如果存在,那么马上执行该文件,如果不存在当前路径下,然后还会去到系统 的path环境变量下去搜索path环境变量
所保存的路径下是否存在该文件。

path环境变量的打开方式:
右击
计算机————–> 属性 ————->高级系统设置 ———–>高级 ———–> 环境变量 —–> path环境变量

为什么要配置path环境变量? 为了让控制台在任何路径下都可以找到java的开发工具。

path环境变量信息:

%SystemRoot%\system32;
%SystemRoot%;%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

问题: 我们要尽量的避免去修改path的环境变量信息,因为path环境变量保存了系统自带的信息,如果一旦不小心删除失误,那么就会导致系统部分功能无法使用,

解决方案: 创建一个新的环境变量,然后使用新的环境变量保存会发生变化的路径信息,然后在path环境变量中引用新的环境变量信息即可。
会发生的路径
D:\JDK\JDK\bin—————–>D:\JDK\JDK

注意: 双百分号+ 环境变量的名称这个是引用了环境变量的信息。

为什么要配置JAVA_HOME的环境变量信息? 为了避免频繁的修改path环境变量信息。

有时候我们使用jdk对应版本的时候只会使用一次,然后就不再使用了,那么这时候我们可以通过set命令配置临时环境变量信息。

临时环境变量: 临时环境变量仅对于当前控制台窗口起作用。

set的命令的用法:
set : 查看所有的环境变量信息。
set 环境变量名 :查看指定的环境变量。
set 环境变量名=路径 :修改指定的环境变量信息。
set 环境变量名= :清空指定的环境变量信息。
set 环境变量名 = 新路径;%引用的环境变量名% :在原有的环境变量信息基础上添加新的路径信息。

第一个hello world例子常见的问题:

1. 找不到文件。   
    出现的原因:      
        1. 后缀名写错了,没有改成java。
        2. 在编译的时候写错了文件名。

2. 错误: 找不到符号: java是严格区分大小写的。

    出现的原因: 写错了单词或者是大小写写错了。


3, 'javac' 不是内部或外部命令,也不是可运行的程序或批处理文件。
    出现的原因: 没有配置path环境变量,或者是配置错误。


4. 类命可以与java源文件名不一致,class文件的名字是以类名一致的。

java.exe: 启动java虚拟机解释并执行对应的class文件。

classpath环境变量信息:

classpath的作用: 我们在控制台上启动java虚拟机的时候,

    情况1: 如果没有配置classpath的环境变量信息,那么java虚拟机会在当前控制台所在的路径下去搜索是否存在指定的class文件,如果没有搜索到那么就报错。


    情况2: 如果已经配置了classpath的环境变量信息,那么java虚拟机在启动的时候就会根据classpath指定的路径下去搜索指定的class文件。

配置classpath环境变量信息的时候加上分号与不加分号的区别
不加上分号那么java虚拟机就仅会在classpath指定的路径下去搜索,不会再当前路径下去搜索。
如果加上了分号,那么java虚拟机除了在classpath指定的路径下去去搜索以外,还会在当前路径下去搜索。

classpath环境变量

  1. classpath的作用: 作用是指定类搜索路径,保存class文件的存储路径。要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。
  2. 如何设置当前目录(.)
    set classpath=.;设置路径set classpath=设置路径;.有什么区别?
    “.”在前面的时候,java虚拟机会先从当前路径去寻找class文件,然后再到指定的路径去需找。如果”.”在后面,java虚拟机则会先寻找指定好的路径,然后再在当前的路径去寻找。
    设置classpath的时候要加上 ; 就会在当前目录下查找。
  3. JAVA CLASSPATH 和PATH的区别
    PATH:用来指定 java虚拟机(JVM) 所在在目录告诉java虚拟机,因为我们要常用到java给我们提供的一些工具对原代码进行一些处理或者是提取原代码的信息。
    CLASSPATH:用来指定我们自己所写的或要用到的类文件(.class文件) 所在的目录。

注意: 不建议大家配置classpath的环境变量信息。

jre = java虚拟机+ 核心类库

变量,关键字

关键字的概述
Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名。

常见的关键字

备注:不必死记硬背,如果使用关键字作为标识符,编译器能提示错误。
goto 是java的保留关键字,意思是java并没有使用goto,以后是否使用未定。

标识符

什么是标识符

就是程序员在定义java程序时,自定义的一些名字,例如helloworld 程序里关键字class 后跟的Demo,就是我们定义的类名。类名就属于标识符的一种。
标识符除了应用在类名上,还可以用在变量、函数名、包名上。(要求同学们先记住,以后会详细见到这些)。

标识符必须遵循以下规则

  1. 标识符由26个英文字符大小写(a~zA~Z)、数字(0~9)、下划线(_)和美元符号($)组成。
  2. 不能以数字开头,不能是关键字
  3. 严格区分大小写
  4. 标识符的可以为任意长度

Java中的标识符命名规范

  1. 包名
    多个单词组成时所有字母小写(例:package com.itcast)
  2. 类名和接口
    多个单词组成时所有单词的首字母大写(例:HelloWorld)
  3. 变量名和函数名
    多个单词组成时第一个单词首字母小写,其他单词首字母大写(例:lastAccessTime、getTime)。
  4. 常量名
    多个单词组成时,字母全部大写,多个单词之间使用_分隔(例:INTEGER_CACHE)
    注意:只是为了增加规范性、可读性而做的一种约定,标识符在定义的时候最 好见名知意,提高代码阅读性。

注释

注释的作用

通过注释提高程序的可读性,是java程序的条理更加清晰,易于区分代码行与注释行。另外通常在程序开头加入作者,时间,版本,要实现的功能等内容注释,方便后来的维护以及程序员的交流。

注释的种类

1.单行注释(line comment)用//表示,编译器看到//会忽略该行//后的所文本
2.多行注释(block comment)用/**/表示,编译器看到/*时会搜索接下来的*/,忽略掉/**/之间的文本。
3.文档注释用/* /表示,是java特有的注释,其中注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档

注意:多行注释中可以嵌套单行注释,多行注释不能嵌套多行注释。

文档注释 (编写软件说明书)
1. 需要使用jdk给我们提供的javadoc工具生成一个html的说明文档。
2. 只能抽取public的属性或者方法内容。
格式:
Javadoc –d 指定存储文档的路径 -version –author(可选) 目标文件

@author 作者
@version 版本
@param 方法的参数
@return 返回值

注释的使用细节:
三种注释可以出现在程序的任何地方,但是不推荐找任意位置。
1. 编程习惯:

    1. 给那条语句进行说明,注释应该写在该语句的旁边。
    2. 单行注释一般写在语句的后面多行注释和文档注释一般写在语句的上面
    注意:文档注释只能出现在类、属性、方法的上面。

2 注释的嵌套

1.单行注释可以在单行注释里面。
2.多行注释不能嵌套在多行注释里面。

3 注释的调试作用

常量

常量的概述

常量是指在程序运行过程中其值不能改变的量。

常量类型

Java中常量的分类:
整数常量 : 所有整数
小数常量 : 所有小数
布尔常量 : 只有true和false
字符常量 :使用’’引起来的单个字符
字符串常量 :使用“”引起来的字符序列,“” 、“a” 、” ”
null常量 : 只有一个值null

char 类型

char类型表示的是单个字符类型,任何数据使用单引号括起来的都是表示字符。字符只能有一个字符,比如:普通的老百姓穿上军装就是军人。
注意:特殊字符的转义序列:转义字符
转义字符的概述:
特殊字符使用”\”把其转化成字符的本身输出,那么使用”\”的字符称作为转移字符。
需求:使用输出语句,打印出带引号的信息例如输出。
System.out.println(“teacher said”java is fun”“);编译是无法正常通过的。语法有错误,编译器读到第二个引号就认为是字符串的结束,剩余的不知道怎么处理。
如何解决这个问题:java中使用转义字符来表示特殊的字符。一个转义字符以反斜杠(\)开始。
问题:想要打印带引号的字符串怎么办,就可以使用反斜杠(\)后跟字符,这个反斜杠就是转义字符。
转义字符 名称 Unicode

\b Backspace (退格键) \u0008
\t Tab (Tab键盘) \u0009
\n Linefeed (换行) \u000A
\r Carriage Return(回车) \u000D
\ Backslash (反斜杠) \u005C
\’ Single Quote (单引号) \u0027
\” Double Quote (双引号) \u0022
\r 表示接受键盘输入,相当于按下回车。
\n 表示换行。
\t 制表符,相当于Table键
\b 退格键,相当于Back Space
\’ 单引号
\’’ 双引号
\ 表示一个斜跨
上述问问题解决:System.out.println(“teacher said\”java is fun\”“);
注意:换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符

boolean 类型

boolean由数学家Geogore Boole 发明
boolean 类型用来存储布尔值,在java中布尔值只有2个,true和false。
boolean flag=true;
flag=false;

Java中这8中基本数据类型都是小写的。(int long float double char string boolean)

进制的转换

进制:进制是一种记数方式 ,可以用有限的数字符号代表所有的数值。由特定的数值组成。

整型的表现形式

  1. 十进制: 都是以0-9这九个数字组成,不能以0开头。
  2. 二进制: 由0和1两个数字组成。
  3. 八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。
  4. 十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以ox开始。
进制的由来
 几乎每个民族最早都使用都十进制计数法,这是因为人类计数时自然而然地首先使用的是十个手指。 但是这不等于说只有十进制计数法一种计数方法。例如,世界各国在计算年月日时不约而同地使用“十二进制”12个月为一年又如:我国过去16两才算为一斤,这就是“十六进计数法”,一个星期七天,这个就是”七进制计算法”。 计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。 

如果要在计算机里面保存十进制的7.

十进制与二进制之间的转换

十进制转二进制的转换原理:除以2,反向取余数,直到商为0终止。
二进制转十进制的转换原理:就是用二进制的每一个乘以2的n次方,n从0开始,每次递增1。然后得出来的每个数相加

存在问题:书写特别长,不方便记忆。

十进制与八进制之间转换
  1. 八进制的由来
    二进位制在计算机内部使用是再自然不过的。但在人机交流上,二进位制有致命的弱点——数字的书写特别冗长。例如,十进位制的100000写成二进位制成为11000011010100000。为了解决这个问题,在计算机的理论和应用中还使用两种辅助的进位制——八进位制和十六进位制。二进位制的三个数位正好记为八进位制的一个数位,这样,数字长度就只有二进位制的三分之一,与十进位制记的数长度相差不多。例如,十进位制的100000写成八进位制就是303240。十六进位制的一个数位可以代表二进位制的四个数位,这样,一个字节正好是十六进位制的两个数位。十六进位制要求使用十六个不同的符号,除了0—9十个符号外,常用A、B、C、D、E、F六个符号分别代表(十进位制的)10、11、12、13、14、15。这样,十进位制的100000写成十六进位制就是186A0。

  2. 八进制的特点
    由数字0-7组成。即使用三个开关表示一个八进制数。
    10进制转换8进制原理:就是用十进制的数字不断除于8,取余数。

代码体现:

人使用的十进制 、 计算机底层处理的数据是二进制、八进制、十六进制,

那么如果给计算机输入不同的进制数据呢?

变量

变量的概述

用于存储可变数据的容器。

变量的数据类型

  1. 整型
    byte 代表一个字节的大小 8bit 2(8) -128~127 256
    short 代表两个字节的大小 16bit 2(16) -2(15)~2(15)-1
    int 代表四个字节的大小 32bit 2(32) -2(31)~2(31)-1
    long 代表八个字节的大小 64bit 2(64) -2(63)~2(63)-1
    如果一个数值没有采取特殊的处理,那么该整数默认的类型是int。
    可以使用数值后面添加L或小写L改变默认的整数类型。
  2. 浮点型
    float 代表四个字节的大小 32bit
    double 代表八个字节的大小 64bit
    java程序中所有的小数默认的类型是double类型,所以需要使用特殊的符号改变默认的小数类型。
  3. 字符型
    char 代表两个字节的大小 16bit 2(16)
    原理:将字符映射为码表中对应的十进制数据加以存储。
  4. 布尔型
    boolean 占一个字节。只有true与false两个值。
    6.2.2 变量的声明
    格式: 数据类型 变量名字1 , 变量名字2 ,……变量名字n ,;
    案例:
    int i 声明了一个整形的变量。
    double d 声明了一个double数据类型的变量
    float f 声明了一个float数据类型的变量。
    备注:变量名的首字母都一般都是以小写字母开始。

变量的初始化方式

初始化方式1: 数据类型 变量名字 = 数值。
初始化方式2: 数据类型 变量名字 , 变量名字 = 数值。
案例:
方式1: double d = 3.14;
方式2: double d ; d = 3.14 ;

java数据类型的转换

Java中可以进行不同数据类型的加减乘除运算吗?是可以的。在算术运算符中已经体验过如果两个整数(int)相除会去掉小数部分。如果需要保留小数部分,可以让除数或者被除数变为double类型的(5变为5.0)。其实Java是自动的将int的那个数变为了double类型了也就是Java自动的将整数变为了浮点数。例如5/2.0 其实是5.0/2.0

自动类型转换(也叫隐式类型转换)

可以将一个数赋值给更大数值范围的变量,例如可以经byte 变量赋值给short变量可以将short变量赋值给int变量可以将int变量赋值给long变量。

Java内部其实做了工作就是自动将数值进行了类型提升,就叫做自动类型转换(也叫隐式类型转换)

byte b = 1; //00000001
short s = b;  //00000000 00000001
int i = s;
long lon = i;
double d = lon; //1.0

自动类型转换(也叫隐式类型转换)
要实现自动类型的转换,需要满足两个条件,第一两种类型彼此兼容,第二目标类型取值范围必须大于源类型。所有的数字类型,包括整形和浮点型彼此都可以进行转换。

例如:

byte b=100;
int x=b;
System.out.println(x);//程序把b结果自动转换为int类型。

强制类型转换(也叫显式类型转换)

不可以将一个数值赋给范围更小数值范围的变量,除非进行类型转换。
byte b = 100;
b = b + 2;
System.out.println(b);
上述例子发生了什么,发生了类型转换。
b+2 遇到了加法运算,2默认是int类型,byte类型b变量存储的值自动类型提升为
了int类型。执行完加法运算后的结果就是int类型,想要将int的类型值放入到byte类型变量b中,无法放入,编译报错。

byte b=1;
b=(byte)(b+2);

当两种类型彼此不兼容,或者目标类型取值范围小于源类型(目标是byte源是int)
无法自动转换,此时就需要进行强制类型转换。

强制类型转换需要注意:

int a=128;
byte b=(byte)a;
System.out.println(b);//-128

类型转换的原理
可以把byte 理解为1两的碗,short 2两的碗,int 4两的碗,long 8两的碗。1两碗的满碗酒可以倒入 2两 4两 8两的碗中。但是 4两碗的酒倒入1两碗的酒就有一些问题。

什么时候要用强制类型转换
比如小数部分只想保留整数部分.
一定要清楚要转换的数据在转换后数据的范围内否则会损失精度.

表达式的数据类型自动提升

算术表达式,逻辑表达式
所有的byte型、short型和char的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型;
如果一个操作数是float型,计算结果就是float型;
如果一个操作数是double型,计算结果就是double型。
分析 System.out.println(‘a’+1)结果?
自动类型提升

byte b = 3;
int x = 4;
x = x + b;// b会自动提升为int 类型参与运算。
System.out.println(x);// 7

强制类型转换

byte b = 2;
/*
 * 强制类型转换,强制将b+2强制转换为byte类型,再赋值给b
 */
b = (byte) (b + 2); 
System.out.println(b);// 4

System.out.println(‘a’+1)结果

美国人为了让计算机识别他们生活中的文字,让二进制表示生活中的文字.所以一个字母代表了一个二进制.,二进制也有十进制的表现形式.,把生活中的字母都用数字来标识,例如97 代表a ,98 代表 b。打印’a’就把a作为输出显示,没有疑问。但是 ‘a’+1 有加号涉及到了运算。根据java自动类型提升规则,同样道理 char 提升为int 。就把’a’代表的数字体现了出来。a 表示的是97 97+1就是98; 那么 想要查看98 表示的char 是什么 怎么实现呢 ?就要用到刚才介绍的强制类型转换了 System.out.println(char(‘a’+1));就取到了98 在ASCII码表中表示的字符。大写A 和小写a 在 ASCII有不同的表现。还有一个概念字符’1’ 在ASCII中 不是数字 1,可以运行代码查看,到此就可以明白了char 类型,char类型也是可以参与运算的,为什么可以参与运算呢。因为字符在ASCII表中都有对应的数字体现。所有的计算机兼容ASCII。
System.out.println(‘a’+1); //98
System.out.println((char)(‘a’+1)); //b
补充问题:
int i=’a’+’b’;
System.out.println(i);//结果?
System.out.println(“hello”+’j’); //结果?
总结:
所有数值运算符都可以用在char型数据上,如果另一个操作数是一个数字或者字符,那么char会自动提升为int型,如果另一个操作数是字符串,那么字符就会和字符串相连。

java运算符

算术运算符

正负号(+,-)
除法
%取模
求余数

取模的正负取决与被除数:

1. 自增
(++)前自增:先自增完毕,再运算整个表达式,语句分号前面的都是运算表达式;

后自增,先运算完整个表达式(分号前面的都是表达式),再进行自增;

  备注:参与自增运算的操作数据每次会加1.

结论:
如果运算符在变量的前面,则该变量自增1或者自减1,然后返回的是变量的新值,如
果运算符在变量的后面,则变量也会自增或者自减1,但是返回的是变量原来的值。++在前就是先运算,再取值,++在后就是先取值,再运算。

赋值运算符

= , +=, -=, *=, /=, %=
运算符 运算 范例 结果
= 赋值 a=3,b=2 a=3,b=2
+= 加等于 a=3,b=3;a+=b; a=5,b=2;
-= 减等于 a=3,b=2,a-=b; a=1,b=2;
= 乘等于 a=3,b=2,a=b; a=6,b=2
/= 除等于 a=3,b=2,a/=b; a=1,b=2;
%= 模等于 a=3,b=2,a%=b; a=1,b=2

比较运算符

如何比较两个值?使用比较运算符 3和5谁大,在java中如何比较?
比较运算符比较的两边操作数,结果都是boolean的,只有true和false两种结果。
运算符 运算 例子 结果
== 相等于 4= =3 false
!= 不等于 4!= 3 true
< 小于 4 < 3 flase

大于 4>3 true
<= 小于等于 4<=3 false
= 大于等于 4>=3 true
Instanceof 检查是否是类的对象 “hello”instanceof String true
注意的细节:
1.使用比较运算符的时候,要求两种数据类型必须一致。
byte、short、char 会自动提升至int。

逻辑运算符

什么是逻辑运算符?连接比较运算符的符号称之为逻辑运算符。
逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。我们的比较运算符只能进行一次判断,对于对此判断无能为力,那么逻辑运算符就可以经将较运算符连接起来。

逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
“&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真右边不参与运算。
“ ^ ”异或与“|”或的不同之处是:当左右都为true时,结果为false。
& 与 | 或 ^ 异或 ! 非

位运算符

按位操作符用来操作整数基本数据类型中的单个比特(bit),就是二进制,按位操作符会对两个参数中对应的位(bit)执行布尔运算,最终生成一个结果。按位操作符来源于C语言面向底层的操作,Java设计的初衷是嵌入式电视机机顶盒,所以面向底层的操作也保留了下来。
任何信息在计算机中都是以二进制的形式保存的,”&”、“|”、“^”除了可以作为逻辑运算符也可以作为位运算符。位运算是直接对二进制进行运算。他们对两个操作数中的每一个二进制位都进行运算。例如int是由32个二进制数组成,因此使用位运算符可以对整数值的二进制数进行运算。
位(bit)运算符:
位运算符
运算符含义

& 与(AND)
| 或(OR)
^ 异或
~ 取反

运算符运算范例
<< 左移 3 << 2 = 12 --> 3*2*2=12
>> 右移 3 >> 1 = 1 --> 3/2=1
>>> 无符号右移 3 >>> 1 = 1 --> 3/2=1
& 与运算 6 & 3 = 2
| 或运算 6 | 3 = 7
^ 异或运算 6 ^ 3 = 5
~ 反码 ~6 = -7

位运算符的细节
<< 空位补0,被移除的高位丢弃,空缺位补0。
>> 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。
>>> 被移位二进制最高位无论是0或者是1,空缺位都用0补。
& 二进制位进行&运算,只有1&1时结果是1,否则是0;
| 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1;
^ 任何相同二进制位进行 ^ 运算,结果是0;1^1=0 , 0^0=0

三元运算符
格式
(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;

顺序语句

语句:使用分号分隔的代码称作为一个语句。

注意:没有写任何代码只是一个分号的时候,也是一条语句,称作空语句。

顺序语句就是按照从上往下的顺序执行的语句。

判断(if…else)

在我们找工作的过程中,要求两年工作经验以上且年龄超过30岁。
什么是判断语句:用于判断的语句叫判断语句。

if else 结构 简写格式: 变量 = (条件表达式)?表达式1:表达式2;
三元运算符:
好处:可以简化if else代码。
弊端:因为是一个运算符,所以运算完必须要有一个结果。

选择判断语句(switch)

switch语句
格式:
switch(表达式)
{
    case 取值1:
        执行语句;
        break;
    case 取值2:
        执行语句;
        break;
    …...
    default:
        执行语句;
        break;
}

switch语句特点:

1,switch语句选择的类型只有四种:byte,short,int , char。
2,case之间与default没有顺序。先判断所有的case,没有匹配的case执行
default。
3,switch语句停止的条件是遇到了break关键字或者结束switch语句的大括号。
4,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运
行可以执行的语句,直到遇到break或者switch结尾结束。
5,switch case中的值必须要与switch表达式的值具有相同的数据类型。而且case后跟的值必须是常量,不能跟变量。

备注:JDK7.0开始可以使用switch可以使用字符串类型的数据了.

While循环

需求:需要打印一行字符串”hello gzitcast”,100次
就需要将该语句打印100遍System.out.println(“hello gzitcast”);
那么如何解决该问题?
Java提供个一个称之为循环的结构,用来控制一个操作的重复执行。

Java提供了三种类型的循环语句:while循环,do-while循环和for循环。

while语句格式:

while(条件表达式)
{
执行语句;
}

do while 语句

do while语句格式:
do
{
执行语句;
}while(条件表达式);
do while特点是条件无论是否满足,
循环体至少被执行一次。

for 循环

1.格式:for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;
}

最后总结

1、for里面的两个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条件不满足为止。
2、while与for可以互换,区别在于for为了循环而定义的变量在for循环结束时就在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。
3、最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。推荐使用while(true)

break、continue关键字

break关键字:break 语句用于终止最近的封闭循环或它所在的 switch 语句。控制传递给终止语句后面的语句(如果有的话)。
适用:for循环 、 switch两种循环语句。
break的用法:

  1. 单独使用。
  2. 与标签一起使用。(标签:即一个名字,满足标识符的条件即可)。
    使用细节: 不要再break语句之后,编写其他语句,永远都执行不到,编译报错。

continue关键字:语句将控制权传递给它所在的封闭迭代语句的下一次迭代。(跳出本循环,执行下一次循环)。
适用于:while 、 do while 、 for循环语句
使用细节:

 1. 如果continue出现在循环的末尾(最后一条语句),那么可以省略。
 2. 如果continue出现在循环的第一条语句,那么后面的语句都无法执行,所以编译报错。
 3. 可以结合标记使用。

函数

概述

发现不断进行加法运算,为了提高代码的复用性,就把该功能独立封装成一段独立的小程序,当下次需要执行加法运算的时候,就可以直接调用这个段小程序即可,那么这种封装形形式的具体表现形式则称作函数。

函数的格式

修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…)
    {
            执行语句;
            return 返回值;
    }

返回值类型: 运行这段程序得出的一个运算结果,结果类型,如果函数没有返回值则用void
来表示该函数没有返回值。
函数名:仅仅是一个标识符,可以随意起名字。
形式参数:是一个变量,用于存储调用函数传递进来的实际参数。
实际参数:传递给形式参数的具体数值。
返回值:返回给调用者。

定义函数:
1:是否有未知内容参与运算
2:是否有运算结果(返回值)

注意:main方法是程序的入口由虚拟机调用,方法和方法之间不能嵌套,方法之间通过调用来使用。

函数的特点

1、定义函数可以将功能代码进行封装
2、便于对该功能进行复用
3、函数只有被调用才会被执行
4、函数的出现提高了代码的复用性
5、对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
注意:
函数中只能调用函数,不可以在函数内部定义函数。
定义函数时,函数的结果应该返回给调用者,交由调用者处理。

函数的使用注意事项:
1. 函数中只能调用函数,不能定义函数,没有定义函数之前,不能调用函数。
2. 输出语句只能对有具体返回结果的函数的进行打印。
3. 返回值类型是void的函数,是不可以被输出语句打印的。
4. 函数需要实现功能,那么函数只实现所需功能即可,不要实现不需要的功能。

函数的重载

1、函数重载的定义:在同一个类中,有一个以上的同名函数,只要函数的参数列表或参数类型不一样即可,与返回值无关, 这些统称为方法的重载。
2、函数的重载存在的原因:为了增强方法的阅读性,优化了程序设计。

数组

概念
同一种类型数据的集合。其实数组就是一个容器。
数组的好处
可以自动给数组中的元素从0开始编号,方便操作这些元素。
格式1
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
格式2
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};

数组的概念

同一种类型数据的集合。其实数组就是一个容器。运算的时候有很多数据参与运算,那么首先需要做的是什么.不是如何运算而是如何保存这些数据以便于后期的运算,那么数组就是一种用于存储数据的方式,能存数据的地方我们称之为容器,容器里装的东西就是数组的元素, 数组可以装任意类型的数据,虽然可以装任意类型的数据,但是定义好的数组只能装一种元素, 也就是数组一旦定义,那么里边存储的数据类型也就确定了。

数组的好处

存数据和不存数据有什么区别吗?数组的最大好处就是能都给存储进来的元素自动进行编号. 注意编号是从0开始。方便操作这些数据。

例如 学生的编号,使用学号就可以找到对应的学生。

数组的格式

 元素类型[] 数组名 = new 元素类型[元素个数或数组长度];

示例:int[] arr = new int[5];

案例:
需求: 想定义一个可以存储3个整数的容器
实现:
1声明数组变量
为了使用数组必须在程序中声明数组,并指定数组的元素类型
=左半部分:
先写左边明确了元素类型 是int ,容器使用数组,那么如何来标识数组?.那么用一个特殊的符号[]中括号来表示。想要使用数组是需要给数组起一个名字的,那么我们在这里给这个数组起名字为x .接着跟上等号。
代码体现:
int [] x
注意:int x[] 也是一种创建数组的格式。推荐使用int [] x 的形式声明数组。
2创建数组
=右半部分:
要使用一个新的关键字.叫做new。new 用来在内存中产生一个容器实体,数据要存储是需要有空间的,存储很多数据的空间用new 操作符来开辟,new int[3]; 这个3是元素的个数。右边这部分就是在内存中定义了一个真实存在的数组,能存储3个元素。
new int[3] 做了两件事情,首先使用new int[3] 创建了一个数组,然后把这个数组的引用赋值给数组变量x。

int [] x=new int[3];
x 是什么类型?
任何一个变量都得有自己的数据类型。注意这个x 不是int 类型的 。int 代表的是容器里边元素的类型。那么x 是数组类型的。
数组是一种单独的数据类型。数据类型分为2大派,分为基本数据类型和引用数据类型。 第二大派是引用数据类型。那么大家现在已经接触到了引用数据类型三种当中的一种。就是数组类型 [] 中括号就代表数组。
4、int[] arr = new int[5];在内存中发生了什么?
内存任何一个程序,运行的时候都需要在内存中开辟空间.int[] arr = new int[5]; 这个程序在内存中是什么样?这就涉及到了java虚拟机在执行程序时所开辟的空间,那么java开辟启动了多少空间呢?继续学习java的内存结构。

数组的定义

格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};
注意:给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。创建数组之后不能修改数组的大小。可以使用length 属性获取数组的大小。

数组初始化

初始化方式1:不使用运算符new
int[] arr = { 1, 2, 3, 4, 5 };
int[] arr2 = new int[] { 1, 2, 3, 4, 5 };
初始化方式2:
int[] arr3=new int[3];
arr3[0]=1;
arr3[1]=5;
arr3[2]=6;

数组:
什么时候使用数组:当元素较多时为了方便操作这些数组,会先进行来临时存储,所使用的容器就是数组。
特点:
数组长度是固定的。

二维数组

Arrays的使用

遍历: toString() 将数组的元素以字符串的形式返回
排序: sort() 将数组按照升序排列
查找: binarySearch()在指定数组中查找指定元素,返回元素的索引,如果没有找到返回(-插入点-1) 注意:使用查找的功能的时候,数组一定要先排序。
二维数组:

吸烟:  
   没钱       零买   1根                 一个变量
   稍微有钱   一包   一维数组           20根变量
   很有钱     一条   10包(二维数组)        二维数组

二维数组:实质就是存储是一维数组。
数组定义:
数组类型[][] 数组名 = new 数组类型[一维数组的个数][每一个一维数组中元素的个数];

数组的初始化:
静态初始化:
int [][] a = new int[][]{ {12,34,45,89},{34,56,78,10},{1,3,6,4} };
动态初始化:循环赋值完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值