北京尚学堂JAVASE课程

一、java历史-特点

1.计算机语言发展史

何为要发明计算机:为了进行科学计算,复杂的科学计算。
人类如何和计算机沟通,去分配任务。 通过计算机语言 实现 人类和计算机的交流。计算机语言的发展史:大概的经历了三个阶段1:机器语言:计算机可以直接识别的语言。计算机可以直接识别的语言是二进制的语言。任何的计算机系统都有自己的指令的集合。计算机只能识别自己的指令集合中的二进制指令形式。01011 + 1+:10101010 0001 0001优点:运行的效率快。缺点:可读性很差,编写程序的门槛很高。2:汇编语言:指令集中每一个指令都使用了一个 字符序列来代替。1 + 1ADD 0001 0001   糖语法优点:代码可读性增强了,指令也更容易记忆了。缺点:多了一个编译的过程。3:高级语言: c  c++  java  c#1 + 1优点:开发的效率高了,可读性好了。学习的门槛降低了。缺点:需要将更高级的语法转换为 机器语言的形式。(编译 or  解释)。影响了最终的效率。

2.java历史和版本

1991年,Sun公司的Green项目,Oak
1995年,推出Java测试版
1996年,JDK1.0
1997年,JDK1.1
1998年,JDK1.2,大大改进了早期版本的缺陷,是一个革命性的版本,更名为Java2
1999 Java被分成J2SE、J2EE 和J2ME,JSP/Servlet技术诞生J2SE:java 2 standard edtion。针对客户端,桌面程序开发的。标准版。
J2EE:java 2 Enterprise edtion  针对服务器端开发的。企业版。
J2ME:java 2 micro edtion 针对手持设备开发的。微型版。2004年,J2SE 5.0 (1.5.0)  Tiger老虎.为了表示这个版本的重要性,J2SE1.5更名为J2SE5.0。
2006年,J2SE 6.0 (1.6.0)  Mustang野马.此时,Java的各种版本被更名,取消其中的数字"2":J2EE更名为Java EE, J2SE更名为Java SE,J2ME更名为Java ME
2009年4月20日甲骨文收购Sun公司,交易价格达74亿美元
2011年,JavaSE7.0
2014年,JavaSE8.0

3.java特点

了解
特点:Java是简单的:
不再有#include 和#define 等预处理功能
不再有struct,union及typedef
不再有函数、
不再有指针、不再有多重继承
不再有goto
不再有操作符重载(Operatior Overloading)
不再有全局变量           取消自动类型转换,要求强制转换
不再有手动内存管理Java是安全的:取消了指针,自动内存回收。Java是完全面向对象的:继承、封装、多态Java是健壮的:Java的强制类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证java 最大的特点和优势。
java 的跨平台。

4.java跨平台原理

1) C/C++语言都直接编译成针对特定平台机器码。如果要跨平台,需要使用相应的编译器重新编译。

2) Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行。解释是通过Java虚拟机来执行的。

3) 字节码文件不面向任何具体平台,只面向虚拟机。

4) Java虚拟机是可运行Java字节码文件的虚拟计算机。不同平台的虚拟机是不同的,但它们都提供了相同的接口。

5) Java语言具有一次编译,到处运行的特点。就是说编译后的.class可以跨平台运行,前提是该平台具有相应的Java虚拟机。但是性能比C/C++要低。

6) Java的跨平台原理决定了其性能没有C/C++高

5.jvm 的作用简介

jvm:java virtual machine。

作用:
1:jvm 负责管理内存。分配内存,回收内存。
2:程序代码的加载。
3:解释字节码到机器码给cpu去执行。

6.jdk

jdk: java development toolkit
java 开发工具包。

需要的开发的主要的工具:编写代码的环境(记事本)、编译的环境(编译器)、解释执行的环境(解释器)。

jdk 安装好之后,编译的环境,还有运行的环境 jvm 都安装完毕。

jre:java runtime environment。java 运行环境。

jdk 目录:
bin: binary javac.exe 编译工具 java.exe 解释器

安装jdk的要求:
安装 jdk1.8 版本。
不要安装多个 jdk 版本。
最好默认安装。

7.dos

1:编写源代码 注意保存。 ctrl+s
2: 使用编译器 javac.exe 编译源代码。
要借住 cmd 窗口。来使用编译器 编译源代码。

dos: disk operating system 磁盘操作系统。

在 windows 系统下 的 cmd.exe 可执行文件,是使用软件模拟的 dos 操作系统。

dos:是一个靠命令行来完成所有的操作的系统。

如何在windows 平台上 运行 dos 界面程序
cmd:command
1: 在开始菜单搜索处输入cmd 回车即可。
2:按windows键+R键 弹出 运行界面,输入cmd 回车。

内部指令:属于cmd 程序的内部的指令,内置指令。随着cmd 的启动就可以直接使用了。
外部指令:通常对应着磁盘上的一个可执行的文件。

要通过cmd 窗口 运行使用 javac.exe ???

认识 dos 操作系统的一些常用的指令

可以通过 指令 /? 了解当前指令的用法
例如:cd /? 回车

1:切换目录的指令
cd (change dirctory).
chdir

cd \ 回到当前目录的根目录。

2:切换盘符:盘符:回车

.. :代表当前目录的上一级目录
. :代表当前目录

3:dir (dirctory):显示当前目录下的所有的文件和目录的。

4:cls 清屏 clear screen

5:start: 开启另外一个dos窗口

6 : exit 退出当前dos窗口

了解
7:md | mkdir 创建目录

8:rd /s /q 目录

9:del 删除文件
del 删除所有文件 del *.* :
* 通配符 代表任意个字符
?:代表一个字符

10:copy 复制文件 copy 源文件路径 目的路径
copy c:\class\a.java d:\class\b.java

11 : move 剪切。

12 : ren 重命名 ren 源文件名字 新文件名字

快捷键:
TAB:自动补齐
上下箭头:快速使用之前使用过的命令。

8.第一个java程序

