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种方法

  1. 项目列表右键选择Export---》选择Java下的Javadoc---》Javadoc command选择jdk的javadoc.exe目录,自定义保存路径Destination---》点击Finish,生成文档。
  2. 菜单栏File---》点击Export---》后续步骤与方法一相同。
  3. 选中项目---》菜单栏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在线教程

20 - 一些Java网站

21 - JDK自带工具概览

Java - Tips的更多相关文章

  1. 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 ...

  2. [Java学习笔记]Java Tips

    1.Java没有sizeof关键字 , volatile是java关键字.详情见:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166. ...

  3. PTA Java tips(转载)

    在PTA提交Java程序需要注意如下几个要点 1. Main类与Scanner 1.1 Main类 你提交的所有程序都应该以如下形式出现 public class Main{ public stati ...

  4. 【Java Tips】boolean的类型与string类型的转换

    boolean类型转化为string boolean b = true; String s = String.valueOf(b); System.out.println(s);

  5. Java Tips: 使用Pattern.split替代String.split

    String.split方法很常用,用于切割字符串,split传入的参数是正则表达式,它的内部是每次都comiple正则表达式,再调用Pattern.split方法: public String[] ...

  6. Java性能提示(全)

    http://www.onjava.com/pub/a/onjava/2001/05/30/optimization.htmlComparing the performance of LinkedLi ...

  7. Java实现在访问者模式中使用反射

    集合类型在面向对象编程中很常用,这也带来一些代码相关的问题.比如,“怎么操作集合中不同类型的对象?” 一种做法就是遍历集合中的每个元素,然后根据它的类型而做具体的操作.这会很复杂,尤其当你不知道集合中 ...

  8. 译:2. RabbitMQ Java Client 之 Work Queues (工作队列)

    在上篇揭开RabbitMQ的神秘面纱一文中,我们编写了程序来发送和接收来自命名队列的消息. 本篇我们将创建一个工作队列,工作队列背后的假设是每个任务都交付给一个工作者 本篇是译文,英文原文请移步:ht ...

  9. (Java编程思想)Thinking in Java

    1. 为什么突然想去研读<Thinking in Java>? 最近终于下定决心撸了一本<Thinking in Java>第四版,虽然在此之前我就久闻这本书的大名,但一直未曾 ...

随机推荐

  1. HMM(隐马尔可夫模型)不断学习中

    HMM(隐马尔可夫模型)是用来描述隐含未知参数的统计模型,举一个经典的例子:一个东京的朋友每天根据天气{下雨,天晴}决定当天的活动{公园散步,购物,清理房间}中的一种,我每天只能在twitter上看到 ...

  2. 2018.11.03 NOIP模拟 树(长链剖分优化dp)

    传送门 考虑直接推式子不用优化怎么做. 显然每一个二进制位分开计算贡献就行. 即记录fi,jf_{i,j}fi,j​表示距离iii这个点不超过jjj的点的每个二进制位的0/10/10/1个数. 但直接 ...

  3. 用 ASP.NET MVC 实现基于 XMLHttpRequest long polling(长轮询) 的 Comet(转)

    轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接. 优点:后端程序编写比较容易. 缺点:请求中有大半是无用,浪费带宽和服务器资源. 实例:适于小型应用. 长轮询:客 ...

  4. mongoDB的安装与连接

    1.安装mongoDB 官网下载安装: https://www.mongodb.com/download-center/community 安装时选择自定义设置,安装到C盘program Files文 ...

  5. WM_PAINT和WM_ERASEBKGND消息

    1.OnPaint()函数是窗口重绘消息WM_PAINT的响应函数,当窗口重绘时会产生WM_ERASEBKGND消息和WM_PAINT消息,而且WM_ERASEBKGND会先于WM_PAINT产生,所 ...

  6. java中的四种修饰符:private、protected、public和default的区别

      本类 本包 子类 包外 public 可以 可以 可以 可以 protected 可以 可以 可以 不可以 default 可以 可以 不可以 不可以 private 可以 不可以 不可以 不可以 ...

  7. MFC 消息框

    窗口类能够使用messagebox int ret = MessageBox(_T("内容"), _T("标题"), MB_OKCANCLE|  //MB_OB ...

  8. s5-13 RIP 为什么会 衰败

    DV路由可能遇到的问题 路由环路( routing loop) 计数到无穷问题( Count to infinite) 收敛慢的问题( slow Convergence ) 相信错误的路由信息导致 好 ...

  9. MacOS使用常用配置

    如何增加tree命令? 安装Homebrew步骤:http://blog.csdn.net/xianyiqi/article/details/51297562 安装npm步骤:https://blog ...

  10. Linux(CentOS)下的apache服务器配置与管理

    原文链接:http://blog.csdn.net/ylqmf/article/details/5291680 一.WEB服务器与Apache1.web服务器与网址 2.Apache的历史 3.补充h ...