Java - Tips
01 - Java中print、printf与println的区别?
- printf:格式化输出,用来控制输出的格式。
- print:标准输出,不换行。
- println:标准输出,换行。例如,println("test")相当于print("test\n")。
示例:
package test;
public class Test {
public static void main(String[] args) {
System.out.print("test");
System.out.print("test\n");
System.out.println("test");
int number1 = 123;
double number2 = 456;
System.out.printf("number1的值为%s,number2的值为%.4f", number1, number2);
}
}
/*
输出结果:
testtest
test
number1的值为123,number2的值为456.0000
*/
02 - Java编程规范
Java Code Style工具
Google Java 编程风格指南
阿里巴巴Java开发手册v1.2
03 - jar、war、ear包的作用与区别
- jar: 把开发时要引用通用(JAVA)类及资源做封装,打成包后便于存放管理;
- war:一个(web)完整的应用,通常是网站或WEB平台,打成包部署到容器中;
- ear: 企业级应用,实际上EAR包中包含WAR包和几个企业级项目的配置文件而已,服务器中间件通常选择WebSphere等都会使用EAR包。通常是EJB打成ear包。
04 - JAVA转义字符
1.八进制字符(\ddd)
ddd表示1到3位八进制数字,范围‘\000~\377’
2.十六进制Unicode字符(\uxxxx)
xxxx表示4个十六进制数字,对应的unicode字符范围‘0~65535’
3.特殊字符
\" 双引号
\' 单引号
\\ 反斜杠
4.控制字符
\r 回车
\n 换行
\f 换页
\t 制表
\b 退格
\s 空格
5. 标点符号字符
可以转义为对应的十六进制Unicode字符,例如:
美元符号的转义:$ ==> u0024
左圆括号的转义:( ==> u0028
右圆括号的转义:) ==> u0029
星号的转义:* ==> u002A
加号的转义:+ ==> u002B
逗号的转义:, ==> u002C
减号的转义:- ==> u002D
点的转义:. ==> u002E
除号的转义:/ ==> u002F
问号的转义:? ==> u003F
左方括号的转义:[ ==> u005B
右方括号的转义:[ ==> u005D
乘方符号的转义:^ ==> u005E
左大括号的转义:{ ==> u007B
竖线的转义:| ==> u007C
右大括号的转义:} ==> u007D
......
示例:
package test;
public class Test {
public static void main(String[] args) {
char mychar = '\\';
char mychar2 = '\076';
String mystr = "\u003F";
System.out.println("示例:" + mychar + " 示例:" + mychar2 + " 示例:" + mystr);
}
}
05 - Java逻辑运算符&&与&的区别
- “&&”具有短路功能,如果计算表达条件式为false,则不再计算后续的表达式条件,直接判断结果为false。
- “&”不具有短路的功能,会计算所有表达式条件,然后给出判断结果。
建议使用“&&”。
例如:“(5>8)&&(9>3)”和“(5>8)&(9>3)”的结果虽然都是false,但“(5>8)&&(9>3)”中只计算了表达式条件(5>8)。
06 - Java设计模式
人人都能读懂的设计模式
面试被问设计模式?不要怕看这里
07 - Java命名规范
大小写
包的名称:字母均为小写
类的名称:首字母大写;如有多个单词,每个单词首字母大写
方法、变量、对象的名称:首字母小写;如后续有多个单词,每个单词首字母大写
常量的名称:字母均为大写
接口的名称:首字母"I"开头;如有多个单词,每个单词首字母大写
接口实现类的名称:去除接口名称首字母"I",以"Impl作为结尾";如有多个单词,每个单词首字母大写
包名称的前缀
为保障每个Java Package命名的唯一性,一般使用具有唯一性的域名作为包名称的前缀。
- 公司项目(com):由公司发起和完成,opyright属于该公司。“com.公司名.项目名.模块名.……”
- 团队项目(team):由团队发起和完成,copyright属于该团队。命名形式:“team.团队名.项目名.模块名.……”。
- 个体项目(individual, indi):个人发起,但非独自完成,可公开或私有,copyright主要属于发起者。命名形式为:“indi.发起者名.项目名.模块名.……”。
- 个人项目(personal, pers):个人发起,并独自完成,可分享,copyright主要属于个人。命名形式为:“pers.个人名.项目名.模块名.……”。
- 私有项目(private, priv):个人发起,独自完成,私有非公开,copyright属于个人。命名形式为:“priv.个人名.项目名.模块名.……”。
08 - 重写与重载之间的区别
区别点 | 重载方法 | 重写方法 |
---|---|---|
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
09 - Collection和Collections的区别
Collection是接口,Collection层次结构中的根接口,常用的子接口有List和Set等。
Collections是类,位于java.util包,是object的子类,此类完全由在collection上进行操作或返回 collection的静态方法组成。
10 - Java高并发
11 - Java中“==”与equals()的区别
“==”
- 对于基本数据类型的变量,直接比较“值”是否相等;
- 对于引用类型的变量,比较对象的地址;
equals()方法
- 不能作用于基本数据类型的变量;
- 引用类型的变量, 默认比较对象的地址;
- 如果String、Date等类对equals()方法进行重写,可实现比较对象的内容;
12 - Java中equals()方法与hashCode()方法的区别
equals()方法用来比较对象是否相等;hashCode()方法用来计算并返回出对象实例的哈希码(散列函数);
- 两个对象,如果equals()相等,hashCode()一定相等。
- 两个对象,如果hashCode()相等,equals()不一定相等。
简而言之,equals()方法是在hashCode()方法一致的基础上的再判断。
13 - Java的instanceof运算符
双目运算符,运算符前面是一个对象实例,运算符后面是一个类(接口)。
instanceof运算符用于判断前面的对象是否是后面的类(子类、实现类、接口)的实例。若是,返回true;否则,返回false。
使用instanceof运算符,必须满足以下其中一个条件,否则会引起编译错误:
- 前面的操作元编译时的类型,与后面的类型相同
- 前后的操作元类型,有父子继承关系
package anliven;
public class Temp {
public static void main(String[] args) {
Object obj = "Hello,Java!"; // 使用Object类声明对象obj,则obj编译时的类型是Object,但obj的实际类型是String
System.out.println("是否是Object类的实例:" + (obj instanceof Object)); // Object类是所有类的超类
System.out.println("是否是String类的实例:" + (obj instanceof String)); // String类是Object类的子类
System.out.println("是否是Comparable接口的实例:" + (obj instanceof Comparable)); // String类实现了Comparable接口
System.out.println("是否是Math类的实例:" + (obj instanceof Math)); // //Math类是Object的子类
// String str = "Hello,Java!";
// System.out.println("是否是Math类的实例" + (str instanceof Math)); // 编译报错
}
}
14 - 强制类型转换
- 基本数据类型之间
只能在数值类型之间进行,数值类型和布尔类型之间不能进行转换。 - 引用类型之间
只能在具有继承关系的两个类型之间进行。两个没有继承关系的类型进行强制转换会发生编译错误。
如果试图把一个父类实例转换成子类类型,则这个对象必须实际上是子类实例(即编译时类型为父类类型,运行时类型为子类类型),否则将会在运行时引发ClassCastException异常。
可以通过使用instanceof运算符判定两个类型是否具有继承关系,从而避免出现异常。
15 - 向上转型与向下转型
向上转型(upcasting)
- 子类引用的对象转换为父类类型,也就是将子类对象转为父类对象(此处父类对象可以是接口)
- 向上转型不用强制转型
向下转型(downcasting)
- 父类引用的对象转换为子类类型
- 向下转型必须强制转换类型
package anliven;
class Animal { // 父类
public String getName(String str) {
return "Name:" + str;
}
}
class Dog extends Animal { // 子类
public void doorKeeper() {
System.out.println("The dog overwatches his master's house.");
}
}
interface ITree { // 接口
public String getName();
}
class AppleTree implements ITree { // 实现接口
public String getName() {
return "Tree: AppleTree";
}
public void getFruit() {
System.out.println("Fruit: Apple");
}
}
public class Temp {
public static void main(String[] args) {
// 类
Animal testAnimal = new Dog(); // 向上转型,new出来的Dog类对象赋值给了Animal父类对象
System.out.println(testAnimal.getName("Dog"));
// testAnimal.doorKeeper(); // 提示错误,对象实例无此方法
Dog testDog = (Dog) testAnimal; // 向下转型, 类对象赋值给子类对象,向下转型是向上转型之后才能执行的操作
testDog.doorKeeper();
testDog.getName("Dog");
// 接口
ITree testITree = new AppleTree(); // 接口向上转型
System.out.println(testITree.getName());
// testITree.getFruit(); // 提示错误,对象实例无此方法
AppleTree testAppleTree = (AppleTree) testITree; // 接口向下转型
testAppleTree.getFruit();
System.out.println(testAppleTree.getName());
}
}
16 - 注释
单行注释:以两个正斜杠“//”开始,到行尾结束。
多行注释:以一个正斜杠紧跟着一个星号"/*"作为开始,并以一个星号紧跟一个正斜杠作为结束。
单行注释和多行注释可以彼此嵌套,但多行注释不能再嵌套多行注释。
文档注释:
用来生成代码的外部文档。
类似于多行注释,以一个正斜杠紧跟着两个星号"/**"作为开始,并以一个星号紧跟一个正斜杠作为结束。
应该针对公有类、接口、方法和实例变量,使用文档注释。
17 - 使用Eclipse生成文档(javadoc)
在源代码中为类、方法、变量等添加符合Javadoc语法的描述信息, 就可以使用Javadoc工具将描述信息自动生成一个HTML格式的帮助文档。
使用eclipse生成文档的3种方法
- 项目列表右键选择Export---》选择Java下的Javadoc---》Javadoc command选择jdk的javadoc.exe目录,自定义保存路径Destination---》点击Finish,生成文档。
- 菜单栏File---》点击Export---》后续步骤与方法一相同。
- 选中项目---》菜单栏Project---》点击Generate Javadoc---》后续步骤与方法一相同。
18 - Java关键字
abstract 表明类或者成员方法具有抽象属性
assert 用来进行程序调试
boolean 基本数据类型之一,布尔类型
break 提前跳出一个块
byte 基本数据类型之一,字节类型
case 用在switch语句之中,表示其中的一个分支
catch 用在异常处理中,用来捕捉异常
char 基本数据类型之一,字符类型
class 类
const 保留关键字,没有具体含义
continue 回到一个块的开始处
default 默认,例如,用在switch语句中,表明一个默认的分支
do 用在do-while循环结构中
double 基本数据类型之一,双精度浮点数类型
else 用在条件语句中,表明当条件不成立时的分支
enum 枚举
extends 表明一个类型是另一个类型的子类型,这里常见的类型有类和接口
final 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
finally 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
float 基本数据类型之一,单精度浮点数类型
for 一种循环结构的引导词
goto 保留关键字,没有具体含义
if 条件语句的引导词
implements 表明一个类实现了给定的接口
import 表明要访问指定的类或包
instanceof 用来测试一个对象是否是指定类型的实例对象
int 基本数据类型之一,整数类型
interface 接口
long 基本数据类型之一,长整数类型
native 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
new 用来创建新实例对象
package 包
private 一种访问控制方式:私用模式
protected 一种访问控制方式:保护模式
public 一种访问控制方式:共用模式
return 从成员方法中返回数据
short 基本数据类型之一,短整数类型
static 表明具有静态属性
strictfp 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
super 表明当前对象的父类型的引用或者父类型的构造方法
switch 分支语句结构的引导词
synchronized 表明一段代码需要同步执行
this 指向当前实例对象的引用
throw 抛出一个异常
throws 声明在当前定义的成员方法中所有需要抛出的异常
transient 声明不用序列化的成员域
try 尝试一个可能抛出异常的程序块
void 声明当前成员方法没有返回值
volatile 表明两个或者多个变量必须同步地发生变化
while 用在循环结构中
19 - Java在线教程
- Java 教程
- Java技术
- Simple Java:https://www.programcreek.com/simple-java/
- Java Examples:https://www.programcreek.com/java-api-examples/
20 - 一些Java网站
- Java World:http://www.javaworld.com/
- Program Creek:http://www.programcreek.com/
21 - JDK自带工具概览
Java - Tips的更多相关文章
- Java Tips and Best practices to avoid NullPointerException
A NullPointerException in Java application is best way to solve it and that is also key to write rob ...
- [Java学习笔记]Java Tips
1.Java没有sizeof关键字 , volatile是java关键字.详情见:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166. ...
- PTA Java tips(转载)
在PTA提交Java程序需要注意如下几个要点 1. Main类与Scanner 1.1 Main类 你提交的所有程序都应该以如下形式出现 public class Main{ public stati ...
- 【Java Tips】boolean的类型与string类型的转换
boolean类型转化为string boolean b = true; String s = String.valueOf(b); System.out.println(s);
- Java Tips: 使用Pattern.split替代String.split
String.split方法很常用,用于切割字符串,split传入的参数是正则表达式,它的内部是每次都comiple正则表达式,再调用Pattern.split方法: public String[] ...
- Java性能提示(全)
http://www.onjava.com/pub/a/onjava/2001/05/30/optimization.htmlComparing the performance of LinkedLi ...
- Java实现在访问者模式中使用反射
集合类型在面向对象编程中很常用,这也带来一些代码相关的问题.比如,“怎么操作集合中不同类型的对象?” 一种做法就是遍历集合中的每个元素,然后根据它的类型而做具体的操作.这会很复杂,尤其当你不知道集合中 ...
- 译:2. RabbitMQ Java Client 之 Work Queues (工作队列)
在上篇揭开RabbitMQ的神秘面纱一文中,我们编写了程序来发送和接收来自命名队列的消息. 本篇我们将创建一个工作队列,工作队列背后的假设是每个任务都交付给一个工作者 本篇是译文,英文原文请移步:ht ...
- (Java编程思想)Thinking in Java
1. 为什么突然想去研读<Thinking in Java>? 最近终于下定决心撸了一本<Thinking in Java>第四版,虽然在此之前我就久闻这本书的大名,但一直未曾 ...
随机推荐
- bootstrap-glyph-customization
http://www.runoob.com/try/demo_source/bootstrap-glyph-customization.htm http://fontawesome.io/icons/
- ext中对json数据的处理解析
看贴:http://blog.csdn.net/xieshengjun2009/article/details/5959687
- c# 产生随机数 程序所在路径
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- ASP.NET 日志组件Smart.LogNet.DLL 引用即可写入日志及读取日志
借助LogNet组件,以后查看站点日志,再也不用去服务器下载了 日志组件:LogNet.DLL ,引用即可使用 写入方法: 1.LogNet.Log.WriteLog("日志标题" ...
- AngularJS的select设置默认值
AngularJS的select设置默认值 在使用Angular时候使用select标签时会遇到绑定数据指定默认显示值可这样实现 <!DOCTYPE html> <html ng-a ...
- Nodejs的测试和测试驱动开发
测试是保证软件质量必不可少的一环.测试有很多形式:手动.自动.单元测试等等.这里我们只聊使用Mocha这个框架在Nodejs中实现单元测试.单元测试是测试等重要组成,这样的测试只对于一个方法,这样的一 ...
- noip第4课作业
1. 计算邮资 [问题描述] 根据邮件的重量和用户是否选择加急计算邮费.计算规则:重量在1000克以内 (包含1000克),基本费8元.超过1000克的部分,每500克加收超重费4元,不足500 ...
- Scala深入浅出实战经典:29,Case class和Case object代码实战解析
今天学习了王家林老师scala讲座的第29讲,case class和case object的应用实战.做下记录. 信息来源于 DT大数据梦工厂微信公众账号:DT_Spark 关注微信账号,获取更多关于 ...
- D3_book 11.2 stack
<!-- book :interactive data visualization for the web 11.2 stack 一个堆叠图的例子 --> <!DOCTYPE htm ...
- poj2478 Farey Sequence 欧拉函数的应用
仔细看看题目,按照题目要求 其实就是 求 小于等于n的 每一个数的 欧拉函数值 的总和,为什么呢,因为要构成 a/b 然后不能约分 所以 gcd(a,b)==1,所以 分母 b的 欧拉函数值 ...