【Java】基础知识整理
写在前面
吹了这么久Python,怎么说也得照看照看老本行——Java吧,那就来吧。
比较起继续研究一些艰深的知识,我更愿意暂时的回顾一些自己在成长路上遗漏的或者遗忘的小知识,所以有了这个系列的博文。
OK,我将开始新的旅程了,这个过程可能不会特别连续,但我会尽力坚持的!
切入正题
1.Java设计团队设计Java考虑的关键术语
- Simple(简单):Java有一系列简洁、统一的功能,使其易于学习和使用。
- Secure(安全):Java提供了创建Internet程序的安全方法。
- Portable(可移植):Java程序可以在任何具有Java运行时系统的环境(JRE)中执行。
- Object-Orient(面向对象):Java代表了现代的面向对象编程理念。
- Robust(健壮):Java通过进行严格的输入和执行运行时错误检查,提倡无错程序设计。
- Multithreaded(多线程):Java提供对多线程程序设计的集成支持。
- Architecture-Neutral(体系结构中立):Java并不局限于特定的计算机或者操作系统体系结构。
- Interpreted(解释型):通过支持Java字节码,Java支持跨平台代码。
- High Performance(高性能):Java字节码的执行速度被高度优化。
- Distributed(分布式):Java被特意设计用在Internet的分布式环境中使用。
- Dynamic(动态):Java程序带有大量在运行时用于检查和解决对象访问的运行时类型信息。
2.基本的代码格式:
格式A:
public class Demo {//空四格(不要混用Tab和Space,除非你改了IDE设置)
}
格式B:
public class Demo
{//空四格(不要混用Tab和Space,除非你改了IDE设置)
}
这两种是我见过比较常见的了,其实我开始学习Java的时候是用的格式B,这种格式对齐明显,但是后来我还是逐渐倾向于格式A,因为节省了不必要的行数且写起来更加流畅。
这个自己习惯哪个,合理使用就行。
格式习惯还是应该有的,毕竟要代码的格式优雅,可读性也会好很多啊!
3.短路与不短路了解一下就行,那种东西,我相信有用!虽然我懂,但是我是没太区分用过。
4.变量的作用域和生命周期看似很简单但是后来竟然有点混淆,所以这里再扯一扯:
作用域内声明的变量对于作用域之外的代码是不可见(不可访问)的。
因此,在声明一个变量的时候,就将这个变量局部化了,并且防止它受到未授权的访问或修改。
实际上,正是这种作用域规则提供了封装的基础。
代码块中声明的变量被称为局部变量。
作用域可嵌套,至于谁能访问谁,依据上文自己理解一下就行。
值得一说的是,在代码段末尾声明一个变量是没有意义的,因为没有变量可以访问它。
还需要记住:变量在进入作用域时创建,离开作用域时被销毁。
这就意味着变量一旦离开作用域就不会存储原来的值。
因此,方法调用期间,方法中声明的变量值是无法保存其值的,而且在代码块中声明的变量在离开此代码块中也会失去它的值。
因此,变量的生命周期被限制在作用域内。
5.基本类型的变量支持自动类型转换的条件:
- 两种类型兼容。
- 目标类型比源类型大。
6.Java表达式可以使用适当的空格来提升可读性!
7.Java中,以整数为例:
123456789可以这么写:123_456_789,这样就提升了可读性,读者不需要一个一个敲着屏幕去数。
8.Scanner输入方法以外的Java获取键盘输入的策略:
import java.io.IOException;public class Test {public static void main(String[] args) {System.out.println("请输入一个数字");try {int num = (int) System.in.read();} catch (IOException e) {e.printStackTrace();}}
}
反正我是没用过,感觉还是Scanner用着舒服。
9.什么时候能用if…else if…else却不能用switch?(个人总结)
- 变量类型不同。
- 变量/对象类型不被switch支持。
- 变量的值是连续的而不是离散的。
10.Java中的switch语句支持什么类型?
byte、short、int、long、char、enum、String(JDK7+),是吧?
错!
long不行!!!
11.foreach循环跟iterator有啥区别?
foreach其实就是iterator,编译的时候就基本一样。
所以性能效率差不多的。
自己写的数据结构想用foreach,就必须实现Iterator接口!!!人家Java内置的数据结构咱们能用,还不是因为人家都处理好各种麻烦的东西了嘛……
注意,官方好像叫enhanced for(增强型for循环),别只知道foreach,那是自己人称呼着玩的。
12.for循环可以缺失部分要素,但是;;至少不能缺。
for (;;) {}
上面的代码也行……只不过和
while(true) {}
一样,死循环…………
13.这个do-while循环,我是真用不惯,可是怎么有的大佬就用的那么溜呢?自闭……感兴趣的自己研究研究,反正道理很容易懂,就是那种思维模式切不切的过来就不知道了。
14.Java没有goto,但是把这个词当了一个保留字(无意义但不能私自使用)……
没有goto是好的,可以防止那种“意大利面条”式的语法。
其实呢选择语句和循环语句这些程控语句真的是goto,只不过可读性好。
嗯,汇编里是有goto那种东西的……
当然,goto是非结构化的;而break这种语句提供了更好的方式,因为它保留了一些结构化的特征。
return、break、continue这几个语句合理使用其实挺有意思的。
15.差点忘了Java10+的var语法,堪称神奇。
//a是浮点,默认double
var a = 1.0;
//b是整型,默认int
var b = 100;
//c是字符串,默认String
var c = "Hello";
//......
巨神奇的东西,可以作为局部变量,可以用作for循环的类型……
有着JavaScript的形式,还有着Python的灵魂,更是高举我Java大旗,牛!
我也迷恋过这个var语法,用起来太爽了!
但是这个语法是有限制的:
- 每次只能声明一个变量。
- 初始化时不能使用null。
- 初始化器表达式不能使用正在声明的变量。
- 虽然可以使用var声明数组类型,但不能将var与数组初始化器一起使用。
- var不是官方的关键字但也差不多,我的支持JDK11的Eclipse里面var会变色。所以var不能做类名、其他引用类型的名称(包括接口、注解、枚举等都算),用作变量名也要悠着点。
- 局部变量类型推断不能用于catch捕获的异常类型。
- 在lambda表达式和方法引用不能用作初始化器。
- …
但是还是省事啊,用一次就真香的东西……
另外——对于第四点,做一下解释:
var arr = new int[10];
var arr = {1, 2, 3};
第一段代码是对的,第二段代码是错的。
然后谈谈var这个东西我的看法:
还是不要随便用的好。
主要理由:
- var只受到JDK10+支持,现在JDK8还是用的太多,一旦迁移,基本“暴毙”。
- var的语法其实可读性没那么好,特别是等过一段时间,你再看可能会很困惑,因为满屏橙色的var,很难懂。
- 限制那么多,用一会儿var,用一会儿类型,不太好受吧?
- ……
16.三目运算符和位运算符其实向我这种lj用的就不是很好,但是看看Java的源代码吧,用的很强,所以有能力的大佬还是学一学吧,不用肯定不熟练。(三目我偶尔还是用的,只是这位运算符……苦涩啊……)
17.varargs很有意思,这个可变长的形参列表很灵活。
这个语法和数组参数也有一些相似之处和不同之处,此处不加赘述,感兴趣可以查资料。
我想说的是,这个可变长的varargs在碰到重载时挺被动,毕竟会优先执行定长参数的方法。
public yyy(int ... v) {}public yyy(int v0) {}
调用下面语句:
yyy(1);
会执行方法二,而方法一就不会被执行。
18.面向对象是Java SE学习(特别是入门)真正的核心,相关的代码可以看这里:
面向对象
19.有关Java数组的注意事项
Java数组
20.Java异常处理的一些内容
Java异常注意事项
Java异常例子
Exception体系
21.别瞧不起选择结构,学艺不精的初学者也可能掉进坑里:
Java选择结构的坑
22.命令行参数
命令行参数
23.用用break吧
不用break的危害
24.this关键词
this
25.static的使用不当是很多初学者的问题。
静态变量不能访问非静态变量,这个问题的探讨很有意思,简单的讲:
- 必须先初始化类,再初始化对象。然而做个比较极端的例子:对象没初始化而类初始化的时候怎能随意允许类的成员访问对象的成员?
- static称为“静态”纯粹因为翻译的缘故,其实Java里static表示这个成员只属于类而不专属于某个对象。
这里暂时不深入探讨,需要强调的是:Java面向对象,在设计的时候要考虑清楚你的设计在面向对象里的合理性,切莫滥用。
【Java】基础知识整理相关推荐
- 【转】Java基础知识整理
本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版下载链接:<Ja ...
- 2022全新Java基础知识整理,阿里大牛纯手绘思维导图文档
最近趁着年初空闲的时间,总结一下自己这么多年来使用Java的一些心得体会,主要是一些Java基础知识点相关的, 分享给刚刚入门的Java程序员和需要巩固Java基础的朋友们,希望可以给大家一些经验,能 ...
- java基础知识整理
Day01 常见DOS命令和环境变量的配置 每天要做的事--笔记.作业.代码 知识点的学习--A:是什么? B:有什么特点? C:如何使用? D:什么时候使用? E:能讲给别人听么? 一.学习的前提 ...
- java基础知识 整理
1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注 ...
- java程序中单方法接口通常是,Java基础知识整理
面向对象和面向过程的区别 面向过程 优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Linux/Unix等一般采用面向过程开发,性能是最重要的因素. ...
- Java 基础知识整理 (待整理)
JVM之类加载器(ClassLoader)基本介绍 类加载器用于将class文件加载到JVM中去执行.下面介绍类加载器涉及到的基本概念和加载基本过程. 一.Java虚拟机与程序的生命周期 在运行Jav ...
- java关键字整理_【java基础知识整理】java基础语法之关键字
一.continue与break continue与break基本都使用与循环中,但是continue指结束所有循环的当前循环,而break是指结束整个循环.下面用代码进行简单实例. 使用contin ...
- java基础知识整理(精简)
1.永远的"Hello World!" public class Hello { public static void main (String args[]){ System.o ...
- Java基础知识整理系列第三弹
一.对象和类 (1)类的概念 属性-对象具有的各种特征 方法-对象执行的操作 具有相同或者相似性质的对象的抽象就是类,类就是一个模型,确定对象拥有的属性和方法. (2)对象的概念 对象是类的一个具体实 ...
- java基础知识整理——多态(二)
1.必要条件: 满足继承关系 父类引用指向子类对象. 2.多态的实现: 多态可由向上转型和动态绑定机制实现. 向上转型:子类对象向上转型为父类类型. 动态绑定:在程序运行期间,JVM根据对象的类型自动 ...
最新文章
- mysql mtq_mysql基本操作 - osc_r3mtqivi的个人空间 - OSCHINA - 中文开源技术交流社区
- python未将对象引用设置到对象的实例_未将对象引用设置到对象的实例(SystemNullReferenceException)...
- 【计算机本科补全计划】Mysql 学习小计(2)
- mysql5.6的安装步骤_MySQL5.6安装步骤
- springCloud Zuul 网关fallback
- SQL 2005 数据库镜像
- Hive的连接(join)方案
- [Luogu 3835]【模板】可持久化平衡树
- JUnit5 断言示例
- 计算机绘图课程选用课本,机械制图课程学习指南.doc
- html代码替换正则:把lt;ssgt;lt;img src=quot;aquot; data=quot;bquot;gt;lt;/ssgt;换成lt;img src=b /gt;
- 8个免费高清无版权图片网站--设计必备
- 使用github构建自己网站
- uni-app初学步骤教程:
- 该文件包与具有同一名称的现有文件包存在冲突
- 3D/VR/AR简易技术原理介绍
- expect RPAREN, actual LPAREN pos 31, line 1, column 14, token LPAREN
- Samba服务---SMB协议
- pytorch下载慢的问题解决方法
- Template 基础篇-函数模板
热门文章
- Codeforces Round #148 (Div. 2)
- JavaMail中附件名称有乱码
- 笔记:Hadoop权威指南 第1章 初识Hadoop
- ModChip and more
- jQuery教程06-基本筛选选择器
- macos下载的安装包在哪里_macbook任意降级,为您带来mac os完美降级教程
- SpringMVC-HandlerInterceptor拦截器的使用与参数详解
- 红帽linux6的版本号,RedHat CentOS发行版本号及内核版本号对照表
- 中对曲线进行斜率提取_Au中的EQ处理方法——图形均衡器和参数均衡器
- esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机