2023年6月20日发(作者:)
Java基础1,⼊门基础知识本⽂知识点(⽬录):
1、Java简介语⾔起源Java是SUN ( Stanford University Network 斯坦福⼤学⽹络公司 ) 1995年推出的⼀门⾼级编程语⾔。Java名称的来源Java最初被命名为Oak,⽬标在于家⽤电器等⼩型系统的编程语⾔,随着市场的变化,SUN公司着眼于⽹络应⽤的开发。Java的名字的来源:Java是印度尼西亚⽖哇岛的英⽂名称,因盛产咖啡⽽闻名。
1995年5⽉23⽇,JAVA语⾔诞⽣ (雏形)1996年,1997分别推出JDK1.0,JDK1.1版1999年,JAVA被分成J2SE,J2EE,J2ME2000年,JDK1.4发布2004年9⽉30⽇18:00PM,J2SE1.5发布,成为Java语⾔发展史上的⼜⼀⾥程碑。为了表⽰该版本的重要性,J2SE1.5更名为Java SE 5.02005年,JAVA版本正式更名为JAVAEE,JAVASE, JAVAME2006年12⽉,SUN公司发布JRE6.0 2009年04⽉20⽇,Oracle以74亿美元收购Sun。取得java的版权。2010年9⽉,JDK7.0已经发布,增加了简单闭包功能。 2011年7⽉,甲⾻⽂公司发布java7的正式版。1.1、常见的dos命令盘符: 进⼊指定的盘符下。dir : 列出当前⽬录下的⽂件以及⽂件夹md : 创建⽬录
rd : 删除⽬录 注意:rd不能删除⾮空的⽂件夹,⽽且只能⽤于删除⽂件夹。cd : 进⼊指定⽬录cd.. : 退回到上⼀级⽬录cd : 退回到根⽬录echo "hello java"> : 写⼊⽂本到指定⽂件
type :显⽰⽂件内容命令del : 删除⽂件 注意:不能删除⽂件夹,只能删除⽂件。exit : 推出dos命令⾏cls : 通知计算机将当前的命令清空* : 是通配符。tab : 命令补全。⽅向键:上下键是找回上次你写过的命令。1.2、java语⾔重要特性之跨平台
1.2.1 跨平台什么是跨平台(计算机系统),跨平台概念是软件开发中⼀个重要的概念,即不依赖于操作系统,也不信赖硬件环境。⼀个操作系统下开发的应⽤,放到另⼀个操作系统下依然可以运⾏。1.2.2 Java的跨平台“write once run anywhere”Java的跨平台是相对于其他编程语⾔⽽⾔的,通过Java语⾔编写的应⽤程序在不同的系统平台上都可以运⾏。⼀般的⾼级语⾔如果要在不同的平台上运⾏,⾄少需要编译成不同的⽬标代码。在windows编译的c语⾔程序,在linux下是不能运⾏的。当然在linux下编译的c语⾔程序在windows下也是不能运⾏的。⽽Java语⾔在不同平台上运⾏时不需要重新编译。Java跨平台的原理:Java的跨平台是通过Java虚拟机(JVM)来实现的。1.2.3 Java虚拟机(JVM)Java Virtual Machine ⼀个软件模拟的计算机。Java源程序想象成我们的C源程序,Java源程序编译后⽣成的字节码(.class)就相当于C源程序编译后的⼆进制可执⾏⽂件。JVM虚拟机相当于计算机系统(操作系统+硬件环境),Java解释器相当于CPU。.exe⽂件直接在windows操作系统下运⾏,在CPU上运⾏的是机器码(.exe⽂件).class字节码⽂件是运⾏在JVM虚拟机下的,在Java解释器上运⾏的是Java字节码。Java解释器相当于运⾏Java字节码的“CPU”,但该“CPU”不是通过硬件实现的,⽽是⽤软件实现的。Java解释器实际上就是特定的平台下的⼀ 个应⽤程序。只要实现了特定平台下的解释器程序,Java字节码就能通过解释器程序在该平台下运⾏,这是Java跨平台的根本。当前,并不是在所有的平台 下都有相应Java解释器程序,这也是Java并不能在所有的平台下都能运⾏的原因,它只能在已实现了Java解释器程序的平台下运⾏。
1.3、Java的三⼤平台JavaSE Java SE(Java Platform,Standard Edition)。Java SE 以前称为J2SE。它允许开发和部署在桌⾯、服务器、嵌⼊式环境和实时环境中使⽤的Java 应⽤程序。Java SE 包含了⽀持Java Web 服务开发的类,并为Java Platform,Enterprise Edition(Java EE)提供基础。
例⼦:类似QQ、微信、飞秋、电脑管家这样⼦的桌⾯应⽤。Java EE Java EE(Java Platform,Enterprise Edition)。这个版本以前称为J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应⽤程序。Java EE 是在Java SE 的基础上构建的,它提供Web 服务、组件模型、管理和通信API,可以⽤来实现企业级的⾯向服务体系结构(service-oriented architecture,SOA)和Web 2.0 应⽤程序。
Java ME Java ME(Java Platform,Micro Edition)。这个版本以前称为J2ME,也叫K-JAVA。Java ME 为在移动设备和嵌⼊式设备(⽐如⼿机、PDA、电视机顶盒和打印机)上运⾏的应⽤程序提供⼀个健壮且灵活的环境。Java ME 包括灵活的⽤户界⾯、健壮的安全模型、许多内置的⽹络协议以及对可以动态下载的连⽹和离线应⽤程序的丰富⽀持。基于Java ME 规范的应⽤程序只需编写⼀次,就可以⽤于许多设备,⽽且可以利⽤每个设备的本机功能。
2、环境的搭建2.1、JDK简介:JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。⾃从Java推出以来,JDK已经成为使⽤最⼴泛的Java SDK。JDK 是整个Java的核⼼,包括了Java运⾏环境、Java⼯具和Java基础类库。JDK是学好Java的第⼀步。从SUN的JDK5.0开始,提供了泛型等⾮常实⽤的功能,其版本也不断更新,运⾏效率得到了⾮常⼤的提⾼。2.2、JDK的安装2.3JDK⽬录介绍1. bin ⽬录:存放Java的编译器、解释器等⼯具(可执⾏⽂件)。2. db ⽬录:JDK7附带的⼀个轻量级的数据库,名字叫做Derby。3. include ⽬录:存放的调⽤系统资源的接⼝⽂件。4. jre ⽬录:存放Java运⾏环境⽂件。5. lib ⽬录:存放Java的类库⽂件。6. ⽂件:JDK提供的类的源代码。
附:
安装JDK需要注意的事项:1. 安装路径中不要包含中⽂。2. 安装路径中不要包含空格。2.4、JRE简JRE Java Runtime Environment Java运⾏环境。包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核⼼类库等,如果想要运⾏⼀个开发好的Java程序,计算机中只需要安装JRE即可。2.5、配置path环境变量问题:⽬前在控制台窗⼝下只能在jdk安装⽬录的bin⽬录下才能使⽤jdk的开发⼯具在控,如果想制台窗⼝下想要在任意⽬录下都可以使⽤javac与java或者jdk其他的开发⼯具那应该怎么做呢?1.在dos窗⼝敲上javac我们在随意的⼀个⽬录敲javac或者java命令时候,发现dos窗⼝显⽰这个不是内部命令,然后我们在上⾯敲上notepad命令时,打开了⼀个记事本的程序,但是在当前⽬录下页没有存在的可执⾏⽂件,那么为什么能启动呢?错误原因:原来在dos窗⼝上写上⼀个命令时候,如果在当前⽬录下找不到指定的可执⾏⽂件,那么它会根据path环境变量保存的路径去搜索是否存在这个可执⾏⽂件,如果存在则启动该程序,否则就没有这个命令。2.解决⽅法:1、 进⼊jdk的安装⽬录的bin⽬录。2、 在dos命令上敲javac。(如果出现了以上的图信息则配置成功)3.为什么要配置path环境变量因为在jdk下bin⽂件夹中有很多我们在开发中要使⽤的⼯具,如,,等,那么我们在使⽤时,想要在电脑的任意位置下使⽤这些java开发⼯具,那么我们就需有把这些⼯具所在的路径配置到系统的环境变量中,当我们使⽤时,系统可以帮且我们找到这些命令。4.如何配置path环境变量我们将jdk下bin的路径进⾏复制在我们电脑-----à属性-----à⾼级-----à环境变量---------àpath这项将bin的路径放置到path的最前边,别忘记加分号._HOME环境的配置有时候可能需要更换Jdk的⽬录,但是经常修改path的值可能会不⼩⼼修改其他的路径,解决⽅法:1、 创建⼀个JAVA_HOME的变量。2、 JAVA_HOME的值为JDK的安装⽬录。3、 配置path路径:%JAVA_HOME%/bin。以后需要更换JDK的⽬录时,只需要更换JAVA_HOME的⽬录即可。设置临时变量:set : 查看所有的环境变量信息。set 变量名 :查看具体⼀个环境变量的值。set 变量名=:清空⼀个环境变量的值。set 变量名=具体值 :给指定变量定义具体值。想要在原有环境变量值基础上添加新值呢?⾸先,通过%变量名%操作符获取到原有环境变量的值。然后加上新值后在定义给该变量名即可举例:给path环境变量加⼊新值set path=新值;%path%注意:这种配置⽅式只在当前dos窗⼝有效。窗⼝关闭,配置消失。2.6、 classpath环境变量1、classpath的作⽤: 作⽤是指定类搜索路径,要使⽤已经编写好的类,前提当然是能够找到它们了,⼀旦配置了classpath路径信息的时候,jvm与java编译器都会根据classpath指定的路径去寻找class⽂件。2、如何设置当前⽬录(.)set classpath=.;设置路径 与 set classpath=设置路径;.有什么区别?“.”在前⾯的时候,java虚拟机会先从当前路径去寻找class⽂件,然后再到指定的路径去需找。如果”.”在后⾯,java虚拟机则会先寻找指定好的路径,然后再在当前的路径去寻找。设置classpath的时候要加上 ; 就会在当前⽬录下查找。
3、关键字3.1 关键字的概述Java的关键字对java的编译器有特殊的意义,他们⽤来表⽰⼀种数据类型,或者表⽰程序的结构等,关键字不能⽤作变量名、⽅法名、类名、包名。3.2 常见的关键字4、标识符4.1 什么是标识符就是程序员在定义java程序时,⾃定义的⼀些名字,例如helloworld 程序⾥关键字class 后跟的Demo,就是我们定义的类名。类名就属于标识符的⼀种。标识符除了应⽤在类名上,还可以⽤在变量、函数名、包名上。4.2 标识符必须遵循以下规则标识符必须遵循以下规则1. 标识符由26个英⽂字符⼤⼩写(a~z,A~Z)、数字(0~9)、下划线(_)和美元符号($)组成。2. 不能以数字开头,不能是关键字3. 严格区分⼤⼩写4. 标识符的可以为任意长度4.3 标识符案例4.3.1 合法的标识符ComputeArea,radius,area $itcast _itcast gz_itcast注意:由于Java严格区分⼤⼩写,ITCAST和itcast是完全不同的标识符4.3.2 ⾮法标识符1. class (关键字)2. 100java(不能以数字开头)3. Hello java (空格不是组成标识符的元素)4. 包名4.3.3 Java中的标识符命名规范1、包名 多个单词组成时所有字母⼩写(例:package )2、类名和接⼝ 多个单词组成时所有单词的⾸字母⼤写(例:HelloWorld)3、变量名和函数名 多个单词组成时第⼀个单词⾸字母⼩写,其他单词⾸字母⼤写(例:lastAccessTime、getTime)。4、常量名 多个单词组成时,字母全部⼤写,多个单词之间使⽤_分隔(例:INTEGER_CACHE)注意:只是为了增加规范性、可读性⽽做的⼀种约定,标识符在定义的时候最好见名知意,提⾼代码阅读性。
5、注释5.1 注释的作⽤通过注释提⾼程序的可读性,是java程序的条理更加清晰,易于区分代码⾏与注释⾏。另外通常在程序开头加⼊作者,时间,版本,要实现的功能等内容注释,⽅便后来的维护以及程序员的交流。5.2 注释的种类1.单⾏注释(line comment)⽤//表⽰,编译器看到//会忽略该⾏//后的所⽂本2.多⾏注释 (block comment)⽤/**/表⽰,编译器看到/*时会搜索接下来的*/,忽略掉/**/之间的⽂本。3.⽂档注释⽤ /** */表⽰,是java特有的注释,其中注释内容可以被JDK提供的⼯具 javadoc 所解析,⽣成⼀套以⽹页⽂件形式体现的该程序的说明⽂档。⽂档注释(编写软件说明书) 1、需要使⽤sum给我们提供的javadoc⼯具⽣成⼀个html的说明⽂档。 2、只能抽取public的属性或者⽅法内容。格式: Javadoc -d 指定存储⽂档的路径 -version -author(可选) ⽬标⽂件 @author 作者 @version 版本 @param ⽅法的参数 @return 返回值注释的使⽤细节:三种注释可以出现在程序的任何地⽅,但是不推荐找任意位置。注意:⽂档注释只能出现在类、属性、⽅法的上⾯。
6、常量
6.1 常量的概述常量是指在程序运⾏过程中其值不能改变的量。6.2 常量类型Java中常量的分类: 整数常量 : 所有整数 ⼩数常量 : 所有⼩数 布尔常量 : 只有true和false 字符常量 :使⽤’’引起来的单个字符 字符串常量 :使⽤“”引起来的字符序列,“” 、“a” 、” ”
null常量 : 只有⼀个值null6.3 char类型char类型表⽰的是单个字符类型,任何数据使⽤单引号括起来的都是表⽰字符。字符只能有⼀个字符。
注意:特殊字符的转义序列:转义字符转义字符的概述:特殊字符使⽤””把其转化成字符的本⾝输出,那么使⽤””的字符称作为转移字符。需求:使⽤输出语句,打印出带引号的信息例如输出。n("teacher said"java is fun""); 编译是⽆法正常通过的。语法有错误,编译器读到第⼆个引号就认为是字符串的结束,剩余的不知道怎么处理。如何解决这个问题:java中使⽤转义字符来表⽰特殊的字符。⼀个转义字符以反斜杠()开始。 问题:想要打印带引号的字符串怎么办,就可以使⽤反斜杠()后跟字符,这个反斜杠就是转义字符。r 表⽰接受键盘输⼊,相当于按下回车。n 表⽰换⾏。t 制表符,相当于Table键(相当于四个空格)b 退格键,相当于Back Space’ 单引号’’ 双引号 表⽰⼀个斜跨上述问问题解决:n("teacher said"java is fun"");注意:换⾏符就是另起⼀⾏,回车符就是回到⼀⾏的开头,所以我们平时编写⽂件的回车符应该确切来说叫做回车换⾏符6.4 boolean 类型boolean由数学家Geogore Boole 发明boolean 类型⽤来存储布尔值,在java中布尔值只有2个,true和false。boolean flag = true;flag = false; Java中这8种基本数据类型都是⼩写的。
7、进制的转换进制:进制是⼀种记数⽅式 ,可以⽤有限的符号代表所有的数值。由特定的数值组成。7.1 整型的表现形式1. ⼗进制: 都是以0-9这九个数字组成,不能以0开头。2. ⼆进制: 由0和1两个数字组成。3. ⼋进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始(注:数字0,⽽⾮字母o)。4. ⼗六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以0x开始(注:数字0,⽽⾮字母o)。 ⼗进制转⼆进制的转换原理:除以2,反向取余数,直到商为0终⽌。 ⼆进制转⼗进制的转换原理:就是⽤⼆进制数(从右到左)乘以2的n次⽅,n从0开始,每次递增如:⼆进制1001,转⼗进制:1*2^0 + 0*2^1 + 0*2^2 + 1*2^3 = 1+0+0+8 = 97.2 ⼋进制的特点 由数字0-7组成。即使⽤三个开关表⽰⼀个⼋进制数。 ⼗进制转换⼋进制原理:就是⽤⼗进制的数字不断除于8,取余数。 ⼋进制转⼗进制原理: ⽤⼋进制数(从右到左)不断乘以8的n次⽅,n从0开始,每次递增1。如:⼋进制21,转⼗进制:1*8^0 + 2*8^1 = 1+16 = 17⼆进制转⼋进制:⼋进制转⼆进制:(⽐如226)7.3 ⼗进制与⼗六进制之间的转换 ⼗六进制特点:由0~9 a(10) b(11) c(12) d(13) e(14) f(15)组成。 ⼗进制转⼗六进制原理:就是不断除以16,取余数。⼗六进制转⼗进制:如:⼗六进制100,转⼗进制:0*16^0 + 0*16^1 + 1*16^2= 0+0+16*16 = 256⼆进制转⼗六进制:
8、变量8.1 变量的概述1.变量的概述⽤于存储可变数据的容器。2.变量存在的意义计算机主要⽤于处理⽣活中的数据,由于⽣活中存在⼤量的可变数据,那么计算机就必须具备存储可变数据的能⼒。⽐如: 1.时间每⼀秒都在发⽣变化,根据不同的时间要有不同的处理⽅式。 2.⽓象站会根据温度发布天⽓预报信号。3.变量的特点正常情况下⽜奶盒装的都是⽜奶,⽽且会根据⽜奶的多少去决定要多⼤的容量的⽜奶盒,A和B两位同学同时把⽜奶盒放进篮⼦⾥⾯,但是需要区分两个⽜奶盒是谁的,都需要在⽜奶盒上做⼀个标志。特点:1. 必须要有⼤⼩2. 存储⼀定格式的可变数据3. 必须要有名字8.2 变量的数据类型(四类⼋种)1. 整型byte:Java中最⼩的数据类型,在内存中占1个字节(8 bit),取值范围-128~127,默认值0short:短整型,在内存中占2个字节(16 bit),取值范围-32768~32717,默认值0int:整型,⽤于存储整数,在内存中占4个字节,取值范围-2147483648~2147483647,默认值0long:长整型,在内存中占8个字节,取值范围-2^63~2^63-1,默认值0L如果⼀个数值没有采取特殊的处理,那么该整数默认的类型是int。可以使⽤数值后⾯添加L或⼩写L改变默认的整数类型。2. 浮点型 float 代表四个字节的⼤⼩ 32bit double 代表⼋个字节的⼤⼩ 64bitjava程序中所有的⼩数默认的类型是double类型,所以需要使⽤特殊的符号改变默认的⼩数类型。3. 字符型 char 代表两个字节的⼤⼩ 16bit 2(16)原理:将字符映射为码表中对应的⼗进制数据加以存储。4. 布尔型 boolean 占⼀个字节。只有true与false两个值。8.3 变量的声明格式: 数据类型 变量名字1 , 变量名字2 ,……变量名字n ,;案例:int i 声明了⼀个整形的变量。double d 声明了⼀个double数据类型的变量float f 声明了⼀个float数据类型的变量。备注:变量名的⾸字母都⼀般都是以⼩写字母开始。8.4 变量的初始化(⽅式)初始化⽅式1: 数据类型 变量名字 = 数值。初始化⽅式2: 数据类型 变量名字 , 变量名字 = 数值。案例: ⽅式1: double d = 3.14; ⽅式2: double d ; d = 3.14 ;
9、 java数据类型的转换Java中可以进⾏不同数据类型的加减乘除运算吗?是可以的。在算术运算符中已经体验过如果两个整数(int)相除会去掉⼩数部分。如果需要保留⼩数部分,可以让除数或者被除数变为double类型的(5变为5.0)。其实Java是⾃动的将int的那个数变为了double类型了也就是Java⾃动的将整数变为了浮点数。例如5/2.0 其实是5.0/2.09.1、 ⾃动类型转换(也叫隐式类型转换)可以将⼀个数赋值给更⼤数值范围的变量,例如可以经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; n(x);//程序把b结果⾃动转换为int类型。9.2、 强制类型转换(也叫显式类型转换)不可以将⼀个数值赋给范围更⼩数值范围的变量,除⾮进⾏类型转换。 byte b = 100; b = b + 2; n(b);上述例⼦发⽣了什么,发⽣了类型转换。b+2 遇到了加法运算,2默认是int类型,byte类型b变量存储的值⾃动类型提升为了int类型。执⾏完加法运算后的结果就是int类型,想要将int的类型值放⼊到byte类型变量b中,⽆法放⼊,编译报错。 byte b=1; b=(byte)(b+2);当两种类型彼此不兼容,或者⽬标类型取值范围⼩于源类型(⽬标是byte源是int)⽆法⾃动转换,此时就需要进⾏强制类型转换。9.3 强制类型转换需要注意:
损失精度 int a=128; byte b=(byte)a; n(b);//-128 /* * 此时的强转已经造成了数值的不准确 */再次分析此⾏代码 byte b = 100; b = b + 2;
n(b);编译:提⽰如下错误。9.4、类型转换的原理可以把byte 理解为1两的碗,short 2两的碗,int 4两的碗,long 8两的碗。1两碗的满碗酒可以倒⼊ 2两 4两 8两的碗中。但是 4两碗的酒倒⼊1两碗的酒就有⼀些问题。9.5、 什么时候要⽤强制类型转换 ⽐如⼩数部分只想保留整数部分. ⼀定要清楚要转换的数据在转换后数据的范围内否则会损失精度.public static void main(String[] args) { byte b = 100; b = (byte) (b + 2);
n(b); // 102 //舍弃⼩数部分 double d=5.5; int num=(int)d;
}9.6、 表达式的数据类型⾃动提升算术表达式,逻辑表达式所有的byte型、short型和char的值将被提升到int型。如果⼀个操作数是long型,计算结果就是long型;如果⼀个操作数是float型,计算结果就是float型;如果⼀个操作数是double型,计算结果就是double型。分析 n(‘a’+1)结果?⾃动类型提升 byte b = 3; int x = 4; x = x + b;// b会⾃动提升为int 类型参与运算。 n(x);// 7强制类型转换 byte b = 2; /* * 强制类型转换,强制将b+2强制转换为byte类型,再赋值给b */ b = (byte) (b + 2);
n(b);// 410 java运算符10.1.算术运算符正负号(+,-)除法%取模 求余数 取模的正负取决与被除数: ⾃增(++)前⾃增:先⾃增完毕,再运算整个表达式,语句分号前⾯的都是运算表达式;后⾃增,先运算完整个表达式(分号前⾯的都是表达式),再进⾏⾃增;结论:如果运算符在变量的前⾯,则该变量⾃增1或者⾃减1,然后返回的是变量的新值,如果运算符在变量的后⾯,则变量也会⾃增或者⾃减1,但是返回的是变量原来的值。++在前就是先运算,再取值,++在后就是先取值,再运算。10.2 赋值运算符
a+=b 可以想象成 a=a+b;变量声明完了之后,可以使⽤赋值语句(assignment statement)给变量赋⼀个值,Java中使⽤等号(=)作为基本的赋值运算符(assignment operator),格式如下:variable = expression;变量 = 表达式;变量我们已经知道如何声明,表达式具体如何定义?表达式的定义:表达式涉及到值(常量),变量和通过运算符计算出的值,以及他们组合在⼀起计算出的新值。x =y+1;例如:public static void main(String[] args) { int x = 1; // 声明int变量x, 赋值1给变量x int y = 0; // 声明int变量y, 赋值0给变量y double area; // 声明double变量area double radius = 1.0; // 声明double变量radius,并赋值1.0给变量radius x = 5 * (3 / 2) + 3 * 2; // 将=右半部分表达式的计算结果赋值给变量x x = y + 1; // 将变量y和1的求和的值赋值给变量x area = radius * radius * 3.14159; // 将计算⾯积的值赋值给变量area }10.3 ⽐较运算符如何⽐较两个值?使⽤⽐较运算符 3和5谁⼤,在java中如何⽐较?⽐较运算符⽐较的两边操作数,结果都是boolean的,只有true和false两种结果。
注意的细节:1.使⽤⽐较运算符的时候,要求两种数据类型必须⼀致。 byte、short、char 会⾃动提升⾄int。10.4 逻辑运算符什么是逻辑运算符?连接⽐较运算符的符号称之为逻辑运算符。那么为什么要连接⽐较运算符? 举例:当你去公司应聘,招聘要求,男性(判断为真),并且开发经验1年(判断为假)那么,我们还适合去⾯试吗,不能,因为只满⾜了⼀项,总体是不满⾜的(总体结果为假)。逻辑运算符⽤于对boolean型结果的表达式进⾏运算,运算的结果都是boolean型。我们的⽐较运算符只能进⾏⼀次判断,对于对此判断⽆能为⼒,那么逻辑运算符就可以经将较运算符连接起来。逻辑运算符⽤于连接布尔型表达式,在Java中不可以写成3
4、! ⾮!true = false!false = true5、&& 短路研究发现,&运算只有两边全为真的时候,结果才为真,那么当左边为假的时候就没有必要在进⾏判断,&&就产⽣了。int a =4;a >3 && a< 6;a >3 & a< 6 ;在这种情况下世没有区别的如果:a =2a >3 & a< 6 2⼤于 3 为假, 接着运算 2 ⼩于6 为真,总的结果为假a >3 && a< 6; 此时a 不⼤于3 结果为false 右边不运算了.即短路.所以&& ⽐& 效率稍微⾼了⼀点.public static void main(String[] args) { int x = 0; int y = 1; if (x == 0 && y == 1) { n(x + y); }}10.5 位运算符
规则:可以把1当做true 0当做false只有参与运算的两位都为1,&运算的结果才为1,否则就为0。只有参加运算的两位都是0,| 运算的结果才是0,否则都是1。只有参加运算的两位不同,^ 运算的结果才为1,否则就为0。1、& 与运算& 参见运算的两位数都为1,&运算符结果才为1,否则就为0。2、| 或运算| 参与运算的两位都为0,|运算的结果才为0,否则就为1。3、^ 异或运算^只有参加运算的两位不同,^运算的结果才为1,否则就为0。4、 ~ 反码就是取反,⼆进制只有1和0,取反就是如果为1,取反就是0,如果是0,取反就是1。n(~6);//-7结论:当参与取反的数值是正数时,把对应的值加上负号,再-1; 当参与取反的数值是负数时,把对应的值加上负号,再-1; 负数的表现形式就是对应的正数取反,再加1。负数的最⾼位肯定是1。5、负数表⽰负数对应的正数的⼆进制-1,然后取反。6、异或特点⼀个数异或同⼀个数两次,结果还是那个数. ⽤处⼀个简单的加密思想.除了这些位运算操作,还可以对数据按⼆进制位进⾏移位操作,Java的移位运算符有三种。10.6 移位操作符
案例:1、左移 (算术移位)3<< 2 是如何在计算机⾥是实现的?⾸先将3转换为2进制,结论:左移就相当于乘以2的位移个数次幂. 2、右移
结论:右移就相当于除以2的位移个数次幂.结论:⼀个数往左移越移越⼤,往右边移越来越⼩.推论左移规律3<<2=12; 3<<1=6 ; 3<<3=24;3*4=12 ; 3*2=6; 3*8=24;3*22=12; 3*21=6 3*23 =24;结论往左移⼏位就是乘以2的⼏次幂。右移规律6>>2=1 ;6>>1=3 ;6/4=1 ; 6/2=3 ;右移两位就是除以 2的2次⽅,右移⼀位就是除以2的⼀次⽅。总结 : >> 是除以2的移动位数次幂 << 是乘以2的移动位数次幂⽤处:最快的运算是位运算。3、⽆符号右移 (逻辑移位)通过演⽰发现右移时⾼位就空了出来, >> 右移时⾼位补什么要按照原有 数据的最⾼位来决定。1111-1111 1111-1111 1111-1111 1111-1010 -6>>21111-1111 1111-1111 1111-1111 1111-0010
最⾼位补什么要看原有最⾼位是什么那么使⽤>> 后原来是最⾼位1 的那么空出来的最⾼位还是1 的,是0的还是0。如果使⽤>>> ⽆论最⾼位是0还是1 空余最⾼位都拿0 补,这就是⽆符号右移。1111-1111 1111-1111 1111-1111 1111-1010 -6>>>2001111-1111 1111-1111 1111-1111 1111-10
结果是;1.7 三元运算符(也叫三⽬运算符)格式:(条件表达式)?表达式1:表达式2;解析:1、如果条件为true,运算后的结果是表达式1;2、如果条件为false,运算后的结果是表达式2;⽰例:1获取两个数中⼤数。int x = 1;int y = 2;int z;z = x > y ? x : y;n(z); //210.8 运算符的优先级与结合性
原创作者:欢迎转载,转载务必说明出处。(如果本⽂对您有帮助,可以点击⼀下右下⾓的
推荐,或评论,谢谢!)
2023年6月20日发(作者:)
Java基础1,⼊门基础知识本⽂知识点(⽬录):
1、Java简介语⾔起源Java是SUN ( Stanford University Network 斯坦福⼤学⽹络公司 ) 1995年推出的⼀门⾼级编程语⾔。Java名称的来源Java最初被命名为Oak,⽬标在于家⽤电器等⼩型系统的编程语⾔,随着市场的变化,SUN公司着眼于⽹络应⽤的开发。Java的名字的来源:Java是印度尼西亚⽖哇岛的英⽂名称,因盛产咖啡⽽闻名。
1995年5⽉23⽇,JAVA语⾔诞⽣ (雏形)1996年,1997分别推出JDK1.0,JDK1.1版1999年,JAVA被分成J2SE,J2EE,J2ME2000年,JDK1.4发布2004年9⽉30⽇18:00PM,J2SE1.5发布,成为Java语⾔发展史上的⼜⼀⾥程碑。为了表⽰该版本的重要性,J2SE1.5更名为Java SE 5.02005年,JAVA版本正式更名为JAVAEE,JAVASE, JAVAME2006年12⽉,SUN公司发布JRE6.0 2009年04⽉20⽇,Oracle以74亿美元收购Sun。取得java的版权。2010年9⽉,JDK7.0已经发布,增加了简单闭包功能。 2011年7⽉,甲⾻⽂公司发布java7的正式版。1.1、常见的dos命令盘符: 进⼊指定的盘符下。dir : 列出当前⽬录下的⽂件以及⽂件夹md : 创建⽬录
rd : 删除⽬录 注意:rd不能删除⾮空的⽂件夹,⽽且只能⽤于删除⽂件夹。cd : 进⼊指定⽬录cd.. : 退回到上⼀级⽬录cd : 退回到根⽬录echo "hello java"> : 写⼊⽂本到指定⽂件
type :显⽰⽂件内容命令del : 删除⽂件 注意:不能删除⽂件夹,只能删除⽂件。exit : 推出dos命令⾏cls : 通知计算机将当前的命令清空* : 是通配符。tab : 命令补全。⽅向键:上下键是找回上次你写过的命令。1.2、java语⾔重要特性之跨平台
1.2.1 跨平台什么是跨平台(计算机系统),跨平台概念是软件开发中⼀个重要的概念,即不依赖于操作系统,也不信赖硬件环境。⼀个操作系统下开发的应⽤,放到另⼀个操作系统下依然可以运⾏。1.2.2 Java的跨平台“write once run anywhere”Java的跨平台是相对于其他编程语⾔⽽⾔的,通过Java语⾔编写的应⽤程序在不同的系统平台上都可以运⾏。⼀般的⾼级语⾔如果要在不同的平台上运⾏,⾄少需要编译成不同的⽬标代码。在windows编译的c语⾔程序,在linux下是不能运⾏的。当然在linux下编译的c语⾔程序在windows下也是不能运⾏的。⽽Java语⾔在不同平台上运⾏时不需要重新编译。Java跨平台的原理:Java的跨平台是通过Java虚拟机(JVM)来实现的。1.2.3 Java虚拟机(JVM)Java Virtual Machine ⼀个软件模拟的计算机。Java源程序想象成我们的C源程序,Java源程序编译后⽣成的字节码(.class)就相当于C源程序编译后的⼆进制可执⾏⽂件。JVM虚拟机相当于计算机系统(操作系统+硬件环境),Java解释器相当于CPU。.exe⽂件直接在windows操作系统下运⾏,在CPU上运⾏的是机器码(.exe⽂件).class字节码⽂件是运⾏在JVM虚拟机下的,在Java解释器上运⾏的是Java字节码。Java解释器相当于运⾏Java字节码的“CPU”,但该“CPU”不是通过硬件实现的,⽽是⽤软件实现的。Java解释器实际上就是特定的平台下的⼀ 个应⽤程序。只要实现了特定平台下的解释器程序,Java字节码就能通过解释器程序在该平台下运⾏,这是Java跨平台的根本。当前,并不是在所有的平台 下都有相应Java解释器程序,这也是Java并不能在所有的平台下都能运⾏的原因,它只能在已实现了Java解释器程序的平台下运⾏。
1.3、Java的三⼤平台JavaSE Java SE(Java Platform,Standard Edition)。Java SE 以前称为J2SE。它允许开发和部署在桌⾯、服务器、嵌⼊式环境和实时环境中使⽤的Java 应⽤程序。Java SE 包含了⽀持Java Web 服务开发的类,并为Java Platform,Enterprise Edition(Java EE)提供基础。
例⼦:类似QQ、微信、飞秋、电脑管家这样⼦的桌⾯应⽤。Java EE Java EE(Java Platform,Enterprise Edition)。这个版本以前称为J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应⽤程序。Java EE 是在Java SE 的基础上构建的,它提供Web 服务、组件模型、管理和通信API,可以⽤来实现企业级的⾯向服务体系结构(service-oriented architecture,SOA)和Web 2.0 应⽤程序。
Java ME Java ME(Java Platform,Micro Edition)。这个版本以前称为J2ME,也叫K-JAVA。Java ME 为在移动设备和嵌⼊式设备(⽐如⼿机、PDA、电视机顶盒和打印机)上运⾏的应⽤程序提供⼀个健壮且灵活的环境。Java ME 包括灵活的⽤户界⾯、健壮的安全模型、许多内置的⽹络协议以及对可以动态下载的连⽹和离线应⽤程序的丰富⽀持。基于Java ME 规范的应⽤程序只需编写⼀次,就可以⽤于许多设备,⽽且可以利⽤每个设备的本机功能。
2、环境的搭建2.1、JDK简介:JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。⾃从Java推出以来,JDK已经成为使⽤最⼴泛的Java SDK。JDK 是整个Java的核⼼,包括了Java运⾏环境、Java⼯具和Java基础类库。JDK是学好Java的第⼀步。从SUN的JDK5.0开始,提供了泛型等⾮常实⽤的功能,其版本也不断更新,运⾏效率得到了⾮常⼤的提⾼。2.2、JDK的安装2.3JDK⽬录介绍1. bin ⽬录:存放Java的编译器、解释器等⼯具(可执⾏⽂件)。2. db ⽬录:JDK7附带的⼀个轻量级的数据库,名字叫做Derby。3. include ⽬录:存放的调⽤系统资源的接⼝⽂件。4. jre ⽬录:存放Java运⾏环境⽂件。5. lib ⽬录:存放Java的类库⽂件。6. ⽂件:JDK提供的类的源代码。
附:
安装JDK需要注意的事项:1. 安装路径中不要包含中⽂。2. 安装路径中不要包含空格。2.4、JRE简JRE Java Runtime Environment Java运⾏环境。包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核⼼类库等,如果想要运⾏⼀个开发好的Java程序,计算机中只需要安装JRE即可。2.5、配置path环境变量问题:⽬前在控制台窗⼝下只能在jdk安装⽬录的bin⽬录下才能使⽤jdk的开发⼯具在控,如果想制台窗⼝下想要在任意⽬录下都可以使⽤javac与java或者jdk其他的开发⼯具那应该怎么做呢?1.在dos窗⼝敲上javac我们在随意的⼀个⽬录敲javac或者java命令时候,发现dos窗⼝显⽰这个不是内部命令,然后我们在上⾯敲上notepad命令时,打开了⼀个记事本的程序,但是在当前⽬录下页没有存在的可执⾏⽂件,那么为什么能启动呢?错误原因:原来在dos窗⼝上写上⼀个命令时候,如果在当前⽬录下找不到指定的可执⾏⽂件,那么它会根据path环境变量保存的路径去搜索是否存在这个可执⾏⽂件,如果存在则启动该程序,否则就没有这个命令。2.解决⽅法:1、 进⼊jdk的安装⽬录的bin⽬录。2、 在dos命令上敲javac。(如果出现了以上的图信息则配置成功)3.为什么要配置path环境变量因为在jdk下bin⽂件夹中有很多我们在开发中要使⽤的⼯具,如,,等,那么我们在使⽤时,想要在电脑的任意位置下使⽤这些java开发⼯具,那么我们就需有把这些⼯具所在的路径配置到系统的环境变量中,当我们使⽤时,系统可以帮且我们找到这些命令。4.如何配置path环境变量我们将jdk下bin的路径进⾏复制在我们电脑-----à属性-----à⾼级-----à环境变量---------àpath这项将bin的路径放置到path的最前边,别忘记加分号._HOME环境的配置有时候可能需要更换Jdk的⽬录,但是经常修改path的值可能会不⼩⼼修改其他的路径,解决⽅法:1、 创建⼀个JAVA_HOME的变量。2、 JAVA_HOME的值为JDK的安装⽬录。3、 配置path路径:%JAVA_HOME%/bin。以后需要更换JDK的⽬录时,只需要更换JAVA_HOME的⽬录即可。设置临时变量:set : 查看所有的环境变量信息。set 变量名 :查看具体⼀个环境变量的值。set 变量名=:清空⼀个环境变量的值。set 变量名=具体值 :给指定变量定义具体值。想要在原有环境变量值基础上添加新值呢?⾸先,通过%变量名%操作符获取到原有环境变量的值。然后加上新值后在定义给该变量名即可举例:给path环境变量加⼊新值set path=新值;%path%注意:这种配置⽅式只在当前dos窗⼝有效。窗⼝关闭,配置消失。2.6、 classpath环境变量1、classpath的作⽤: 作⽤是指定类搜索路径,要使⽤已经编写好的类,前提当然是能够找到它们了,⼀旦配置了classpath路径信息的时候,jvm与java编译器都会根据classpath指定的路径去寻找class⽂件。2、如何设置当前⽬录(.)set classpath=.;设置路径 与 set classpath=设置路径;.有什么区别?“.”在前⾯的时候,java虚拟机会先从当前路径去寻找class⽂件,然后再到指定的路径去需找。如果”.”在后⾯,java虚拟机则会先寻找指定好的路径,然后再在当前的路径去寻找。设置classpath的时候要加上 ; 就会在当前⽬录下查找。
3、关键字3.1 关键字的概述Java的关键字对java的编译器有特殊的意义,他们⽤来表⽰⼀种数据类型,或者表⽰程序的结构等,关键字不能⽤作变量名、⽅法名、类名、包名。3.2 常见的关键字4、标识符4.1 什么是标识符就是程序员在定义java程序时,⾃定义的⼀些名字,例如helloworld 程序⾥关键字class 后跟的Demo,就是我们定义的类名。类名就属于标识符的⼀种。标识符除了应⽤在类名上,还可以⽤在变量、函数名、包名上。4.2 标识符必须遵循以下规则标识符必须遵循以下规则1. 标识符由26个英⽂字符⼤⼩写(a~z,A~Z)、数字(0~9)、下划线(_)和美元符号($)组成。2. 不能以数字开头,不能是关键字3. 严格区分⼤⼩写4. 标识符的可以为任意长度4.3 标识符案例4.3.1 合法的标识符ComputeArea,radius,area $itcast _itcast gz_itcast注意:由于Java严格区分⼤⼩写,ITCAST和itcast是完全不同的标识符4.3.2 ⾮法标识符1. class (关键字)2. 100java(不能以数字开头)3. Hello java (空格不是组成标识符的元素)4. 包名4.3.3 Java中的标识符命名规范1、包名 多个单词组成时所有字母⼩写(例:package )2、类名和接⼝ 多个单词组成时所有单词的⾸字母⼤写(例:HelloWorld)3、变量名和函数名 多个单词组成时第⼀个单词⾸字母⼩写,其他单词⾸字母⼤写(例:lastAccessTime、getTime)。4、常量名 多个单词组成时,字母全部⼤写,多个单词之间使⽤_分隔(例:INTEGER_CACHE)注意:只是为了增加规范性、可读性⽽做的⼀种约定,标识符在定义的时候最好见名知意,提⾼代码阅读性。
5、注释5.1 注释的作⽤通过注释提⾼程序的可读性,是java程序的条理更加清晰,易于区分代码⾏与注释⾏。另外通常在程序开头加⼊作者,时间,版本,要实现的功能等内容注释,⽅便后来的维护以及程序员的交流。5.2 注释的种类1.单⾏注释(line comment)⽤//表⽰,编译器看到//会忽略该⾏//后的所⽂本2.多⾏注释 (block comment)⽤/**/表⽰,编译器看到/*时会搜索接下来的*/,忽略掉/**/之间的⽂本。3.⽂档注释⽤ /** */表⽰,是java特有的注释,其中注释内容可以被JDK提供的⼯具 javadoc 所解析,⽣成⼀套以⽹页⽂件形式体现的该程序的说明⽂档。⽂档注释(编写软件说明书) 1、需要使⽤sum给我们提供的javadoc⼯具⽣成⼀个html的说明⽂档。 2、只能抽取public的属性或者⽅法内容。格式: Javadoc -d 指定存储⽂档的路径 -version -author(可选) ⽬标⽂件 @author 作者 @version 版本 @param ⽅法的参数 @return 返回值注释的使⽤细节:三种注释可以出现在程序的任何地⽅,但是不推荐找任意位置。注意:⽂档注释只能出现在类、属性、⽅法的上⾯。
6、常量
6.1 常量的概述常量是指在程序运⾏过程中其值不能改变的量。6.2 常量类型Java中常量的分类: 整数常量 : 所有整数 ⼩数常量 : 所有⼩数 布尔常量 : 只有true和false 字符常量 :使⽤’’引起来的单个字符 字符串常量 :使⽤“”引起来的字符序列,“” 、“a” 、” ”
null常量 : 只有⼀个值null6.3 char类型char类型表⽰的是单个字符类型,任何数据使⽤单引号括起来的都是表⽰字符。字符只能有⼀个字符。
注意:特殊字符的转义序列:转义字符转义字符的概述:特殊字符使⽤””把其转化成字符的本⾝输出,那么使⽤””的字符称作为转移字符。需求:使⽤输出语句,打印出带引号的信息例如输出。n("teacher said"java is fun""); 编译是⽆法正常通过的。语法有错误,编译器读到第⼆个引号就认为是字符串的结束,剩余的不知道怎么处理。如何解决这个问题:java中使⽤转义字符来表⽰特殊的字符。⼀个转义字符以反斜杠()开始。 问题:想要打印带引号的字符串怎么办,就可以使⽤反斜杠()后跟字符,这个反斜杠就是转义字符。r 表⽰接受键盘输⼊,相当于按下回车。n 表⽰换⾏。t 制表符,相当于Table键(相当于四个空格)b 退格键,相当于Back Space’ 单引号’’ 双引号 表⽰⼀个斜跨上述问问题解决:n("teacher said"java is fun"");注意:换⾏符就是另起⼀⾏,回车符就是回到⼀⾏的开头,所以我们平时编写⽂件的回车符应该确切来说叫做回车换⾏符6.4 boolean 类型boolean由数学家Geogore Boole 发明boolean 类型⽤来存储布尔值,在java中布尔值只有2个,true和false。boolean flag = true;flag = false; Java中这8种基本数据类型都是⼩写的。
7、进制的转换进制:进制是⼀种记数⽅式 ,可以⽤有限的符号代表所有的数值。由特定的数值组成。7.1 整型的表现形式1. ⼗进制: 都是以0-9这九个数字组成,不能以0开头。2. ⼆进制: 由0和1两个数字组成。3. ⼋进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始(注:数字0,⽽⾮字母o)。4. ⼗六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以0x开始(注:数字0,⽽⾮字母o)。 ⼗进制转⼆进制的转换原理:除以2,反向取余数,直到商为0终⽌。 ⼆进制转⼗进制的转换原理:就是⽤⼆进制数(从右到左)乘以2的n次⽅,n从0开始,每次递增如:⼆进制1001,转⼗进制:1*2^0 + 0*2^1 + 0*2^2 + 1*2^3 = 1+0+0+8 = 97.2 ⼋进制的特点 由数字0-7组成。即使⽤三个开关表⽰⼀个⼋进制数。 ⼗进制转换⼋进制原理:就是⽤⼗进制的数字不断除于8,取余数。 ⼋进制转⼗进制原理: ⽤⼋进制数(从右到左)不断乘以8的n次⽅,n从0开始,每次递增1。如:⼋进制21,转⼗进制:1*8^0 + 2*8^1 = 1+16 = 17⼆进制转⼋进制:⼋进制转⼆进制:(⽐如226)7.3 ⼗进制与⼗六进制之间的转换 ⼗六进制特点:由0~9 a(10) b(11) c(12) d(13) e(14) f(15)组成。 ⼗进制转⼗六进制原理:就是不断除以16,取余数。⼗六进制转⼗进制:如:⼗六进制100,转⼗进制:0*16^0 + 0*16^1 + 1*16^2= 0+0+16*16 = 256⼆进制转⼗六进制:
8、变量8.1 变量的概述1.变量的概述⽤于存储可变数据的容器。2.变量存在的意义计算机主要⽤于处理⽣活中的数据,由于⽣活中存在⼤量的可变数据,那么计算机就必须具备存储可变数据的能⼒。⽐如: 1.时间每⼀秒都在发⽣变化,根据不同的时间要有不同的处理⽅式。 2.⽓象站会根据温度发布天⽓预报信号。3.变量的特点正常情况下⽜奶盒装的都是⽜奶,⽽且会根据⽜奶的多少去决定要多⼤的容量的⽜奶盒,A和B两位同学同时把⽜奶盒放进篮⼦⾥⾯,但是需要区分两个⽜奶盒是谁的,都需要在⽜奶盒上做⼀个标志。特点:1. 必须要有⼤⼩2. 存储⼀定格式的可变数据3. 必须要有名字8.2 变量的数据类型(四类⼋种)1. 整型byte:Java中最⼩的数据类型,在内存中占1个字节(8 bit),取值范围-128~127,默认值0short:短整型,在内存中占2个字节(16 bit),取值范围-32768~32717,默认值0int:整型,⽤于存储整数,在内存中占4个字节,取值范围-2147483648~2147483647,默认值0long:长整型,在内存中占8个字节,取值范围-2^63~2^63-1,默认值0L如果⼀个数值没有采取特殊的处理,那么该整数默认的类型是int。可以使⽤数值后⾯添加L或⼩写L改变默认的整数类型。2. 浮点型 float 代表四个字节的⼤⼩ 32bit double 代表⼋个字节的⼤⼩ 64bitjava程序中所有的⼩数默认的类型是double类型,所以需要使⽤特殊的符号改变默认的⼩数类型。3. 字符型 char 代表两个字节的⼤⼩ 16bit 2(16)原理:将字符映射为码表中对应的⼗进制数据加以存储。4. 布尔型 boolean 占⼀个字节。只有true与false两个值。8.3 变量的声明格式: 数据类型 变量名字1 , 变量名字2 ,……变量名字n ,;案例:int i 声明了⼀个整形的变量。double d 声明了⼀个double数据类型的变量float f 声明了⼀个float数据类型的变量。备注:变量名的⾸字母都⼀般都是以⼩写字母开始。8.4 变量的初始化(⽅式)初始化⽅式1: 数据类型 变量名字 = 数值。初始化⽅式2: 数据类型 变量名字 , 变量名字 = 数值。案例: ⽅式1: double d = 3.14; ⽅式2: double d ; d = 3.14 ;
9、 java数据类型的转换Java中可以进⾏不同数据类型的加减乘除运算吗?是可以的。在算术运算符中已经体验过如果两个整数(int)相除会去掉⼩数部分。如果需要保留⼩数部分,可以让除数或者被除数变为double类型的(5变为5.0)。其实Java是⾃动的将int的那个数变为了double类型了也就是Java⾃动的将整数变为了浮点数。例如5/2.0 其实是5.0/2.09.1、 ⾃动类型转换(也叫隐式类型转换)可以将⼀个数赋值给更⼤数值范围的变量,例如可以经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; n(x);//程序把b结果⾃动转换为int类型。9.2、 强制类型转换(也叫显式类型转换)不可以将⼀个数值赋给范围更⼩数值范围的变量,除⾮进⾏类型转换。 byte b = 100; b = b + 2; n(b);上述例⼦发⽣了什么,发⽣了类型转换。b+2 遇到了加法运算,2默认是int类型,byte类型b变量存储的值⾃动类型提升为了int类型。执⾏完加法运算后的结果就是int类型,想要将int的类型值放⼊到byte类型变量b中,⽆法放⼊,编译报错。 byte b=1; b=(byte)(b+2);当两种类型彼此不兼容,或者⽬标类型取值范围⼩于源类型(⽬标是byte源是int)⽆法⾃动转换,此时就需要进⾏强制类型转换。9.3 强制类型转换需要注意:
损失精度 int a=128; byte b=(byte)a; n(b);//-128 /* * 此时的强转已经造成了数值的不准确 */再次分析此⾏代码 byte b = 100; b = b + 2;
n(b);编译:提⽰如下错误。9.4、类型转换的原理可以把byte 理解为1两的碗,short 2两的碗,int 4两的碗,long 8两的碗。1两碗的满碗酒可以倒⼊ 2两 4两 8两的碗中。但是 4两碗的酒倒⼊1两碗的酒就有⼀些问题。9.5、 什么时候要⽤强制类型转换 ⽐如⼩数部分只想保留整数部分. ⼀定要清楚要转换的数据在转换后数据的范围内否则会损失精度.public static void main(String[] args) { byte b = 100; b = (byte) (b + 2);
n(b); // 102 //舍弃⼩数部分 double d=5.5; int num=(int)d;
}9.6、 表达式的数据类型⾃动提升算术表达式,逻辑表达式所有的byte型、short型和char的值将被提升到int型。如果⼀个操作数是long型,计算结果就是long型;如果⼀个操作数是float型,计算结果就是float型;如果⼀个操作数是double型,计算结果就是double型。分析 n(‘a’+1)结果?⾃动类型提升 byte b = 3; int x = 4; x = x + b;// b会⾃动提升为int 类型参与运算。 n(x);// 7强制类型转换 byte b = 2; /* * 强制类型转换,强制将b+2强制转换为byte类型,再赋值给b */ b = (byte) (b + 2);
n(b);// 410 java运算符10.1.算术运算符正负号(+,-)除法%取模 求余数 取模的正负取决与被除数: ⾃增(++)前⾃增:先⾃增完毕,再运算整个表达式,语句分号前⾯的都是运算表达式;后⾃增,先运算完整个表达式(分号前⾯的都是表达式),再进⾏⾃增;结论:如果运算符在变量的前⾯,则该变量⾃增1或者⾃减1,然后返回的是变量的新值,如果运算符在变量的后⾯,则变量也会⾃增或者⾃减1,但是返回的是变量原来的值。++在前就是先运算,再取值,++在后就是先取值,再运算。10.2 赋值运算符
a+=b 可以想象成 a=a+b;变量声明完了之后,可以使⽤赋值语句(assignment statement)给变量赋⼀个值,Java中使⽤等号(=)作为基本的赋值运算符(assignment operator),格式如下:variable = expression;变量 = 表达式;变量我们已经知道如何声明,表达式具体如何定义?表达式的定义:表达式涉及到值(常量),变量和通过运算符计算出的值,以及他们组合在⼀起计算出的新值。x =y+1;例如:public static void main(String[] args) { int x = 1; // 声明int变量x, 赋值1给变量x int y = 0; // 声明int变量y, 赋值0给变量y double area; // 声明double变量area double radius = 1.0; // 声明double变量radius,并赋值1.0给变量radius x = 5 * (3 / 2) + 3 * 2; // 将=右半部分表达式的计算结果赋值给变量x x = y + 1; // 将变量y和1的求和的值赋值给变量x area = radius * radius * 3.14159; // 将计算⾯积的值赋值给变量area }10.3 ⽐较运算符如何⽐较两个值?使⽤⽐较运算符 3和5谁⼤,在java中如何⽐较?⽐较运算符⽐较的两边操作数,结果都是boolean的,只有true和false两种结果。
注意的细节:1.使⽤⽐较运算符的时候,要求两种数据类型必须⼀致。 byte、short、char 会⾃动提升⾄int。10.4 逻辑运算符什么是逻辑运算符?连接⽐较运算符的符号称之为逻辑运算符。那么为什么要连接⽐较运算符? 举例:当你去公司应聘,招聘要求,男性(判断为真),并且开发经验1年(判断为假)那么,我们还适合去⾯试吗,不能,因为只满⾜了⼀项,总体是不满⾜的(总体结果为假)。逻辑运算符⽤于对boolean型结果的表达式进⾏运算,运算的结果都是boolean型。我们的⽐较运算符只能进⾏⼀次判断,对于对此判断⽆能为⼒,那么逻辑运算符就可以经将较运算符连接起来。逻辑运算符⽤于连接布尔型表达式,在Java中不可以写成3
4、! ⾮!true = false!false = true5、&& 短路研究发现,&运算只有两边全为真的时候,结果才为真,那么当左边为假的时候就没有必要在进⾏判断,&&就产⽣了。int a =4;a >3 && a< 6;a >3 & a< 6 ;在这种情况下世没有区别的如果:a =2a >3 & a< 6 2⼤于 3 为假, 接着运算 2 ⼩于6 为真,总的结果为假a >3 && a< 6; 此时a 不⼤于3 结果为false 右边不运算了.即短路.所以&& ⽐& 效率稍微⾼了⼀点.public static void main(String[] args) { int x = 0; int y = 1; if (x == 0 && y == 1) { n(x + y); }}10.5 位运算符
规则:可以把1当做true 0当做false只有参与运算的两位都为1,&运算的结果才为1,否则就为0。只有参加运算的两位都是0,| 运算的结果才是0,否则都是1。只有参加运算的两位不同,^ 运算的结果才为1,否则就为0。1、& 与运算& 参见运算的两位数都为1,&运算符结果才为1,否则就为0。2、| 或运算| 参与运算的两位都为0,|运算的结果才为0,否则就为1。3、^ 异或运算^只有参加运算的两位不同,^运算的结果才为1,否则就为0。4、 ~ 反码就是取反,⼆进制只有1和0,取反就是如果为1,取反就是0,如果是0,取反就是1。n(~6);//-7结论:当参与取反的数值是正数时,把对应的值加上负号,再-1; 当参与取反的数值是负数时,把对应的值加上负号,再-1; 负数的表现形式就是对应的正数取反,再加1。负数的最⾼位肯定是1。5、负数表⽰负数对应的正数的⼆进制-1,然后取反。6、异或特点⼀个数异或同⼀个数两次,结果还是那个数. ⽤处⼀个简单的加密思想.除了这些位运算操作,还可以对数据按⼆进制位进⾏移位操作,Java的移位运算符有三种。10.6 移位操作符
案例:1、左移 (算术移位)3<< 2 是如何在计算机⾥是实现的?⾸先将3转换为2进制,结论:左移就相当于乘以2的位移个数次幂. 2、右移
结论:右移就相当于除以2的位移个数次幂.结论:⼀个数往左移越移越⼤,往右边移越来越⼩.推论左移规律3<<2=12; 3<<1=6 ; 3<<3=24;3*4=12 ; 3*2=6; 3*8=24;3*22=12; 3*21=6 3*23 =24;结论往左移⼏位就是乘以2的⼏次幂。右移规律6>>2=1 ;6>>1=3 ;6/4=1 ; 6/2=3 ;右移两位就是除以 2的2次⽅,右移⼀位就是除以2的⼀次⽅。总结 : >> 是除以2的移动位数次幂 << 是乘以2的移动位数次幂⽤处:最快的运算是位运算。3、⽆符号右移 (逻辑移位)通过演⽰发现右移时⾼位就空了出来, >> 右移时⾼位补什么要按照原有 数据的最⾼位来决定。1111-1111 1111-1111 1111-1111 1111-1010 -6>>21111-1111 1111-1111 1111-1111 1111-0010
最⾼位补什么要看原有最⾼位是什么那么使⽤>> 后原来是最⾼位1 的那么空出来的最⾼位还是1 的,是0的还是0。如果使⽤>>> ⽆论最⾼位是0还是1 空余最⾼位都拿0 补,这就是⽆符号右移。1111-1111 1111-1111 1111-1111 1111-1010 -6>>>2001111-1111 1111-1111 1111-1111 1111-10
结果是;1.7 三元运算符(也叫三⽬运算符)格式:(条件表达式)?表达式1:表达式2;解析:1、如果条件为true,运算后的结果是表达式1;2、如果条件为false,运算后的结果是表达式2;⽰例:1获取两个数中⼤数。int x = 1;int y = 2;int z;z = x > y ? x : y;n(z); //210.8 运算符的优先级与结合性
原创作者:欢迎转载,转载务必说明出处。(如果本⽂对您有帮助,可以点击⼀下右下⾓的
推荐,或评论,谢谢!)
发布评论