通过 dos 窗口 编译源代码。javac  HelloWorld.java
回车:首先会在当前目录下找javac.exe ,如果当前目录下没有,会去环境变量 配置的path 的一个目录集合中去挨个查找。配置环境变量 path。将 javac.exe 所在的目录添加到 path 中去。配置环境变量的作用:
建议只配置path。
为了在 cmd 窗口中可以直接使用 javac 和 java 外部命令。public class HelloWorld{public static void main(String[] args){System.out.println("Hello World!");}
}public:java 的权限修饰符。
class:java的关键字
HelloWorld:类的名字,首字符大写。
public static void main(String[] args):入口方法,main 方法。格式是固定的。程序开始执行的地方。
将需要执行的代码 写到 main 方法中。
System.out.println("Hello World!");
将双引号中的内容(字符串)原样输出到cmd 窗口。还输出了一个换行符。如何配置环境变量:
我的电脑-->右键属性-->高级系统设置-->环境变量--->在path 的末尾 添加 javac 编译程序所在的 目录的 bin目录。使用 半角分号 分割不同的目录。如何编译和运行java 程序。
在 cmd 窗口中。首先要切换到 源代码所在的目录(使用英文目录)。然后使用 在命令行输入 javac HelloWorld.java 回车。
会生成一个.class 文件。  如果编译不成功。需要修改源代码。切记保存。重新编译。javac HelloWorld.java 回车。
然后,解释执行 class   命令行:java HelloWorld  回车。public class Introduce{public static void main(String[] args){System.out.println("我是小杨老师!~");System.out.println("我是沧州人士!自幼习武!中途放弃!");System.out.println("欢迎大家来到北京尚学堂学习!");System.out.println("希望大家在接下来的时间里,好好学习,天天向上!不搞对象!");System.out.println("将来毕业找一个满意的工作,实现人生的理想!然后迎娶白富美,走向人生的巅峰!");}
}

9.修改cmd 启动默认路径

windows 键+ R
输入:regedit 回车。
HKEY_CURRENT_USER--->Software--->microsoft--->Command Processor
autorun-->cd /d 目录

二、计算机其他知识

1.进制

public class SystemTest{public static void main(String[] args){System.out.println(10);//直接书写一个数字,那么默认为10进制。System.out.println(0b1010);//二进制 高位添加 0b jdk1.7开始支持二进制System.out.println(012);//八进制  高位添加0System.out.println(0xa);//十六进制 高位添加0x
    }
}四种进制的特点:
十进制:逢十进一,每一位上出现的数值的取值范围[0-9]
二进制:逢二进一,每一位上出现的数值的取值范围[0-1]  计算机底层使用二进制表示所有的数据。
八进制:逢八进一,每一位上出现的数值的取值范围[0-7]
十六进制:逢十六进一,每一位上出现的数值的取值范围[0-15]  必须使用一个字符表示[10-15] [a-f][A-F]二进制:
一位二进制位 有两种状态 0、1。称之为1 bit。
1bit 是计算机中最小的存储单元了。
8 bits-->1 byte
1024 bytes--->1 KB
1024 KB--->1 MB
1024 MB--->1 GB
1024 GB--->1 TB
1024 TB--->1 PB计算机通常使用字节为单位来处理数据。使用四种进制来表示 0-15
二进制        八进制        十进制        十六进制
000           0          0            0
001           1          1           1
010           2          2           2
011           3          3           3
100           4          4           4
101           5          5           5
110           6          6           6
111           7          7           7
1000          10         8           8
1001          11         9           9
1010          12         10           a
1011          13         11           b
1100          14         12           c
1101          15         13           d
1110          16         14           e
1111          17         15           f10000         20         16           10
10001         21         17           11
10010         22         18           121个二进制位 能表示2种状态。
2个二进制位 能表示4种状态。
3个二进制位 能表示8种状态。
4个二进制位 能表示16种状态。
n个二进制位 能表示2的n次幂种状态。

2.机器码-原码-反码-补码

对于任何的一个整数,在计算机中的存储的具体的表示形式?
二进制的机器码的表示形式??

定义了三种码制来表示一个数据
不同的码制代表着不同的表示机器码的规则。

原码:
规则:最高位为符号位,最左边的一个二进制位 为 符号位 。0 代表是正数。1 代表负数。剩下的二进制位数为数值位。表示数值的大小。
10:00001010
-10:10001010

计算机不使用原码来最终的表示一个数据。
原因:
1: +0 -0 00000000 10000000 原码形式有+0 和 -0之分。
2:设计cpu的时候需要考虑符号位的设计,大大加重了设计cpu的难度。

反码:
规则:
正数:如果是一个正数,那么反码和原码一致。
负数:符号位不变,其余的数值位1-->0 0-->1
-10: 1000 1010--->1111 0101

补码:
规则:
正数:补码和原码一致。三码合一。
负数:先求原码,再求反码,然后再 加1.
-10: 1000 1010--->1111 0101--->1111 0110
-1: 1000 0001--->1111 1110---> 1111 1111

计算机广泛的采用补码的形式来表示数据:
原因:
1:没有 +0 和 -0 之分。
0000 0000
1000 0000-->1111 1111--> 1 0000 0000

2:计算机的cpu 在进行数据运算的时候,补码的符号位 并没有被看作符号位。符号位的运算的规则和普通的数值位的运算的规则一致。
简化了cpu的设计。

规则:补码的补码是原码。
对补码 取反 +1 就是该补码的原码形式。
-1:1111 1111 ---> 1000 0000 --->1000 0001

3.练习

需求:使用四种进制来表示10并打印输出,并把-1的二进制字符串形式打印//10使用四种进制来表示输出
public class SystemTest{//18public static void main(String[] args){System.out.println(10);//直接书写一个数字,那么默认为10进制。System.out.println(0b1010);//二进制 高位添加 0b jdk1.7开始支持二进制System.out.println(012);//八进制  高位添加0System.out.println(0xa);//十六进制 高位添加0x//将-10 的二进制的字符串的形式打印System.out.println(Integer.toBinaryString(-1));//1111111111111111111111110110System.out.println(Integer.toBinaryString(-10).length());//32
    }
}

