关于java:太强了大厂大牛都学过的Java基础精髓整合小白也能变黑马

46次阅读

共计 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 乱码问题,在两头增加编码设置

小结
不积跬步,无以至千里;不积小流,无以成江海!
今日理解的内容在当前的生存中会天天遇到,当初要打好根底,操之过急,向着指标后退!

今日份分享已完结,请大家多多包涵和指导!

正文完
 0