热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

太强了,大厂大牛都学过的Java基础精髓整合,小白也能变大神

太强了,大厂大牛都学过的Java基础精髓整合,小白也能变大神-今日分享开始啦,请大家多多指教~之前给大家已经讲述了注释,标识符,数据类型,类型转换,这几种基础知识点,今日给大家继

今日分享开始啦,请大家多多指教~

之前给大家已经讲述了注释,标识符,数据类型,类型转换,这几种基础知识点,今日给大家继续讲解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乱码问题,在中间添加编码设置

小结 不积跬步,无以至千里;不积小流,无以成江海! 今日了解的内容在以后的生活中会天天遇到,现在要打好基础,稳扎稳打,向着目标前进!

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


推荐阅读
  • 本文探讨了如何选择一个合适的序列化版本ID(serialVersionUID),包括使用生成器还是简单的整数,以及在不同情况下应如何处理序列化版本ID。 ... [详细]
  • Lua字符串1.字符串常见形式字符串或串(String)是由数字、字母、下划线组成的一串字符。Lua语言中字符串可以使用以下三种方式来表示:•单引号间的一串字符。 ... [详细]
  • 本文探讨了Java中有效停止线程的多种方法,包括使用标志位、中断机制及处理阻塞I/O操作等,旨在帮助开发者避免使用已废弃的危险方法,确保线程安全和程序稳定性。 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • 本文介绍了如何通过创建自定义 XML 文件来修改 Android 中 Spinner 的项样式,包括颜色和大小的调整。 ... [详细]
  • JavaSE 基础语法详解
    本文详细介绍了JavaSE的基础语法,涵盖数据类型、变量与常量、流程控制语句及数组等内容,旨在为初学者提供全面的学习指南。 ... [详细]
  • 深入理解Java字节码:方法调用详解
    本文详细介绍了Java字节码中的方法调用机制,通过具体示例解析了字节码如何处理方法调用及其参数传递。文章由Mahmoud Anouti撰写,原文链接:https://dzone.com/articles/introduction-to-java-bytecode ... [详细]
  • 来自FallDream的博客,未经允许,请勿转载,谢谢。一天一套noi简直了.昨天勉强做完了noi2011今天教练又丢出来一套noi ... [详细]
  • 本文介绍了如何使用Java编程语言实现凯撒密码的加密与解密功能。凯撒密码是一种替换式密码,通过将字母表中的每个字母向前或向后移动固定数量的位置来实现加密。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本文介绍了如何通过安装和配置php_uploadprogress扩展来实现文件上传时的进度条显示功能。通过一个简单的示例,详细解释了从安装扩展到编写具体代码的全过程。 ... [详细]
  • STM32代码编写STM32端不需要写关于连接MQTT服务器的代码,连接的工作交给ESP8266来做,STM32只需要通过串口接收和发送数据,间接的与服务器交互。串口三配置串口一已 ... [详细]
  • 本文详细探讨了在Windows 98环境下安装Apache 1.3.9、JServ、GNUJSP 1.0、JDK 1.2.2及JSDK 2.0后遇到的中文显示问题,并提供了多种有效的解决方案。 ... [详细]
  • 本文探讨了如何利用 Android 的 Movie 类来展示 GIF 动画,并详细介绍了调整 GIF 尺寸以适应不同布局的方法。同时,提供了相关的代码示例和注意事项。 ... [详细]
  • 本文详细介绍了C语言中的变量和数据类型,包括数据如何在内存中存储、各种数据类型的长度及整数的表示方法,同时探讨了字符和Unicode编码的基本概念。 ... [详细]
author-avatar
angel青彤雪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有