4.进制的转换

各种进制之间相互的转换:

各种进制到十进制的转换:
123 = 1*10^2 + 2 * 10^1 + 3 * 10^0 = 100 + 20 + 3
0b1010110 = 2^1 + 2^2 + 2^4 + 2^6 = 2 + 4 + 16 + 64 = 86
0765 = 5 + 6 * 8 + 7 * 64 = 5 + 48 + 448 = 501
0x1ad = 13 + 10*16 + 256 = 13+160+256 = 429

十进制到其他进制的转换
10-->2
除二取余法:

2<--->8
三个二进制位对应一个八进制位
0b1100110--->0146
0561--->101110001

2<--->16
四个二进制位对应一个16进制位。
101110001-->171

三、标识符-数据类型-变量

1.标识符

a b 3a _3 public1。
age
name
studentScore
stuScore

标识符的命名规范的基本的规范:
1:见名知意。通过名字能体现对应的内存区域的数据的内容。
2:驼峰命名法。多个单词构成的标识符,单词的首字符大写。
3:避免使用单字符标识符。

目前位置接触过的java 关键字
public class static void

2.数据类型

java 程序中支持哪些数据类型。
java 是一种强类型语言。所有的数据:标识符以及 字面的常量数据都是有类型的。

数据的具体类型有2种指定的方式:
1:显式指定。
2:隐式指定。通常是针对字面值。由编译器默认指定。
整数的默认类型为 int。
浮点数的默认类型为 double
'A' 字符类型
true false boolean
"afdf" 字符串

java 支持的数据类型:
分为2大类:基本数据类型、引用数据类型。

基本数据类型:java 内置类型、简单数据类型。
1:4个整数类型
字节型 byte 8bits 1个字节 取值范围[-128~127]
短整型 short 16bits 2个字节 取值范围[-2^15 ~ 2 ^15 -1]
整型 int 32bits 4个字节 取值范围[-2^31 ~ 2 ^31 -1]
长整型 long 64bits 8个字节 取值范围[-2^63 ~ 2 ^63 -1]
2:2个浮点数类型
单精度 float 32bits 4个字节 小数点后可以保留7位。 一共有8个有效数字。
双精度 double 64bits 8个字节 小数点后可以保留16位。 一共有17个有效数字。
3:1个字符类型
字符 char 16bits 2个字节 [0~65535]
4: 1个布尔类型
布尔 boolean ??? 只有两个值 true false。

引用数据类型:复合数据类型、复杂数据类型
3个引用数据类型:
类: class
接口:interface
数组:[]

类型的作用:
1:决定了占用内存空间的大小。
2:底层的存储的格式
3:决定了最终显式的形式。

3.变量

变量:Variable。
概念:变量的本质是一块内存区域,该内存区域中的值可以被修改。局部变量:在方法内部定义的变量,称为局部变量。局部变量定义的语法:
变量类型 变量名 = 初始值;变量类型:java支持的任意类型。
变量名:合法的标识符定义变量可以分为2步进行:变量类型 变量名;---->变量的声明变量名 = 初始值;---->变量的赋初值变量的定义=======变量的声明+赋初值局部变量的特点:局部变量必须先定义后使用。局部变量的内存在栈中分配。//定义一个标识符,名字为 age,并给age 标识符对应的内存存一个short类型的值。
public class SimpleTypeTest{//18public static void main(String[] args){//数据的类型  标识符名字 = 初始值。//向jvm 申请一块内存,名字为age ,内存中的数据的类型为 short。占用2个byte。short age = 19;System.out.println(age);//定义标识符 用来存储 高考的分数 int 、圆周率 double 、班级中是否有女生 boolean。将内存中的数据全部依次打印。int score = 555;double pi = 3.1415926;boolean isGirlInClass = true;System.out.println(score);System.out.println(pi);System.out.println(isGirlInClass);//
        int weight;weight = 68;System.out.println(weight);//获取变量的值//weight = 70;weight = weight + 2;System.out.println(weight);//获取变量的值
        }
}

4.变量的定义的各种语法

//变量的各种语法定义
public class VariableTest{//18public static void main(String[] args){int a1 = 10;int a2 = 20;int b1 = 10, b2 = 20, b3 = 10;int c1, c2, c3;c1 = 32;c2 = 45;c3 = 67;int d1, d2 = 34, d3;}
}

5.局部变量的内存分析

6.常量

java 中的常量 分为两种。1:字面常量。通过数值的字面就可以知道数值的大小。字面常量有默认类型,类型由 编译器 指定。整数的默认类型为 int。如果超过了int 的范围,需要在末尾添加 L or l 来告诉编译器 当long类型来处理。浮点数的默认类型为 double。如果一个浮点数常量需要当作 float 来对待,那么需要在末尾添加 F or f。true false,默认是 boolean"字符串"  'A' 字符2:不可变的变量。使用 final 关键字 修饰。终态变量。在变量的类型前添加关键字 final 即可。特点:只能初始化一次。只有获得变量值的权利,没有修改变量值的权利。//不可变的变量 final
public class FinalTest{//18public static void main(String[] args){final double PI = 3.14;System.out.println(PI);//pi = 4.0;final int MAX_AGE;MAX_AGE = 135;}
}

7.作用域

作用域:变量可以被访问的范围。

局部代码块:在方法体的内部的一对大括号。
局部代码块中可以写任何的java 代码。

作用:将局部变量的作用域范围控制的更小。

局部变量的作用域范围:从定义的位置开始。到变量所在的大括号的结尾处。

8.字符类型-转义字符

