共计 7687 个字符,预计需要花费 20 分钟才能阅读完成。
今日分享开始啦,请大家多多指教~
之前给大家曾经讲述了正文,标识符,数据类型,类型转换,这几种根底知识点,今日给大家持续解说 Java 残余的根底知识点,其中包含类型转换,变量,常量,运算符等内容。话不多说,注释开始啦!
类型转换
因为 Java 是强类型语言,所以要进行有些运算的时候的,须要用到类型转换。
整型、实型(常量)、字符型数据能够混合运算。
运算中,不同类型的数据先转化为同一类型,而后进行运算。
转换从低级到高级(依据容量来看)。
1 低 ————————————> 高
2
3 byte,short,char—> int —> long—> float —> double
数据类型转换必须满足如下规定:
不能对 boolean 类型进行类型转换。
不能把对象类型转换成不相干类的对象。
在把容量大的类型转换为容量小的类型时必须应用强制类型转换。
转换过程中可能导致溢出或损失精度,例如:
1 int i =128;
2 byte b = (byte)i;
因为 byte 类型是 8 位,最大值为 127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
浮点数到整数的转换是通过舍弃小数失去,而不是四舍五入,例如:
1 (int)23.7 == 23;
2 (int)-45.89f == -45
1、主动类型转换
主动类型转换:容量小的数据类型能够主动转换为容量大的数据类型。
例如: short 数据类型的位数为 16 位,就能够主动转换位数为 32 的 int 类型,同样float 数据类型的位数为 32,能够主动转换为 64 位的 double 类型。
【演示】
【解析:c1 的值为字符 a , 查 ASCII 码表可知对应的 int 类型值为 97,A 对应值为 65,所以 i2=65+1=66。】
2、强制类型转换
强制类型转换,又被称为造型,用于显式的转换一个数值的类型.
在有可能失落信息的状况下进行的转换是通过造型来实现的,但可能造成精度升高或溢出。
强制类型转换的语法格局:(type)var,运算符“()”中的 type 示意将值 var 想要转换成的指标数据类型。条件是转换的数据类型必须是兼容的。
【演示】
当将一种类型强制转换成另一种类型,而又超出了指标类型的示意范畴,就会被截断成为一个齐全不同的值,溢出。
3、常见谬误和问题
1. 操作比拟大的数时,要注意是否溢出,尤其是整数操作时;
1 public static void main(String[] args) {
2 int money = 1000000000; //10 亿
3 int years = 20;
4 int total = money*years; // 返回的是正数
5 long total1 = money*years; // 返回的依然是正数。默认是 int,因而后果会转成 int 值,再转成 long。然而曾经产生了数据失落
6 long total2 = money*((long)years); // 先将一个因子变成 long,整个表达式产生晋升。全副用 long 来计算。7 System.out.println(total);
8 System.out.println(total1);
9 System.out.println(total2);
10 }
2. L 和 l 的问题:
不要命名名字为 l 的变量,long 类型应用大写 L 不要用小写。
4、JDK7 扩大
JDK7 新个性: 二进制整数
因为咱们在开发中也常常应用二进制整数,因而 JDK7 为咱们间接提供了二进制整数的类型。
咱们只有以:0b 结尾即可。
1 int a = 0b0101:
JDK7 新个性:下划线分隔符
在理论开发和学习中,如果遇到特地长的数字,读懂它令人头疼!JDK7 为咱们提供了下划线分隔符,能够依照本人的习惯进行宰割。
1 int b = 1_2234_5678;
咱们很容易就晓得这是 1 亿 2234 万 5678 啦!十分合乎国人的习惯!
变量,常量
1、变量(variable)
变量是什么:就是能够变动的量!
咱们通过变量来操纵存储空间中的数据,变量就是指代这个存储空间!空间地位是确定的,然而外面搁置什么值不确定!打个比方:
这就如同咱们家里有一个大衣柜,外面有非常多的小格子,咱们给格子上贴上标签,放衣服,放鞋子,放手表等等,此时咱们晓得了哪里该放什么,然而,咱们并不知道外面到底放的是什么牌子的鞋子,是衣服还是裤子。那个标签就相当于咱们的变量,咱们给他起了个名字,然而外面要放什么须要咱们本人去放。
Java 是一种强类型语言,每个变量都必须申明其类型。
Java 变量是程序中最根本的存储单元,其因素包含变量名,变量类型和作用域。
变量在应用前必须对其申明, 只有在变量申明当前,能力为其调配相应长度的存储单元,申明格局为:
1 type varName [=value] [{,varName[=value]}];
2 // 数据类型 变量名 = 值;能够应用逗号隔开来申明多个同类型变量。
注意事项:
每个变量都有类型,类型能够是根本类型,也能够是援用类型。
变量名必须是非法的标识符。
变量申明是一条残缺的语句,因而每一个申明都必须以分号完结
【演示】
【编码标准】
尽管能够在一行申明多个变量,然而不提倡这个格调,逐个申明每一个变量能够进步程序可读性。
2、变量作用域
变量依据作用域可划分为三种:
类变量(动态变量:static variable):独立于办法之外的变量,用 static 润饰。
实例变量(成员变量:member variable):独立于办法之外的变量,不过没有 static 润饰。
局部变量(lacal variable):类的办法中的变量。
局部变量
办法或语句块外部定义的变量。生命周期是从申明地位开始到”}”为止。
在应用前必须先申明和初始化 (赋初值)。
局部变量没有默认值,所以局部变量被申明后,必须通过初始化,才能够应用。
批改为:
实例变量
办法内部、类的外部定义的变量。
从属于对象,生命周期随同对象始终。
如果不自行初始化,他会主动初始化成该类型的默认初始值(数值型变量初始化成 0 或 0.0,字符型变量的初始化值是 16 位的 0,布尔型默认是 false)
动态变量
应用 static 定义。
从属于类,生命周期随同类始终,从类加载到卸载。(注:讲完内存剖析后咱们再深刻!先放一放这个概念!)
如果不自行初始化,他会主动初始化成该类型的默认初始值(数值型变量初始化成 0 或 0.0,字符型变量的初始化值是 16 位的 0,布尔型默认是 false)
3、常量
常量 (Constant):初始化(initialize) 后不能再扭转值!不会变动的值。
所谓常量能够了解成一种非凡的变量,它的值被设定后,在程序运行过程中不容许被扭转。
1 final 常量名 = 值;
2 final double PI=3.14; final String LOVE=”hello”;
常量名个别应用大写字符。
程序中应用常量能够进步代码的可维护性。例如,在我的项目开发时,咱们须要指定用户的性别,此时能够定义一个常量 SEX,赋值为 “ 男 ”,在须要指定用户性别的中央间接调用此常量即可,防止了因为用户的不标准赋值导致程序出错的状况。
4、变量的命名标准
1. 所有变量、办法、类名:见名知意
2. 类成员变量:首字母小写和驼峰准则 : monthSalary
3. 局部变量:首字母小写和驼峰准则
4. 常量:大写字母和下划线:MAX_VALUE
5. 类名:首字母大写和驼峰准则: Man, GoodMan
6. 办法名:首字母小写和驼峰准则: run(), runRun()
运算符
运算符 operator
Java 语言反对如下运算符:
算术运算符: +,-,*,/,%,++,–
赋值运算符 =
关系运算符: >,<,>=,<=,==,!= instanceof
逻辑运算符: &&,||,!
位运算符: &,|,^,~,>>,<<,>>> (理解!!!)
条件运算符?:
扩大赋值运算符:+=,-=,*=,/=
1、二元运算符
两个操作数,来看看咱们小时候的数学运算;
整数运算
如果两个操作数有一个为 Long, 则后果也为 long
没有 long 时,后果为 int。即便操作数全为 shot,byte,后果也是 int.
浮点运算
如果两个操作数有一个为 double, 则后果为 double.
只有两个操作数都是float, 则后果才为float.
关系运算符
返回布尔值!
2、取模运算
就是咱们小学的取余;5%3 余 2
其操作数能够为浮点数, 个别应用整数。如:5.9%3.9=2.000000004
要点:
正数 % 正数=正数;
正数 % 负数=正数;
负数 % 正数=负数;
【注:个别都是正整数运算,进行后果的判断!】
3、一元运算符
自增(++)自减(–)运算符是一种非凡的算术运算符,在算术运算符中须要两个操作数来进行运算,而自增自减运算符是一个操作数,分为前缀和后缀两种。
留神:java 中的乘幂解决
Math 类提供了很多迷信和工程计算须要的办法和常数。非凡的运算都须要使用到办法!
4、逻辑运算符
逻辑与:&& 和 &,逻辑或:|| 和 |,逻辑非:!。
【演示】
逻辑与和逻辑或采纳短路的形式。从左到右计算,如果确定值则不会再计算上来。在两个操作数都为 true 时,后果才为 true,然而当失去第一个操作为 false 时,其后果就必然是 false,这时候就不会再判断第二个操作了。
逻辑与只有有一个为 false, 则间接返回 false.
逻辑或只有有一个为 true, 则间接返回 true;
【演示】
解析:
(&&) a<4 false b false
a++<10 a 5
5、位运算符
Java 定义了位运算符,利用于整数类型 (int),长整型(long),短整型(short),字符型(char),和字节型(byte) 等类型。位运算符作用在所有的位上,并且按位运算。
1 A = 0011 1100
2 B = 0000 1101
3 —————–
4 A&b = 0000 1100
5 A | B = 0011 1101
6 A ^ B = 0011 0001
7 ~A= 1100 0011
右移一位相当于除 2 取商。
左移一位相当于乘 2。
【常见面试题:int a=2* 8 怎么运算效率最快?】
解析:
用移位运算 int a=2<<3;
a 就是 2 乘以 8 最初后果是 16 这是最省内存 最有效率的办法
这个办法的确高效率的。我来解释一下:
2 的二进制是 10 在 32 位存储器外面是 0000 0000 0000 0010
左移三位后变成 0000 0000 0001 0000 也就是 16
解释一下,在零碎中运算是以二进制的模式进行的。相比来说两个二进制数相乘运算比移位运算慢一些。位操作是程序设计中对位模式按位或二进制数的一元和二元操作。在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在古代架构中,状况并非如此: 位运算的运算速度通常与加法运算雷同(依然快于乘法运算). 具体地须要理解计算机的组成原理!
6、扩大运算符
7、字符串连接符
“+”运算符两侧的操作数中只有有一个是字符串 (String) 类型,零碎会主动将另一个操作数转换为字符串而后再进行连贯。
8、三目条件运算符
三目条件运算符,语法格局:
1 x ? y : z
其中 x 为 boolean 类型表达式,先计算 x 的值,若为 true,则整个三目运算的后果为表达式 y 的值,否则整个运算后果为表达式 z 的值。
【演示】
三元运算符在实在开发中非常的常见,大家能够多练习应用,之后咱们会解说分支语句,能够利用三元运算符做到更加精简代码!便于了解!
9、运算符优先级
咱们都学过:先加减,后乘除,所以优先级咱们并不生疏。
当多个运算符呈现在一个表达式中,谁先谁后呢?这就波及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最初得出的后果差异甚大。
下表中具备最高优先级的运算符在的表的最下面,最低优先级的在表的底部。
大家不须要去刻意地记住,表达式外面优先应用小括号来组织!!不便了解和应用,不倡议写十分冗余的代码运算!
包机制
1、问题发现
存在这样一个问题:当定义了多个类的时候,可能会产生类名的反复问题。
解决形式:在 java 中采纳包机制解决开发者定义的类名抵触问题。
就好比咱们平时用电脑,一个文件夹下不能存在同名的文件,咱们要是有这样的需要,然而又不想换名字,咱们就能够思考应用新建一个文件夹来寄存!在咱们的 Java 中也是这样的。
还有一个问题:咱们平时在 IDE 中能够跑的文件,用命令行就会报错;
这是为什么呢?
罪魁祸首正是代码第一行:package com.kuang.demo01;
这就是 Java 中的包机制,应用 package com.kuang.demo01;
就要求此份.java 文件必须保留在这样一个目录下,这样 Java 解释器能力找到它。在 IDEA 中能正确运行,
你能够去 Windows 下的工程中查看,HelloWorld 这个文件必是在这样的目录构造下的。
2、包的作用
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包的作用:
1、把性能类似或相干的类或接口组织在同一个包中,不便类的查找和应用。
2、如同文件夹一样,包也采纳了树形目录的存储形式。同一个包中的类名字是不同的,不同的包中的类的名字是能够雷同的,当同时调用两个不同包中雷同类名的类时,应该加上包名加以区别。因而,包能够防止名字抵触。
3、包也限定了拜访权限,领有包拜访权限的类能力拜访某个包中的类。Java 应用包(package)这种机制是为了避免命名抵触,访问控制,提供搜寻和定位类(class)、接口、枚举(enumerations)和正文(annotation)等。
包语句的语法格局为:
1 package pkg1[.pkg2[.pkg3…]];
例如, 一个 Something.java 文件它的内容:
1 package net.java.util;
2 public class Something{
3 …
4 }
那么它的门路应该是 net/java/util/Something.java 这样保留的。package(包) 的作用是把不同的 java 程序分类保留,更不便的被其余 java 程序调用。
一个包(package)能够定义为一组互相分割的类型(类、接口、枚举和正文),为这些类型提供拜访爱护和命名空间治理的性能。
以下是一些 Java 中的包:
java.lang- 打包根底的类
java.io- 蕴含输入输出性能的函数
开发者能够本人把一组类和接口等打包,并定义本人的包。而且在理论开发中这样做是值得提倡的,当你本人实现类的实现之后,将相干的类分组,能够让其余的编程者更容易地确定哪些类、接口、枚举和正文等是相干的。因为包创立了新的命名空间(namespace),所以不会跟其余包中的任何名字产生命名抵触。应用包这种机制,更容易实现访问控制,并且让定位相干类更加简略。
3、创立包
创立包的时候,你须要为这个包取一个适合的名字。之后,如果其余的一个源文件蕴含了这个包提供的类、接口、枚举或者正文类型的时候,都必须将这个包的申明放在这个源文件的结尾。
包申明应该在源文件的第一行,每个源文件只能有一个包申明,这个文件中的每个类型都利用于它。如果一个源文件中没有应用包申明,那么其中的类,函数,枚举,正文等将被放在一个无名的包(unnamed package)中。个别利用公司域名倒置作为报名;
例子:
bbs.baidu.com 包名:com.baidu.bbs
blog.baidu.com 包名:com.baidu.blog
咱们平时也能够依照本人的公司域名去写,比方:com.kuangstudy.utils
4、import 关键字
为了可能应用某一个包的成员,咱们须要在 Java 程序中明确导入该包。应用 “import” 语句可实现此性能。
在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,能够没有,也能够有多条,其语法格局为:
1 import package1[.package2…].(classname|*);
如果在一个包中,一个类想要应用本包中的另一个类,那么该包名能够省略。要是要用到其余包下的类,就必须要先导包!
如果两个类重名,须要导入对应的包,否则就须要写出残缺地址:
1 com.kuang.dao.Hello hello = new com.kuang.dao.Hello()
用 import 关键字引入,应用通配符 “*” , 导入 io 包下的所有类!
1 import java.io.*;
【不倡议这样应用,因为会全局扫描,影响速度!】
应用 import 关键字引入指定类:
1 import com.kuang.Hello;
【留神】类文件中能够蕴含任意数量的 import 申明。import 申明必须在包申明之后,类申明之前。
JavaDoc
1、简介
JavaDoc 是一种将正文生成 HTML 文档的技术,生成的 HTML 文档相似于 Java 的 API,易读且清晰明了。在简略介绍 JavaDoc 写法之后,再看一下在 Intellij Idea 中如何将代码中的正文生成 HTML 文档。
javadoc 是 Sun 公司提供的一个技术,它从程序源代码中抽取类、办法、成员等正文造成一个和源代码配套的 API 帮忙文档。也就是说,只有在编写程序时以一套特定的标签作正文,在程序编写实现后,通过 Javadoc 就能够同时造成程序的开发文档了。
javadoc 命令是用来生成本人 API 文档的,应用形式:应用命令行在指标文件所在目录输出 javadoc + 文件名.java。
先看一段样例代码:
1 /** 这是一个 Javadoc 测试程序
2 * @author Kuangshen
3 * @version 1.0
4 * @since 1.5
5 * */
6 public class HelloWorld {
7
8 public String name;
9 /**
10 * @param name 姓名
11 * @return 返回 name 姓名
12 * @throws Exception 无异样抛出
13 * */
14 public String function(String name) throws Exception{
15 return name;
16 }
17 }
略微解释一下:
以 /* / 完结。
@author 作者名
@version 版本号
@since 指明须要最早应用的 jdk 版本
@param 参数名
@return 返回值状况
@throws 异样抛出状况
2、命令行生成 Doc
1 -encoding UTF-8 -charset UTF-8
2 // 解决 GBK 乱码问题,在两头增加编码设置
小结
不积跬步,无以至千里;不积小流,无以成江海!
今日理解的内容在当前的生存中会天天遇到,当初要打好根底,操之过急,向着指标后退!
今日份分享已完结,请大家多多包涵和指导!