Java基础中常犯的一些细节上的错误
来源:互联网 发布:王者荣耀mvp 详细算法 编辑:程序博客网 时间:2024/03/28 22:57
学习Java有段时间了 ,说实话,本人的基础不太好,因此常常犯一些低级的错误,所以今天把最近犯的和容易犯错的一些问题尽可能地罗列出来,一来提醒自己,二来算是为初学者提供一点点帮助吧,以免犯同样的错误。
如有什么地方说的不对,还望指点。
一、基本类型数据运算中的+=和+,如:short a+=1和short a =a+1
咋一看,貌似没什么问题,a+=1不就相当于a=a+1吗?是的,程序在运算时确实是将a+=1先变成a=a+1,但区别是,一个是程序或者是java编译器编译时自动转变的,而另一个是你自己写的,这就不一样了。请记得:byte、short和char类型数据是先转换成int型再进行运算的。前一个程序会自动转换成int型,而后一个就需要你手动转了,所以short a+=1没问题,而short a =a+1则会编译错误,应是short a =(int)a+1。
二、字符串拼接时有运算参与,如:1:System.out.println(""+1+2+1)和2:System.out.println(1+2+""+1),以及3:System.out.println(""+1+2+'a')
我想不少初学者在这个问题上纠结的时间很长,不光是前俩个,尤其是最后一个,之所以要写最后一个是因为我当时在这里绕了半天才出来。
其实理解了就不难了,只有记住字符串能将跟它拼接的数据类型转换成字符串就ok了,也就是说,1语句是""先和1拼接成字符串“1”,然后再和2拼接成字符串...这样结果就为 121字符串,而2语句则是先1+2=3,再和""拼接,结果为31,那么3语句呢?记住一点就ok了,那就是char类型数据只要不单独成一句代码就转换为对应的ASCII值,也就是转换为int型,那么3语句就变得很简单了,结果为1297。
三、类中局部变量和成员变量的作用范围问题
先看一个例子:
01
public
class
Piont{
02
int
y =
7
;
03
public
void
step(
int
y) {
04
y += y;
05
System.out.println(y);
06
}
07
public
static
void
main(String[] args) {
08
Point p =
new
Point();
09
p.step(
10
);
10
}
11
}
相信很多童鞋给出的答案是17,但事实上是20。这是一个典型的成员变量和局部变量的区别问题,step方法中的代码行 “ y += y;”其中的两个y都是局部变量,即step方法的形式参数y。如果要引用成员变量y那么应该是this.y。 当实参10传递给step方法的形参y时,根据之前的解释,“ y += y;”中的两个y表示的是局部变量y,计算后,y的值为20。同样,再看另一个:
01
public
class
Answer {
02
public
static
void
main(String[] args) {
03
int
score =
20
;
04
Answer ans=
new
Answer();
05
ans.add(score);
06
System.out.println(
" main: score = "
+ score);
07
}
08
void
add(
int
score) {
09
System.out.println(
" add: score="
+ score++);
10
}
11
}
四、接口的实现和继承问题
接口,其实就是一种规范,一个标准,只要实现了已有的接口,那么就要重写其方法,所以说,只要我们写好了接口后,无论是谁去实现它,都得重写其中的方法,源文件是我们在写接口时相当于制定了一个标准,规范实现的类。
虽然接口不可实例化,但它可以通过其实现类来完成相应的功能,说的直接点就是接口其实也是一钟“类”,一个很特殊的“类”,其封装的只能是常量或public的抽象方法,只能通过其他类来实现其方法的重写。
那么,既然接口是一种很特殊的“类”,它就有继承问题,而接口之所以特殊就在与它相比较类来说可以多继承多实现。
public
interface
A {
02
public
void
doSomething(String thing);
03
}
04
interface
B {
05
}
06
interface
C
extends
A, B {
07
}
08
interface
D {
09
public
void
doIt(String thing);
10
}
11
class
AImpl
implements
C ,D{
12
public
void
doSomething(String msg) {}
13
public
void
doIt(String thing) {}
14
}
我想看到上面的代码,很多有一定写代码经验的童鞋都会认为第6行会编译错误,因为我开始也是这么想的,虽然我有一点开发经验(是一点!一点!一点!)。在实际开发中(我接触过的)很少会有去多继承接口的写法,尤其是自己写接口,基本是多实现,所以很多童鞋都会认为多继承不对,其实这也是经常写接口给自己挖的坑,因为我们经常是implements多个接口,长时间习惯,慢慢就会认为extends多接口也可以!?难道不是只有类是单继承吗!?其实这也是接口的特殊之一吧,它是可以多继承的,毕竟接口不是类。
- Java基础中常犯的一些细节上的错误
- java中常犯的几个错误,自勉。
- JAVA开发犯的细节错误
- Java中常犯的错误,你知道吗?
- C#中常犯的是个错误
- 商务英语中常犯的5个错误
- 商务英语中常犯的5个错误
- 网站设计布局中常犯的错误
- 网站设计布局中常犯的错误
- 我编程中常犯的错误
- C语言中常犯的一个错误
- SEO优化中常犯的错误
- Android开发中常犯的错误
- JAVA基础方面犯过的错误
- 十个Java编程中常犯的错误,看看你中招了没?
- 产品经理的漫长历程中常犯的错误
- 转 43条网页设计中常犯的错误总结
- 误区:思维中常犯的6个基本错误
- 2016百度之星 资格赛 1002 Problem B 递推加大数
- 34 Spark中任务处理的Stage划分和Task最佳位置算法
- Hongyang 生命不息,奋斗不止,万事起于忽微,量变引起质变 目录视图 摘要视图 订阅 Android 属性动画(Property Animation) 完全解析 (上)
- 24. Swap Nodes in Pairs [easy]
- RecyclerView Part 2:选择模式
- Java基础中常犯的一些细节上的错误
- 图像数据到网格数据-2——改进的SMC算法
- Google:坚决杀死Flash
- 图像数据到网格数据-3——Cuberille算法
- SM2算法第十篇:数字证书及CA的扫盲介绍
- UNIX网络编程:IPC之信号量
- 针对大数据的种子点生长——分块生长的策略
- 2016百度之星 资格赛 1003 Problem C 容器瞎搞
- 针对大数据的种子点生长——分块生长的策略