char 类型:可以当作整数来对待。 无符号的短整型。没有负数.取值范围 [0-65535].字符集:字符的集合。字符集合中的每一个字符都对应着一个唯一的整数。ASCII:单字节字符集。只用到了一个字节的后7位。128个字符。'0'--->48'A'--->65'a'--->97ISO8859-1: 西欧使用的字符集,单字节字符集。256个字符。兼容了ASCII。gb2312:双字节字符集。兼容了ASCII。主要收录了中文简体。GBK:兼容了 gb2312.增加了繁体中文,还有各个少数民族的符号。utf-8:三字节的字符集。兼容了 ASCII。Unicode:万国码。java 使用的字符集。jvm 使用的。保证所有的国家的符号都能识别。转义字符:
\t:水平制表符  对应着键盘上的Tab键。作用:\t占用的半角的个数为[1-8].从\t包括之前的输出的内容。总共占用的半角的位数必须是8的倍数。\t用来补齐8个半角位的倍数的。
\b: 退格符:     对应着键盘上的 Backspace 键。
\r: 回车符:    让光标回到当前行的行首,后续的输出从行首输出。
\n: 换行符:    让光标去下一行。Enter 键对应两个字符:\r\n  让光标去到下一行的行首。\' :字符单引号。
\" :字符双引号。
\\ :字符反斜杠。//char 类型
public class CharTest{//18public static void main(String[] args){char myChar = 'A'+32;//65char myChar2 = 48;//0char myChar3 = '\u0064';//转义序列
        System.out.println(myChar);System.out.println(myChar2);System.out.println(myChar3);int age = 19;//字符串可以和任意类型 使用 + 连接符 将字符串和 基本数据类型的数据做连接。然后整体输出System.out.println("我的年龄:\t" + age);System.out.println("1234\"56789");System.out.println("\t123456789");//8个System.out.println("1\t23456789");//7个System.out.println("1234567\t89");//1System.out.println("12345678\t9");//8个
        System.out.println("1234\r56\n789");System.out.println('\'');System.out.println('\\');}}

9.练习-Scanner

//根据键盘输入,输入一个圆的半径,求圆的周长和面积。
//告诉编译器 Scanner 来自哪里
//java.lang 包是java 的核心包。核心包中所有的内容都是被默认导入的。
//* 代表通配符,代表所有。
import java.lang.*;// 这行代码写不写都会存在。
import java.util.Scanner;
public class ScannerTest{//18public static void main(String[] args){//使用jdk 已经定义好的类。扫描器类。//创建一个扫描器对象,扫描键盘输入   System.in 对应着我们的标准输入设备-->键盘//java.util.Scanner scanner = new java.util.Scanner(System.in);Scanner scanner = new Scanner(System.in);//提高用户体验  UE System.out.println("请您输入圆的半径:");//使用扫描器对象去接收键盘输入的一个整数。并返回该接收到的整数。int radius = scanner.nextInt();//阻塞式方法。会导致程序的阻塞。解除阻塞之后,程序继续执行。// 半径、周长、面积、圆周率//定义变量//int radius = 7;final double PI = 3.14;double area;double length;//求圆的周长和面积length = 2 * PI * radius;area = PI * radius * radius;//最后打印输出结果System.out.println("半径是:"+radius + "\t的圆的周长 = "+length + "\t面积 = "+area);}
}

10.Scanner 功能介绍

Scanner scan = new Scanner(System.in);

//hello world
String str = scan.next();//只能获得一个单词的字符串。
String str = scan.nextLine();//得到一行文本。
double dou = scan.nextDouble();// 得到一个双精度的浮点数
float fl = scan.nextFloat();// 得到一个单精度的浮点数

字符串的定义和使用。
int age = 10;
String str = "123";

11.注释

java 中的注释: comment。注释的作用:可以帮助开发者更好的理解,记忆,阅读程序代码的。注释部分的内容,不参与编译。给程序添加合适的注释是作为一个程序员的基本修养。java中支持的注释的类型:三种:1:单行注释:    //后面的内容都是注释的内容。
    用法:1:注释的内容单独占用一行,解释下面一行的内容。2:在一行代码的末尾。添加注释。短注释。一般注释的内容不超过10个字符。3:将一行代码注释掉,让代码失效的。2:多行注释:    /*注释的内容*/用法:多行、单行、一行的一部分。3:文档注释:    /**注释的内容*/帮助我们生成代码的阅读文档的。

12.float & double

1:float 和 double 很多时候不能精确的表示一个小数。3.3
0b0.1--->0.5
0b0.01--->0.25
0b0.001--->0.125小数点后的第n位上的1 对应的十进制小数的值为 1/2^nfloat  和  double 不是为了精确运算而设计的。
float 和 double 很多时候只是近似表示 某个小数。0.3F
0.01010101000000010101010.0101010101

四、操作符、运算符

1.算术运算符

1:java 程序支持哪些运算符。可以使用哪些运算符对数据进行计算。概念:
1:操作数:参与运算的数据 称为操作数。
2:表达式:运算符和操作数的整体 称为表达式。单独的一个操作数也可以看作一个最简单的表达式。  int age = 1+1;
3:返回值:操作数 或者是 表达式 参与 运算的结果。注意:参与所有运算的数据,都是操作数 或者 表达式的 返回值 参与的。4:一元运算符:只需要一个操作数的运算符。也叫做 单目运算符。
5:二元运算符:需要两个操作数的运算符。也叫做 双目运算符。
6:三元运算符:需要三个操作数的运算符。也叫做 三目运算符。一:算术运算符:
+
-
*
/
%
++
--//算术运算符
public class MathTest{public static void main(String[] args){int num0 = 10, num1 = 20;//+  既是一个一元运算符,也是一个二元运算符。System.out.println(+ num0);//一元运算符System.out.println(num0 + num1);//二元运算符//-  既是一个一元运算符,也是一个二元运算符。System.out.println(- num0);//一元运算符System.out.println(num0 - num1);//二元运算符//*  二元运算符  两个操作数的乘积  运算的规则和数学中一样一样的。System.out.println(num0 * num1);//二元运算符System.out.println(-num0 * num1);//二元运算符System.out.println(num0 * -num1);//二元运算符System.out.println(-num0 * -num1);//二元运算符// / 二元运算符     两个操作数相除。运算的规则和数学中一样一样的。//如果两个操作数都是整数,那么结果为相除的整数部分。没有四舍五入。System.out.println(num0 / num1);//二元运算符System.out.println(-num0 / num1);//二元运算符System.out.println(num0 / -num1);//二元运算符System.out.println(-num0 / -num1);//二元运算符// % 二元运算符。a%b  a除以b 得到的余数  结果的符号位和左边的操作数一致。System.out.println(5 % 2);//1System.out.println(-5 % 2);//-1System.out.println(5 % -2);//1System.out.println(-5 % -2);//-1// / 和 % 的应用。 123.int num = 689;int unit = num % 10;int decade = num / 10 % 10;decade = num %100 / 10;int hundred = num / 100;System.out.println(num + "\t的百位:" + hundred + "\t十位:" + decade + "\t个位:" + unit);//自增运算符 ++ :一元运算符  实现对变量自增一的操作。//两种模式:前缀模式  后缀模式。num = 0;num = num + 1;++ num;num ++;System.out.println("num = "+num);//后缀模式:先返回后自增。num++ 表达式的返回值 是 num 自增之前的值。// num ++ 先计算了得到了返回值。自增之前的值。然后 num 做自增+1操作。然后将 num ++ 之前得到的返回值赋值给 age;int age = num ++;System.out.println("num = "+num + "\tage = "+age);num = 0;num = num ++;System.out.println(num ++ + num ++ + num ++);//3System.out.println("num = "+num);//3num = 0;//前缀模式:先自增 后返回   表达式的返回值是 自增之后的值。System.out.println(num++ + ++num + num ++ - ++num);//0//自减运算符: -- :一元运算符  实现对变量的自减一 的操作。//后缀模式:先返回 ,后自减。。前缀模式:先自减后返回。
        }
}

2.练习

求随机数[100-1000)
//获得随机数
public class RandomNumberTest{public static void main(String[] args){//得到区间[100-1000) 区间通常是 前闭后开的。前包含,后不包含。final int MIN = 100;final int MAX = 102;//Math.random() 同样有返回值。返回值是一个随机的double 值。[0.0~1.0)System.out.println(Math.random() * (MAX-MIN) + MIN);//int value = 0;//Math.random() * (MAX-MIN) + MIN  [100.0~ 1000.0)  去掉小数int value = (int)(Math.random() * (MAX-MIN) + MIN);System.out.println("value = "+value);}
}//随机得到两个[10-20]的随机数,定义变量保存两个随机数。然后打印该随机数。
//实现交换两个变量的值。
public class ChangeValueTest{public static void main(String[] args){//定义区间final int MIN = 10, MAX = 21;int num1 = (int)(Math.random()*(MAX-MIN)+MIN);int num2 = (int)(Math.random()*(MAX-MIN)+MIN);System.out.println("num = "+num1 + "\tnum2 = "+num2);int temp = num1;num1 = num2;num2 = temp;System.out.println("num = "+num1 + "\tnum2 = "+num2);//使用异或来实现。根据异或的特点实现的。num1 = num1 ^ num2;num2 = num2 ^ num1;num1 = num1 ^ num2;System.out.println("num = "+num1 + "\tnum2 = "+num2);}
}

3.赋值运算符

赋值运算符:
=:二元运算符。
赋值 操作  永远是 最后执行。
实现的功能:将右边表达式的返回值 赋值 给 左边的变量(可以是终态变量)。= 左边 :左值 left value
= 右边 :右值 right value左值:必须是变量 或者是 终态变量。
右值:可以是:常量 : 1变量 : age常量表达式:1 + 1 + 4变量表达式: x + y常量、变量表达式:1 + x;左值的类型 要和 右值表达式的返回值的类型 要兼容。复合赋值运算符:
+=
-=
*=
/=
%=复合赋值运算符特点:
1:生成的字节码文件要稍微小一点点。
2:隐含了一个强制类型转换,强制转换的类型为 左边变量的类型。//复合赋值运算符练习
public class AssignmentTest{public static void main(String[] args){int value = 10;//value = value + 10;value += 10;//value = value - 10;value -= 10;//value = value * 10;value *= 10;//value = value /10;value /= 10;//value = value % 10;value %= 10;byte age = 127;//age += 1;age = age + 1;System.out.println("age = "+age);}
}

4.关系运算符

关系运算符:表达的是 操作数之间的关系是否成立的。成立,关系表达式返回值为  true ,否则为 false。6个关系运算符:
> : 大于:二元运算符。左边的操作数是否大于右边的操作数。
< :小于:二元运算符。左边的操作数是否小于右边的操作数。
>=:大于等于:二元运算符。左边的操作数是否大于等于右边的操作数。
<=:小于等于:二元运算符。左边的操作数是否小于等于右边的操作数。
==:等于:二元运算符。左边的操作数是否等于右边的操作数。
!=:不等于:二元的。左边的操作数是否不等于右边的操作数。>  <   >=  <= :只适用于 数值型 包括 char 类型的数据。==  != 适用于 java支持的所有的数据类型。//复合赋值运算符练习
public class RelationTest{public static void main(String[] args){int num0 = 0;int num1 = 0;System.out.println(num0 + 1 > num1);//trueboolean bool = num0 < ++ num0;System.out.println(bool);//true
        System.out.println(num0 == num0 ++);//truenum0= 0;System.out.println(++num0 != num0 ++);//falsefloat f1 = 11111111111111f;float f2 = 11111111111110f;System.out.println(f1);//1.11111108E13System.out.println(f2);//1.11111108E13System.out.println(f1 == f2);//true
        }
}

5.逻辑运算符

逻辑运算符:参与逻辑运算的操作数必须是 boolean 类型的数据。逻辑表达式的 返回值 也是 boolean 类型。//逻辑运算符练习
public class LogicTest{public static void main(String[] args){// &  逻辑与 :二元运算符。规则:有一个操作数是 false 那么结果就是false。两个都是true 的时候,结果才是 true。// 规律:有假 则 假 ,全真 则真。  表达的关系 是 并且的关系。System.out.println(true & true);//trueSystem.out.println(true & false);//falseSystem.out.println(false & true);//falseSystem.out.println(false & false);//false
        System.out.println();// | 逻辑或:二元运算符。规则:有一个操作数是 true,那么结果就是 true,都是false 结果才是false。// 规律:有真则真,全假则假。 表达的是或者的关系。System.out.println(true | true);//trueSystem.out.println(true | false);//trueSystem.out.println(false | true);//trueSystem.out.println(false | false);//false
        System.out.println();// ^ 逻辑异或  二元运算符  规则:两个操作数相异为 true 相同为false。System.out.println(true ^ true);//falseSystem.out.println(true ^ false);//trueSystem.out.println(false ^ true);//trueSystem.out.println(false ^ false);//false
        System.out.println();// ! 逻辑非  逻辑取反  一元运算符。规则:true-->false  false--->trueSystem.out.println(!true);//falseSystem.out.println(!false);//true
        System.out.println();// && 短路与  条件与  System.out.println(true && true);//trueSystem.out.println(true && false);//falseSystem.out.println(false && true);//falseSystem.out.println(false && false);//false
        System.out.println();// &  和 &&  的区别// &:进行逻辑与运算的所有的操作数,不管前面的操作数的返回值的结果是否是false,所有的操作数都会进行运算。然后进行逻辑运算。// &&: 进行 短路与运算的过程中,如果前面有操作数的返回值 是  false。// 那么后面的所有的操作数将不再计算,直接返回整个逻辑表达式的结果为false。// 短路与的效率往往高于逻辑与,所以建议使用短路与。int value = 0;System.out.println( (1>2) && (value ++ > 0));//falseSystem.out.println("value = "+value);// | 和 || 的区别。// || 如果进行 短路或 运算,如果有一个操作数的结果为 true,那么后续的操作数将不再计算,而直接返回整个逻辑表达式的值 为  true.
    }
}

6.位运算符

位运算符:
直接对底层的二进制位操作,效率相对较高。
位运算的数据的类型:整数、char。//位运算符练习
public class BitTest{public static void main(String[] args){// &  按位与:二元运算符。 规则:低位对齐,进行按位与。 对应的位 有0则0  全1则1.System.out.println(3 & 5);//1//作用:1:可以将某个整数的某些二进制位设置为0。//2:可以得到某一个数的制定区间的二进制表示的数据。// | 按位或: 二元运算符。 规则: 低位对齐,进行按位或。对应的位,有1则1,全0则0System.out.println(3 | 5);//7//作用://1:如果两个操作数 对应的位 上没有全1 的,那么进行按位或 和 加的效果一致。System.out.println(3 | 4);//7System.out.println(1 | 2);//3System.out.println(8 | 16);//24System.out.println(4 | 8);//12System.out.println(3 | 12);//15//让你们找10个数。20个数。使用其中的任意几个数。然后做加法。不会和其他的组合的结果重复。//1,2,4,8,16,32,64,128,256,//2: 可以让指定的某些二进制位的值设置为1.//按位异或 ^ 二元运算符。。规则:对应的位上 相异为1,相同为0.//特点:一个数先后和同一个数据异或两次,结果是它自身。System.out.println(3 ^ 4 ^ 4);//3//简单的加密char c1 = '我';char c2 = '爱';char c3 = '你';int key = 6666;c1 ^= key;c2 ^= key;c3 ^= key;System.out.println("密文="+c1 + c2 + c3);c1 ^= key;c2 ^= key;c3 ^= key;System.out.println("明文="+c1 + c2 + c3);// ~ 按位取反  一元运算符。规则:所有的二进制位0--->1  1--->0System.out.println(~0);//-1//移位运算符。// >> :带符号右移  :低位被移走,高位空出来的补符号位,正数补0 负数补1.System.out.println(-1>>1);//-1System.out.println(35>>2);//17System.out.println(101>>1);//50System.out.println(89>>4);//5//应用:对于某个区间的整数,右移动n位,等价于 该数除以 2的n次幂// << 左移 :高位被移走,包括符号位。低位补0.System.out.println(1<<1);//2System.out.println(1<<2);//4System.out.println(1<<3);//8//应用:在某些区间 左移n位等价于 乘以2的n次幂。System.out.println(1<<31);//8// >>> 无符号右移:低位被移走,高位补0.//应用:为了得到一个随机的正整数。final int MAX = 102, MIN = 100;//创建产生随机数对象ranjava.util.Random ran = new java.util.Random();int value = ran.nextInt();//得到一个随机的int 类型的数据。System.out.println("value = "+value);//得到了一个随机的正整数value >>>= 1;//value = value >>> 1;System.out.println("value = "+value);value = value %(MAX-MIN) + MIN;System.out.println("value = "+value);//一句代码实现得到随机数。value = (ran.nextInt() >>> 1)%(MAX-MIN) + MIN;System.out.println("value = "+value);}
}

7.条件运算符

java 中唯一的三目运算符。 需要三个操作数。语法: 表达式-1 ? 表达式-2 : 表达式-3解释:
表达式-1:必须是一个 boolean 表达式。返回值是 boolean 值的表达式。
表达式-2、表达式-3:可以是java 支持的任意的表达式。两个表达式的返回值的类型 需要兼容。执行过程:1:判断 表达式-1 的结果。如果 结果为 true,那么整个条件表达式 返回 执行 表达式-2 并返回 表达式-2 的结果。2:如果结果为false,那么跳过 表达式-2,执行表达式-3,并返回 表达式-3 的返回值。

8.运算符的优先级

1:乘除取余 大于 加减。
2:一元运算符 大于 二元运算符 的优先级。
3:二元运算符的优先级高于三元运算符的优先级。
4:赋值运算符优先级最低。
5:配合小括号使用。

9.练习

// 1:得到两个随机数,一个使用Math获得,一个使用Random获得。全部打印。使用三目实现,将比较大的结果求出来。
// 2:得到一个随机数,如果奇数,打印 xxx 是奇数 如果是偶数 ,打印 xxx 是偶数
import java.util.Random;
public class ConditionTest{public static void main(String[] args){//定义区间final int MIN = 10, MAX = 111;int num1 = (int)(Math.random()*(MAX-MIN)+MIN);//创建获得随机数的对象Random ran = new Random();int num2 = (ran.nextInt()>>>1)%(MAX-MIN)+MIN;int num3 = (int)(Math.random()*(MAX-MIN)+MIN);System.out.println("num = "+num1 + "\tnum2 = "+num2+ "\tnum3 = "+num3);int max = num1 > num2 ? num1 : num2;max = max > num3 ? max : num3;//嵌套的三目int max1 = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2 : num3);System.out.println("max = "+max);System.out.println("max1 = "+max1);//
        String str = max % 2 == 0 ? "偶数" : "奇数";//(max & 1) == 0 成立,说明 max 的二进制形式的最末位是0str = (max & 1) == 0 ? "偶数" : "奇数";System.out.println(max + "\t是"+str);}
}

五、基本数据类型转换

1.算术运算时的转换

类型转换:java 不支持 不同类型之间的运算。如果有不同类型之间的数据做运算的话,那么首先第一步做同类型转换。编译器来完成这种转换的。自动的完成的。转换的规则:1:如果参与运算的操作数的类型是如下的类型中的:byte  char short int ,所有的类型都自动转换为 int 然后再做运算。结果也是 int。2:如果参与运算的操作数的类型是如下的类型中的:byte  char short int ,而且一定包含 long 类型。所有的类型都自动转换为 long类型。然后再做运算。结果也是 long。3:如果参与运算的操作数的类型是如下的类型中的:byte  char short int long,而且一定包含 float类型。所有的类型都自动转换为 float类型。然后再做运算。结果也是 float。4:如果参与运算的操作数的类型是如下的类型中的:byte  char short int long float,而且一定包含 double类型。所有的类型都自动转换为 double类型。然后再做运算。结果也是 double。上述的转换都是 编译器 来完成的。自动完成的。在编译期完成类型的转换,也就是将小类型的数据 当作大类型的数据来使用(如果需要)。注意:第一种 和 第二种 自动转换 是 绝对安全的。 三四种 有可能存在精度的损失。java 允许这么做。

2.赋值时的转换

规则:小类型:表示的数值的范围比较小的。大类型:表示的数值的范围比较大的。可以直接把一个小类型的数据 赋值 给一个 大类型的变量。引用数据类型的转换:
老虎当动物用。 自动转换。

3.类型自动转换图

4.强制类型转换

强制类型转换。如果有将大类型的数据当作小类型的数据来使用的时候,就需要强制类型的转换。
大类型--强制-->小类型  不安全的。   语法:
(强制转换为的类型)(被转换的数据);
int x = 2;
byte b1 = (byte)(x+1);
b1 = (byte)x;强制转换的规则://强制类型转换
public class PowerChangeTypeTest{public static void main(String[] args){//整数之间的强制转换://只保留 低n位的二进制,直接将多余的高位砍掉。不考虑符号位。只保留低位的数值位。int i1 = 254;System.out.println(Integer.toBinaryString(i1));byte b1 = (byte)(i1+1);System.out.println(b1);//-1//浮点数向整数的强制转换://1:没有超过整数的范围,那么直接去掉小数点部分。//2:如果被转换的数据超过了整数的最大值,那么结果为最接近该浮点数的整数System.out.println((int)1.1);//1System.out.println((int)1.1E20);//2147483647//double 强制转换为 float//1 : 没有超过被强转的类型,那么小数部分直接被截断。//2 : 超过了被强转的类型。结果为 InfinitySystem.out.println((float)1.111111111111111111111111111111111111);//1.111112 System.out.println((float)1.1E100);//Infinity  无穷大
b1 = 127;b1 ++;System.out.println(b1);//-128  可以认为隐含了一个强制类型转换,转换的类型为 b1的类型。//b1 = b1 + 1;b1 = 127;b1 += 1;//隐含了一个强制类型转换,强制转换的类型为 左边变量的类型。System.out.println(b1);//-128
    }
} 

5.字符串连接时的转换

System.out.println(""+a+b+c);

同样,字符串连接的时候,也只能是 字符串和 字符串之间做连接。
字符串可以和其他的任何类型做连接:
底层使实现:其他所有的类型,都要被转换为字符串之后在做连接。

6.练习

//得到一个随机字符[A-Z]or[a-z] (大小写也要随机),并打印.
import java.util.Random;
public class RandomCharTest{public static void main(String[] args){final int MAX = 'Z'+1;final int MIN = 'A';//得到随机的大写字符char ranChar = (char)(Math.random()*(MAX-MIN)+MIN);System.out.println("随机的大写字符:" + ranChar);Random random = new Random();//大小写的随机boolean isUpperCase = random.nextBoolean();ranChar = isUpperCase ? ranChar : (char)(ranChar + 32);System.out.println("得到的随机字符为:" + ranChar);}
}

六、分支选择

1.java流程控制

java 的代码的执行的路径的选择的种类。1:顺序执行。从上到下依次执行
2:分支选择:根据条件来选择执行某些代码,跳过某些代码。
3:循环:反复的执行某些代码。

2.if

if 语句: 单分支 选择。if 是java 的关键字。if 语句 的 语法:
if(条件){//if 代码块
}
//

解释:条件:必须是一个 boolean 表达式。返回值为 boolean 值的表达式。if 代码块:一个使用{} 封闭的代码块。里面的内容可以是java 支持的任意行数的代码。执行过程:1:首先计算条件 的返回值。如果是 返回值 为 true。那么执行 if 代码块中所有的内容。2:如果条件的返回值 为 false。那么就跳过所有的 if 代码块中的内容。注意:1:如果if 代码块中的内容为一行 代码,那么大括号可以省略。建议添加大括号,即使是一条java 代码。2:不要在 条件小括号后 添加 分号。一个单独的分号是一条完整的java 语句。空语句。

3.if-练习

//求两个随机数的最大值  范围[0-20].
//需求:产生一个随机数,范围[0-20]. 来代表一个年龄 age,
//使用if 语句,如果 age [0-3] 输出 还没有上学 [4-6] 幼儿园小朋友  [7-12] 小学生 [13-15] 中学生 [16-18]  高中生 [19-22] 大学生。
public class IfTest{public static void main(String[] args){final int MAX = 21, MIN = 0;//求两个随机数int num0 = (int)(Math.random()*(MAX-MIN)+MIN);int num1 = (int)(Math.random()*(MAX-MIN)+MIN);System.out.println("两个随机数为:"+num0 + "\t\t"+num1);int max = num1;if(num0 > num1){max = num0;}System.out.println("max = "+max);// if(num1 >= num0){// max = num1;// }//产生一个随机的年龄int age = (int)(Math.random()*(MAX-MIN)+MIN);System.out.println("age = "+age);if(age >=0 && age <=3){System.out.println("还没有上学!");}if(age >=4 && age <=6){System.out.println("幼儿园小朋友!");}if(age >=13 && age <=15){System.out.println("初中生!");}if(age >=7 && age <=12){System.out.println("小学生!");}if(age >=16 && age <=18){System.out.println("高中生!");}if(age >=19 && age <=22){System.out.println("大学生!!");}}
}

转载于:https://www.cnblogs.com/961013-yu/p/9497353.html

北京尚学堂JAVASE课程相关推荐

  1. 北京尚学堂退课退课,口碑还不错

    解约协议书 甲方:北京尚学堂科技有限公司 统一社会信用代码:911101067855246634 乙方: 手机号: 甲方北京尚学堂科技有限公司与乙方 姓名 于 年 月 日签订的教育培训服务合同,乙方以 ...

  2. 北京尚学堂带你“重新”认识程序员

    2019独角兽企业重金招聘Python工程师标准>>> 谈谈程序员 什么是程序员 程序员又称为计算机程序员(Computer Programmer).开发者(Developer).编 ...

  3. 北京尚学堂|程序员励志名言

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京尚学堂原创文章,未经允许不得转载. 北京尚学堂科技有限公司 编者的话:作为一个真正的程序员,首先应该尊重 ...

  4. 北京尚学堂|程序员的智慧

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京尚学堂原创文章,未经允许不得转载. 编程是一种创造性的工作,是一门艺术.精通任何一门艺术,都需要很多的练习 ...

  5. 北京尚学堂python 百度网盘_北京尚学堂_1903期_Python_全套视频教程(视频、源码、课件)...

    北京尚学堂_1903期_Python_全套视频教程(视频.源码.课件) |____尚学堂官网.url |____尚学堂_程序员修炼手册(电子版).url |____软件开发常用词汇(北京尚学堂发布). ...

  6. @[springboot初学,附北京尚学堂教程网址

    @springboot初学,附北京尚学堂教程网址https://www.bjsxt.com/a/10247.html 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 ...

  7. 北京尚学堂|为什么要学习Java

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京尚学堂原创文章,未经允许不得转载. 1. 思考一下​ 学习Java之前,先别急,静下心来好好想想: 1) ...

  8. 北京尚学堂:献给奋斗在一线的“码农”

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京尚学堂原创文章,未经允许不得转载. 很长一段时间以来,我们都在关注如何提高代码质量,也为此做过一些尝试,在 ...

  9. 北京尚学堂偷偷告诉你:作为程序员必备的基本品质

    2019独角兽企业重金招聘Python工程师标准>>> 大多数对程序员的认识都停留在"代码机器,整天就知道敲代码的宅人类",其实不然,一个好的程序员是需要很好的创 ...

最新文章

  1. 分析部署无线局域网的关键要素
  2. jbpm4 org.hibernate.exception.ConstraintViolationException
  3. 小模型实现大一统!FBNetV5一举包揽CV任务3个SOTA
  4. ionic3中使用自定义配置
  5. opencv教程大全
  6. v9更新栏目缓存提示PHP has encountered a Stack overflow解决方法
  7. 远程服务器存储之JDK方式
  8. 从阿里中台战略看企业IT架构转型之道(下)
  9. Quartus 中快速分配器件管脚
  10. 反汇编基础-MSVC2012,2008,MinGw中控制台main函数入口特征
  11. 当 Python 中混进一只薛定谔的猫……
  12. wireshark抓取分析UDP数据包
  13. Python菜鸟起飞day2--数据类型(元组,字典,字符串)
  14. 中小企业生产信息化:私有系统还是云方案?
  15. iOS开发面试和底层学习视频整理合集
  16. 编译原理:cminus_compiler-2021-fall Lab3
  17. 华为云主机无法ping通外网,xshell远程连接不上
  18. 漂亮的梦幻图,可用来做背景图(60张左右)
  19. PHp网站建设,期末大作业-海贼王主题【包含前后台】
  20. Ubuntu Kylin照片文字识别工具

热门文章

  1. Python Numpy鸢尾花实训,数据处理
  2. 炉石传说服务器维护时间2020,炉石传说新版本2020上线时间 炉石传说新版本上线时间介绍...
  3. ArcGIS API+Canvas +Vue框架 制作前端地图打印功能
  4. WordPress页面和搜索页伪静态方法
  5. 全国计算机二级office选择题知识点,IT考试网-计算机二级office选择题必备考点汇总(第一部分)...
  6. VCS逻辑仿真工具-03——后处理:VCD+文件
  7. 从零开始在服务器上搭建QQ机器人——起步(一)
  8. Android 微信支付调不起
  9. 管理台权限模块 - 完整路由权限及按钮权限
  10. Java零基础_day01_课堂笔记