
正文
java编写代码注意事项 java写代码用什么软件
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
学弟求助,Java基础编程好过么= =
还好
Java代码的基本格式
Java中的程序代码都必须放在一个类中。类需要使用class关键字定义,在class前面可以有一些修饰符,格式如下:
修饰符 class 类名{
程序代码
}123
Java中的程序代码可以分为结构定义语句和功能执行语句,其中,结构定义语句用于声明一个类或方法,功能执行语句用于实现具体的功能。每条功能执行语句的最后都必须用分号(;)结束。
Java语言是严格区分大小写的。
编写Java代码时,可以在两个单词或符号之间任意的换行。但为了便于阅读,我们通常会使用一种良好的格式进行排版。
Java程序中一句连续的字符串不能分开在两行中书写,例如,下面这条语句在编译时将会出错:
System.out.println("这是第一个
Java程序");12
如果为了便于阅读,想将一个太长的字符串分在两行中书写,可以先将这个字符串分成两个字符串,然后用加好(+)将两个字符串连起来,在加好(+)处断行。
System.out.println("这是第一个"+ "Java程序");12
Java中的注释
在编写程序时,为了使代码易于阅读,通常会在实现功能的同时为代码加一些注释。注释是对程序某个功能或者某行代码的解释说明,它只在Java源文件中有效,在编译程序时编译器会忽略这些注释信息,不会将其编译到class字节码文件中去。
注释还经常用于调试代码,注释掉一段代码,来逐步缩小调试范围,找到出错代码。
单行注释:通常用于对程序中中的某一行代码进行解释,用符号“//”表示,“//”后面为被注释的内容。
多行注释:以符号“/*”开头,以符号“*/”结尾。
文档注释:以“/**”开头,以“*/”结尾。可以使用javadoc命令将文档注释提取出来生成帮助文档。
Java中标识符
在编程过程中,经常需要在程序中定义一些符号来标记一些名词,如包名、类名、方法名、参数名、变量名等,这些符号被称为标识符。
标识符可以由任意顺序的大小写字符、数字、下划线(_)和美元符号($)组成
但标识符不能以数字开头
不能是Java中的关键字
在Java中定义的标识符必须要严格遵守上面列出的规范,否则程序在编译时会报错。
除了上面列出的规范,为了增强代码的可读性,还应遵循以下规则:
包名所有字母一律小写
类名和接口名每个单词的首字母都要大写
变量名和方法名的第一个单词首字母小写,从第二个单词开始每个单词首字母大写
常量名所有字母都大写,单词之间用下划线连接
应该尽量使用有意义的英文单词来定义标识符
Java中的关键字
关键字是编程语言里事先定义好并赋予了特殊含义的单词,也称作保留字。
下面列举的是Java中所有的关键字。
abstract
boolean
break
byte
case
catch char const class continue
default do double else extends
false final finally float for
goto if implements inport instanceof
int interface long native new
null package private protected public
return short static strictfp super
switch this throw throws transient
true try void volatile while
synchronized
所有关键字都是小写的
程序中的标识符不能以关键字命名。
Java中的常量
常量就是在程序中固定不变的值,是不能改变的数据。例如数字1,字符‘a’,浮点数3.2
整型常量
二进制:由数字0和1组成的数字序列。允许使用字面值来表示二进制数,前面要以0b或0B开头,目的是为了和十进制进行区分,如0b10110010。
八进制:以0开头并且其后由0~7范围内(包括0和7)的整数组成的数字序列,如0342
十六进制:以0x或者0X开头并且其后由0\~9、A~F(包括0和9、A和F)组成的数字序列,如0x23AF。
十进制
浮点数常量
浮点数常量就是数学中用到的小数,分为float单精度浮点数和double双精度浮点数两种类型。
单精度浮点数后面以F或f结尾,而双精度浮点数则以D或d结尾。在使用浮点数时也可以在结尾处不加任何的后缀,此时虚拟机会默认为double双精度浮点数。
字符常量
字符常量用于表示一个字符,且必须包含一个字符。一个字符常量要用一对英文半角格式的单引号”引起来,它可以是英文字母、数字、标点符号以及由转义序列来表示的特殊字符。
'a' '\r' '' '\u0000'
‘\u0000’表示一个空白字符,即在单引号之间没有任何字符。之所以能这样表示,是因为Java采用的是Unicode字符集,Unicode字符以\u开头,空白字符在Unicode码表中对应的值为’\u0000’。
1
字符串常量
字符串常量用于表示一串连续的字符,一个字符串常量要用一对英文半角格式的双引号”“引起来。
一个字符串可以包含一个字符或多个字符,也可以不包含任何字符,即长度为零。
布尔常量
布尔常量即布尔型的两个值true和false。
null常量
null常量只有一个值null,表示对象的引用为空。
反斜杠(\)
在字符常量中,反斜杠(\)是一个特殊的字符,被称为转义字符,它的作业是用来转义后面一个字符。转义后的字符通常用于表示一个不可见的字符或具有特殊含义的字符。
\r表示回车符,将光标定位到当前行的开头,不会跳到下一行。
\n表示换行符,换到下一行的开头。
\t表示制表符,将光标移到下一个制表符的位置,就像在文档中用Tab键一样。
\b表示退格符号,就像键盘上的Backspace键。
以下的字符都有特殊意义,无法直接表示,所以用斜杠加上另外一个字符表示。
\’表示单引号字符,Java代码中单引号表示字符的开始和结束,如果直接写单引号字符(’),程序会认为前两个是一对,会报错,因此需要使用转移符(\’).
\”表示双引号字符。
\\表示反斜杠字符,由于在Java代码中的斜杠(\)是转义字符,因此需要表示字面上的\,就需要使用双斜杠(\\)。
Java中的变量
变量的定义
在程序运行期间,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元被称为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值。
int x=0,y;
y=x+3;12
第一行代码的作用 是定义了两个变量x和y,也就相当于分配了两块内存单元,在定义变量的同时为变量x分配了一个初始值0,而变量y没有分配初始值,变量x和y在内存中的状态为。
第二行代码的作用是为变量赋值,在执行第二行代码时,程序首先取出变量x的值,与3相加后,将结果赋值给变量y,此时变量x和y在内存中的状态发生了变化。
变量的数据类型
Java是一门强类型的语言,它对变量的数据类型有严格的限定。在定义变量时必须声明变量的类型,在为变量赋值时必须赋予和变量同一种类型的值,否则程序会报错。
在Java中变量的数据类型分为两种,即基本数据类型和引用数据类型。
8种基本数据类型是Java语言内嵌的,在任何操作系统中都具有相同大小和属性,而引用数据类型是在Java程序中由编程人员自己定义的变量类型。
整数类型变量
整数类型变量用来存储整数数值,即没有小数部分的值。在Java中,为了给不同大小范围内的整数合理地分配存储空间,整数类型分为4中不同的类型:字节型(byte)、短整型(short)、整型(int)和长整型(long)。
类型名
占用空间
取值范围
byte 8位(1个字节) −27~27−1
short 16位(2个字节) −215~215−1
int 32位(4个字节) −231~231−1
long 64位(8个字节) −263~263−1
在为一个long类型的变量赋值时,所赋值的后面要加上一个字母L(或小写l),说明赋值为long类型。如果赋的值未超过int型的取值范围,则可以省略字母L(或小写l)。
浮点数类型变量
浮点数类型变量用来存储小数数值。在Java中,浮点数类型分为两种:单精度浮点数(float)和双精度浮点数(double)。double型所表示的浮点数比float型更精确。
类型名
占用空间
取值范围
float 32位(4个字节) 1.4E-45~3.4E+38,-1.4E-45~-3.4E+38
double 64位(8个字节) 4.9E-324~1.7E+308,-4.9E-324~-1.7E+308
E表示以10为底的指数,E后面的+号和-号代表正指数和负指数,例如1.4E−45表示1.4∗10−45。
在Java中,一个小数会被默认为double类型的值,因此在为一个float类型的变量赋值时,所赋值的后面一定要加上字母F(或者小写f)。
在程序中,也可以为一个浮点数类型变量赋予一个整数数值。
字符类型变量
字符类型变量用于存储一个单一字符,在Java中用char表示。Java中每个char类型的字符变量都会占用2个字节。在给char类型的变量赋值时,需要用一对英文半角格式的单引号”把字符括起来,如’a’,也可以将char类型的变量赋值为0~65535范围内的整数,计算机会自动将这些整数转化为所对应的字符,如数值97对应的字符为’a’。
char c='a';char ch=97;
1
2
布尔类型变量
布尔类型变量用来存储布尔值,在Java中用boolean表示,该类型的变量只有两个值,即true和false。
变量类型的转换
在程序中,当把一种数据类型的值赋给另一种数据类型的变量时,需要进行数据类型转换。
自动类型转换
自动类型转换也叫隐式类型转换,指的是两种数据类型在转换的过程中不需要显式地进行声明。
要实现自动类型转换,必须同时满足两个条件,第一是两种数据类型彼此兼容,第二是目标类型的取值范围大于源类型的取值范围。
byte b=3;int x=b;
整数类型之间可以实现转换:byte–short、int、long;short、char–int、long;int–long
整数类型转换为float:byte、char、short、int、long–float
其他类型转换为double类型:byte、char、short、int、long、float–double
1
2
强制类型转换
强制类型转换也叫显示类型转换,指的是两种数据类型之间的转换需要进行显示地声明。当两种类型彼此不兼容,或者目标类型取值范围小于源类型,自动类型转换无法进行,这时就需要进行强制类型转换。
int a=4;byte b=(byte)a;
一个字节的变量b无法存储四个字节的变量a,在这种情况下就需要进行强制类型转换。
但强制类型转换极容易造成 数据精度的丢失。
int a=298;byte b=(byte)a;
System.out.println("a="+a);
System.out.println("b="+b);
输出结果为
a=298b=42
变量a的值本来为298,然而在赋值给变量b之后,其值为42,明显丢失了精读。
因为a是int类型,在内存中占用4个字节,byte类型的数据在内存中占用1个字节。当将变量b的类型强转为byte类型之后,前面3个高位字节的数据丢失,数值发生改变。
int 00000000 00000000 00000001 00101010byte 00101010
表达式类型自动提升
表达式是指由变量和运算符组成的一个算式。变量在表达式中进行运算时,也可能发生自动类型转换,这就是表达式数据类型的自动提升,如一个byte型的变量在运算期间类型会自动提升为int型。
byte b1=3;byte b2=4;byte b3=b1+b2;
System.out.println("b3="+b3);
运行时会报错,因为表达式b1+b2运算期间,变量b1和b2都会被自动提升为int型,表达式的运算结果也就变成了int型,这时如果将结果赋给byte型的变量就会报错,需要进行强制类型转换。
byte b3=(byte)b1+b2;
1
1
2
3
4
1
2
1
2
1
2
3
4
1
2
变量的作用域
变量需要在它的作用范围内才可以被使用,这个作用范围称为变量的作用域。
在程序中,变量一定会被定义在某一对大括号中,该大括号所包含的代码区域便是这个变量的作用域。
Java中的运算符
算数运算符
运算符
运算
范例
结果
+ 正号 +3 3
- 负号 b=4;-b; -4
+ 加 5+5 10
- 减 6-4 2
* 乘 3*4 12
/ 除 5/5 1
% 取模(即算数中的求余数) 7%5 2
++ 自增(前) a=2;b=++a; a=3;b=3
++ 自增(后) a=2;b=a++; a=3;b=2
– 自增(前) a=2;b=–a; a=1;b=1
– 自增(后) a=2;b=a–; a=1;b=2
在进行自增++和自增–的运算时,如果运算符++或–放在操作数的前面则是先进行自增或自减运算,再进行其他运算。反之,如果运算符放在操作数的后面则是先进行其他运算再进行自增或自减运算。
在进行除法运算时,当除数和被除数都为整数时,得到的结果也是一个整数。如果除法运算有小数参与,得到的结果会是一个小数。
在进行取模(%)运算时,运算结果的正负取决于被模数(%左边的数)的符号,与模数(%右边的数)的符号无关。
赋值运算符
赋值运算符的作用就是将常量、变量或表达式的值赋给某一个变量。
运算符
运算
范例
结果
= 赋值 a=3;b=2; a=3;b=2;
+= 加等于 a=3;b=2;a+=b; a=5;b=2;
-= 减等于 a=3;b=2;a-=b; a=1;b=2;
*= 乘等于 a=3;b=2;a*=b; a=6;b=2;
/= 除等于 a=3;b=2;a/=b; a=1;b=2;
%= 模等于 a=3;b=2;a%=b; a=1;b=2;
在赋值过程中,运算顺序从右往左,将右边表达式的结果赋值给左边的变量。
x+=3;就相当于x=x+3;
将一个int类型的值赋给一个short类型的变量,需要显示地进行强制类型转换。然而在使用+=,-+,*=,/=,%=运算符进行赋值时,强制类型转换会自动完成,程序不需要做任何显式子地声明。
比较运算符
比较运算符用于对两个数值或变量进行比较,其结果是一个布尔值,即true或false。
运算符
运算
范例
结果
== 相等于 4==3 false
!= 不等于 4!=3 true
小于 43 false
大于 43 true
= 小于等于 4=3 false
= 大于等于 4=3 true
注意不能将比较运算符==误写成赋值运算符=。
逻辑运算符
逻辑运算符用于对布尔型的数据进行操作,其结果仍是一个布尔型。
运算符
运算
与 两边都是true才为true
| 或 有一个true就为true
^ 异或 两边不同为true
! 非
短路与
|| 短路或
在使用进行运算时,无论左边为true或者false,右边的表达式都会进行运算。
如果使用进行运算,当左边为false时,右边的表达式不会进行运算。
位运算符
位运算符是针对二进制数的每一位进行运算的符号,它是专门针对数字0和1进行操作的。
运算符
运算
按位与
| 按位或
~ 取反
^ 按位异或
左移 100100112 01001100
右移
无符号右移
1代表true
位运算就是将操作数所有二进制位向左移动。运算时,右边的空位补0。左边移走的部分舍去。
位运算符就是将操作数所有二进制位向右移动。运算时,左边的空位根据原数的符号位补0或者1(原来是负数就补1,是正数就补0)。
位运算符就是将操作数所有二进制位向右移动一位。运算时,左边的空位补0(不考虑原数正负)
运算符的优先级
在对一些比较复杂的表达式进行运算时,要明确表达式中所有运算符参与运算的先后顺序。
数字越小优先级越高。
优先级
运算符
1 . [ ] ( )
2 ++ - - ~ ! (数据类型)
3 * / %
4 + -
5
6 = =
7 == !=
8
9 ^
10 |
11
12 ||
13 ?:
14 = *= /= %= += -= = = = = ^= |=
编写程序时,尽量使用括号()来实现想要的运算顺序,以免产生歧义。
选择结构语句
if条件语句
if语句:判断条件是一个布尔值,当判断条件为true时,{}中的执行语句才会执行。
if(判断条件){
代码块
}
1
2
3
if···else语句:判断条件为真,执行语句1,为false执行语句2
if(判断条件){
执行语句1}else{
执行语句2}
三元运算符
判断条件?表达式1:表达式2
三元运算符会得到一个结果,通常用于对某个变量进行赋值,当判断条件为真时,结果为1的值,否则结果为表达式2的值。
int max=xy?x:y;
1
2
3
4
5
if···else if···else语句
if···else if···else语句用于对多个条件进行判断,进行多种不同的处理。
if(判断条件1){
执行语句1}else if(判断条件2){
执行语句2}...else if(判断条件n){
执行语句n
}else{
执行语句n+1}
当判断条件1为true时,会执行语句1。为false时,会执行判断条件2,如果为true则执行语句2,依次类推,如果所有的判断条件都为false,则意味着所有条件均为满足,else后面{}中的执行语句n+1会执行。
1
2
3
4
5
6
7
8
9
10
11
switch条件语句
switch(表达式){
case 目标值1:
执行语句1
break;
case 目标值2:
执行语句2
break; ...
case 目标值n:
执行语句n break;
default:
执行语句n+1
break;
}123456789101112131415
switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,会执行对应case后的语句,如果没有找到任何匹配的值,就会执行default后的语句。
在switch语句中的表达式只能是byte、short、char、int类型的值,如果传入其他类型的值,程序会报错。但这样说也不严谨,在JDK5.0中引入的新特性enum枚举和在JDK7.0中引入的新特性String类型也可以。
在使用switch语句中,如果多个case条件后面的执行语句是一样的,则该执行语句只需书写一次即可,这是一种简写的方式。
int week=2;switch(week){ case 1: case 2: case 3: case 4: case 5:
System.out.println("今天是工作日"); break; case 6: case 7:
System.out.println("今天是休息日"); break;
}1234567891011121314
循环结构语句
while循环语句
while(循环条件){
执行语句
}
{}中的执行语句被称作循环体。当循环条件为true时,循环体就会执行。循环体执行完毕时会继续判断循环条件,如条件仍为true则会继续执行,直到循环条件为false时,整个循环过程才会结束。
1
2
3
do···while循环语句
do{
执行语句
}while(循环条件);
循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。
1
2
3
for循环语句
for循环语句是最常用的循环语句,一般用在循环次数已知的情况下。
for(初始化表达式;循环条件;操作表达式){
执行语句
}
先执行初始化表达式,然后判断循环条件,为false就退出循环,为true的话就执行语句,然后执行操作表达式,然后再判断循环条件。。。
1
2
3
嵌套循环
嵌套循环是指在一个循环语句的循环体中再定义一个循环语句的语法结构。while、do···while、for循环语句都有可以进行嵌套,并且它们之间也可以互相嵌套。
跳转语句(break、continue)
break语句
在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现在循环语句中,作用是跳出循环语句,执行后面的代码。
continue语句
continue语句用在循环语句中,它的作用是终止本次循环,执行下一次循环。
方法
什么是方法
将重复的代码提取出来封装成一个方法。
修饰符 返回值类型 方法名([参数类型 参数名1,参数类型 参数名2,···]){
执行语句 return 返回值;
}1234
修饰符:对访问权限进行限定。
返回值类型: 用于限定返回值的数据类型
参数类型:用于限定调用方法时传入参数的数据类型
参数名:是一个变量,用于接收调用方法时传入的数据。
return关键字:用于结束方法及返回方法指定类型的值。
返回值:被return语句返回的值,该值会返回给调用者。
方法中的“参数类型 参数名1,参数类型 参数名2”被称作参数列表,它用于描述方法在被调用时需要接收的参数,如果方法不需要接收任何参数,则参数列表为空,即()内不写任何内容。方法的返回值必须为方法声明的返回值类型,如果方法中没有返回值,返回值类型要声明为void,此时,方法中return语句可以省略。
方法的重载
在一个程序中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载。
方法的重载与返回值类型无关,它只需要满足两个条件,一是方法名相同,二是参数
相关问答
Q1: 怎么写java代码?
只要自己的电脑安装了jdk环境,任何地方都可以进行java代码的编写的,记事本也可以。
Q2: 如何写出好的Java代码
如何写出好的Java代码
1. 优雅需要付出代价。
从短期利益来看,对某个问题提出优雅的解决方法,似乎可能花你更多的时间。但当它终于能够正确执行并可轻易套用于新案例中,不需要花上数以时计,甚至以天计或以月计的辛苦代价时,你会看得到先前所花功夫的回报(即使没有人可以衡量这一点)。这不仅给你一个可更容易开发和调试的程序,也更易于理解和维护。这正是它在金钱上的价值所在。这一点有赖某种人生经验才能够了解,因为当你努力让某一段程序代码变得比较优雅时,你并不是处于一种具生产力的状态下。但是,请抗拒那些催促你赶工的人们,因为那么做只会减缓你的速度罢了。
2. 先求能动,再求快。
即使你已确定某段程序代码极为重要,而且是系统的重要瓶颈,这个准则依然成立。尽可能简化设计,让系统能够先正确动作。如果程序的执行不够快,再量测其效能。几乎你总是会发现,你所认为的”瓶颈”其实都不是问题所在。把你的时间花在刀口上吧。
3. 记住”各个击破”的原理。
如果你所探讨的问题过于混杂,试着想像该问题的基本动作会是什么,并假设这一小块东西能够神奇地处理掉最难的部分。这”一小块”东西其实就是对象–请撰写运用该对象的程序代码,然后检视对象,并将其中困难的部分再包装成其他对象,依此类推。
4. 区分class开发者和class使用者(使用端程序员)。
Class 使用者扮演着”客户”角色,不需要(也不知道)class的底层运作方式。Class开发者必须是class设计专家,并撰写class,使它能够尽可能被大多数新手程序员所用,而且在程序中能够稳当执行。一套程序库只有在具备通透性的情况下,使用起来才会容易。
5.当你撰写class时,试着给予明了易懂的名称,减少不必要的注解。
你给客户端程序员的接口,应该保持概念上的单纯性。不了这个目的,当函数的重载(overloading)适合制作出直觉、易用的接口时,请善加使用。
6. 也必你的分析和设计必须让系统中的classes保持最少,须让其Public interfaces保持最少,以及让这些classes和其他classes之间的关联性( 尤其是base classes)保持最少。
如果你的设计所得结果更甚于此,请问问自己,是否其中每一样东西在整个程序生命期中都饶富价值?如果并非如此,那么,维护它们会使你付出代价。开发团队的成员都有不维护”无益于生产力提升”的任何东西的倾向;这是许多设计方法无法解释的现象。
7. 让所有东西尽量自动化。先撰写测试用的程序代码(在你撰写class之前),并让它和class结合在一起。请使用makefile或类似工具,自动进行测试动作。
通过这种方式,只要执行测试程序,所有的程序变动就可以自动获得验证,而且可以立即发现错误。由于你知道的测试架构所具备的安全性,所以当你发现新的需求时,你会更勇于进行全面修改。请记住,程序语言最大的改进,是来自型别检查、异常处理等机制所赋予的内置测试动作。但这些功能只能协助你到达某种程度。开发一个稳固系统时,你得自己验证自己的classes或程序的性质。
8. 在你撰写class之前先写测试码,以便验证你的class 是否设计完备。如果你无法撰写测试码,你便无法知道你的class 的可能长相。撰写测试码通常能够显现出额外的特性(features)或限制 ( constraints)__它们并不一定总是能够在分析和设计过程中出现。测试码也可做为展示class 用法的示例程序。
9. 所有软件设计上的问题,都可以通过”引入额外的概念性间接层(conceptual indirection)”加以简化。这个软件工程上的基础法则是抽象化概念的根据,而抽象化概念正是面向对象程序设计的主要性质。
10. 间接层(indirection)应该要有意义(和准则-9致)。
这里所指的意义可以像”将共用程序代码置于惟一函数”这么简单。如果你加入的间接层(或抽象化、或封装等等)不具意义,它可能就和没有适当的间接层一样糟糕。
11. 让class尽可能微小而无法切割(atomic)。
赋予每个class单一而清楚的用途。如果你的classes或你的系统成长得过于复杂,请将复杂的classes切割成比较简单的几个classes。最明显的一个判断指针就是class的大小:如果它很大,那么它工作量过多的机会就可能很高,那就应该被切割。重新设计class的建议线索是:
1) 复杂的switch语句:请考虑运用多态(Polymorphism)。
2) 许多函数各自处理类型极为不同的动作:请考虑切割为多个不同的(classes)。
12. 小心冗长的引数列(argument lists)。
冗长的引数列会使函数的调用动作不易撰写、阅读、维护。你应该试着将函数搬移到更适当的class中,并尽量以对象为引数。
13. 不要一再重复。
如果某段程序代码不断出现于许多derived class函数中,请将该段程序代码置于某个base class 函数内,然后在derived class函数中调用。这么做不仅可以省下程序代码空间,也可以让修改该段程序代码动作更易于进行。有时候找出此种共通程序代码还可以为接口增加实用功能。
14. 小心switch语句或成串的if-else 子句。
通常这种情况代表所谓的”type-check coding”。也就是说究竟会执行哪一段程序代码,乃是依据某种型别信息来做抉择(最初,确切型别可能不十分明显)。你通常可以使用继承和多态来取代此类程序代码;Polymorphical method (多态函数)的调用会自动执行此类型别检验,并提供更可靠更容易的扩充性。
15. 从设计观点来看,请找出变动的事物,并使它和不变的事物分离。
也就是说,找出系统中可能被你改变的元素,将它们封装于classes中。你可以在《Thinking in Patterns with Java》(可免费下载于 www. BruceEckel. Com)大量学习到这种观念。
16. 不要利用subclassing来扩充基础功能。
如果某个接口元素对class而言极重要,它应该被放在base class 里头,而不是直到衍生(derivation)时才被加入。如果你在继承过程中加入了函数,或许你应该重新思考整个设计。
17. 少就是多。
从class 的最小接口开始妨展,尽可能在解决问题的前提下让它保持既小又单纯。不要预先考量你的class被使用的所有可能方式。一旦class被实际运用,你自然会知道你得如何扩充接口。不过,一旦class被使用后,你就无法在不影响客户程序代码的情况下缩减其接口。如果你要加入更多函数倒是没有问题–不会影响既有的客户程序代码,它们只需重新编译即可。但即使新函数取代了旧函数的功能,也请你保留既有接口。如果你得通过”加入更多引数”的方式来扩充既有函数的接口,请你以新引数写出一个重载化的函数;通过 这种方式就不会影响既有函数的任何客户了。
18. 大声念出你的classes,确认它们符合逻辑。
请base class和derived class 之间的关系是”is-a”(是一种),让class和成员对象之间的关系是”has-a”(有一个)。
19. 当你犹豫不决于继承(inheritance)或合成(组合,composition)时,请你问问自己,是否需要向上转型(upcast)为基础型别。
如果不需要,请优先选择合成(也就是是使用成员对象)。这种作法可以消除”过多基础型别”。如果你采用继承,使用者会认为他们应该可以向上转型。
20. 运用数据成员来表示数值的变化,运用经过覆写的函数(overrided method)来代表行为的变化 。
也就是说,如果你找到了某个 class, 带有一些状态变量,而其函数会依据这些变量值切换不同的行为,那么你或许就应该重新设计,在subclasses 和覆写后的函数(overrided methods)中展现行为止的差异。
21. 小心重载(overloading)。
函数不应该依据引数值条件式地选择执行某一段程序代码。这种情况下你应该撰写两个或更多个重载函数(overloaded methods)
22. 使用异常体系(exception hierarchies)
最好是从Java标准异常体系中衍生特定的classes, 那么,捕捉异常的人便可以捕捉特定异常,之后才捕捉基本异常。如果你加入新的衍生异常,原有的客户端程序仍能通过其基础型别来捕捉它。
23. 有时候简单的聚合(aggregation)就够了。
飞机上的”旅客舒适系统”包括数个分离的元素:座椅、空调、视讯设备等等,你会需要在飞机上产生许多这样的东西。你会将它们声明为Private成员并开发出一个全新的接口吗?不会的,在这个例子中,元素也是Public接口的一部分,所以仍然是安全的。当然啦,简单聚合并不是一个常被运用的解法,但有时候的确是。
24. 试着从客户程序员和程序维护的角度思考。
你的class应该设计得尽可能容易使用。你应该预先考量可能性有的变动,并针对这些 可能的变动进行设计,使这些变动日后可轻易完成。
25. 小心”巨大对象并发症”。
这往往是刚踏OOP领域的过程式(procedural)程序员的一个苦恼,因为他们往往最终还是写出一个过程式程序,并将它们摆放到一个或两个巨大对象中。注意,除了application framework (应用程序框架,译注:一种很特殊的、大型OO程序库,帮你架构程序本体)之外,对象代表的是程序中的观念,而不是程序本身。
26. 如果你得用某种丑陋的方式来达成某个动作,请将丑陋的部分局限在某个class里头。
27. 如果你得用某种不可移植方式来达成某个动作,请将它抽象化并局限于某个class里头。这样一个”额外间接层”能够防止不可移植的部分扩散到整个程序。这种作法的具体呈现便是Bridge设计模式(design pattern)。
28. 对象不应仅仅只用来持有数据。
对象也应该具有定义明确界限清楚的行为。有时候使用”数据对象”是适当的,但只有在通用形容器不适用时,才适合刻意以数据对象来包装、传输一群数据项。
29. 欲从既有的classes身上产生新的classes时,请以组合(composition)为优先考量。
你应该只在必要时才使用继承。如果在组合适用之处你却选择了继承,你的设计就渗杂了非必要的复杂性。
30. 运用继承和函数覆写机制来展现行为上的差异,运用fields(数据成员)来展现状态上的差异。
这句话的极端例子,就是继承出不同的classes表现各种不同的颜色,而不使用”color”field.
31. 当心变异性(variance)。
语意相异的两个对象拥有相同的动作(或说责任)是可能的。OO世界中存在着一种天生的引诱,让人想要从某个class继承出另一个subclass,为的是获得继承带来的福利。这便是所谓”变异性”。但是,没有任何正当理由足以让我们强迫制造出某个其实并不存在的superclass/subclass关系。比较好的解决方式是写出一个共用的base class,它为两个derived classes制作出共用接口–这种方式会耗用更多空间,但你可以如你所盼望地从继承机制获得好处,而且或许能够在设计上获得重大发现。
32. 注意继承上的限制。
最清晰易懂的设计是将功能加到继承得来的class里头;继承过程中拿掉旧功能(而非增加新功能)则是一种可疑的设计。不过,规则可以打破。如果你所处理的是旧有的class程序库,那么在某个class的subclass限制功能,可能会比重新制定整个结构(俾使新class得以良好地相称于旧 class)有效率得多。
33. 使用设计模式(design patterns)来减少”赤裸裸无加掩饰的机能(naked functionality)”。
举个例子,如果你的class只应该产出惟一一个对象,那么请不要以加思索毫无设计的手法来完成它,然后撰写”只该产生一份对象”这样的注解就拍拍屁股走人。请将它包装成singleton(译注:一个有名的设计模式,可译为”单件”)。如果主程序中有多而混乱的”用以产生对象”的程序代码,请找出类似 factory method这样的生成模式(creational patterns),使价钱可用以封装生成动作减少”赤裸裸无加掩饰的机能”(naked functionality)不仅可以让你的程序更易理解和维护,也可以阻止出于好意却带来意外的维护者。
34. 当心”因分析而导致的瘫痪(analysis paralysis)”。
请记住,你往往必须在获得所有信息之前让项目继续前进。而且理解未知部分的最好也最快的方式,通常就是实际前进一步而不只是纸上谈兵。除非找到解决办法,否则无法知道解决办法。Java拥有内置的防火墙,请让它们发挥作用。你在单一class或一组classes中所犯的错误,并不会伤害整个系统的完整性。
35. 当你认为你已经获得一份优秀的分析、设计或实现时,请试着加以演练。
将团队以外的某些人带进来-他不必非得是个顾问不可,他可以是公司其他团队的成员。请那个人以新鲜的姿态审视你们的成果,这样可以在尚可轻易修改的阶段找出问题,其收获会比因演练而付出的时间和金钱代价来得高。实现 (Implementation)
36. 一般来说,请遵守Sun的程序编写习惯。
价钱可以在以下网址找到相关文档:java.sun.com/docs/codeconv/idex.html。本书尽可能遵守这些习惯。众多Java程序员看到的程序代码,都有是由这些习惯构成的。如果你固执地停留在过去的编写风格中,你的(程序代码)读者会比较辛苦。不论你决定采用什么编写习惯,请在整个程序中保持一致。你可以在home.wtal.de/software-solutions/jindent上找到一个用来重排Java程序的免费工具。
37. 无论使用何种编写风格,如果你的团队(或整个公司,那就更好了)能够加以标准化,那么的确会带来显著效果。这代表每个人都可以在其他人不遵守编写风格修改其作品,这是个公平的游戏。标准化的价值在于,分析程序代码时所花的脑力较小,因而可以专心于程序代码的实质意义。
38. 遵守标准的大小写规范。
将 class名称的第一个字母应为大写。数据成员、函数、对象(references)的第一个字母应为小写。所有识别名称的每个字都应该连在一块儿,所有非首字的第一个字母都应该大写。例如: ThisIsAClassName thisIsAMethodOrFieldName 如果你在static final 基本型别的定义处指定了常量初始式(constant initializers),那么该识别名称应该全为大写,代表一个编译期常量。 Packages是个特例,其名称皆为小写,即使非首字的字母亦是如此。域名(org, net, edu 等等)皆应为小写。(这是Java 1.1迁移至Java 2时的一项改变) 。
39、不要自己发明”装饰用的”Private数据成员名称。
通常这种的形式是在最前端加上底线和其他字符,匈牙利命名法(Hungarian notation)是其中最差的示范。在这种命名法中,你得加入额外字符来表示数据的型别、用途、位置等等。仿佛你用的是汇编语言(assembly language)而编译器没有提供任何协肋似的。这样的命名方式容易让人混淆又难以阅读,也不易推行和维护。就让classes和packages来进行”名称上的范
围制定(name scoping)”吧。
40、当你拟定通用性的class时,请遵守正规形式(canonical form)。
包括equals( )、hashCode( )、clone( ) ( 实现出Cloneable),并实现出Comparable和Serialiable等等。
41、对于那些”取得或改变Private数据值”的函数,请使用Java Beans 的”get”、”set”、”is”等命名习惯,即使你当时不认为自己正在撰写Java Bean。这么做不仅可以轻易以Bean的运用方式来运用你的class,也是对此类函数的一种标准命名方式,使读者更易于理解。
42、对于你所拟定的每一个class,请考虑为它加入static public test( ),其中含有class功能测试码。
你不需要移除该测试就可将程序纳入项目。而且如果有所变动,你可以轻易重新执行测试。这段程序代码也可以做为class的使用示例。
43、有时候你需要通过继承,才得以访问base class的protected成员。
这可能会引发对多重基类(multiple base types)的认识需求。如果你不需要向上转型,你可以先衍生新的class发便执行protected访问动作,然后在”需要用到上述 protected成员”的所有classes中,将新class声明为成员对象,而非直接继承。
44、避免纯粹为了效率考量而使用final函数。
只有在程序能动但执行不够快时,而且效能量测工具(profiler)显示某个函数的调用动作成为瓶颈时,才使用final函数。
45、如果两个classes因某种功能性原因而产生了关联(例如容器containers和迭代器iterators),那么请试着让其中某个class成为另一个class 的内隐类(inner class)。
这不仅强调二者间的关联,也是通过”将class名称嵌套置于另一个class 内”而使同一个class 名称在单一Package中可被重复使用。Java 容器库在每个容器类中都定义了一个内隐的(inner)Iterator class,因而能够提供容器一份共通接口。运用内隐类的另一个原因是让它成为private实现物的一部分。在这里,内隐类会为信息隐藏带来好处,而不是对上述的class关联性提供肋益,也不是为了防止命名空间污染问题(namespace pollution)。
46、任何时候你都要注意那些高度耦合(coupling)的 classes.请考虑内隐类(inner classes)为程序拟定和维护带来的好处。内隐类的使用并不是要去除classes间的耦合,而是要让耦合关系更明显也更便利。
47、不要成为”过早最佳化”的牺牲品。
那会让人神经错乱。尤其在系统建构初期,先别烦恼究竟要不要撰写(或避免)原生函数(native methods)、要不要将某些数声明为final、要不要调校程序代码效率等等。你的主要问题应该是先证明设计的正确性,除非设计本身需要某种程度的效率。
48、让范围(作用域,scope)尽可能愈小愈好,这么一来对象的可视范围和寿命都将尽可能地小。
这种作法可降低”对象被用于错误场所,因而隐藏难以察觉的臭虫”的机会。假设你有个容器,以及一段走访该容器的程序片段。如果你复制该段程序代码,将它用于新的容器身上,你可能会不小心以旧容器的大小做为新容器的走访上限值。如果旧容器已不在访问范围内,那么编译期便可找出这样的错误。
49、使用Java 标准程序库提供的容器。
请熟悉他们的用法。你将因此大幅提升你的生产力。请优先选择ArrayList来处理序列(sequences),选择HashSet来处理集合(sets)、选择HashMap来处理关联式数组(associative arrays),选择Linkedlist (而不是Stack) 来处理 shacks和queues。
50、对一个强固的(robust)程序而言,每一个组成都必须强固。
请在你所撰写的每个class中运用Java 提供的所有强固提升工具:访问权限、异常、型别检验等等。通过这种方式,你可以在建构系统时安全地移往抽象化的下一个层次。
51、宁可在编译期发生错误,也不要在执行期发生错误。
试着在最靠近问题发生点的地方处理问题。请优先在”掷出异常之处”处理问题,并在拥有足够信息以处理异常的最接近处理函数(handler)中捕捉异常。请进行现阶段你能够对该异常所做的处理;如果你无法解决问题,应该再次掷出异常。
52、当心冗长的函数定义。
函数应该是一种简短的、”描述并实现class接口中某个可分离部分”的功能单元。过长且复杂的函数不仅难以维护,维护代价也高。或许它尝试做太多事情了。如果你发现这一类函数,代表它应该被切割成多相函数。这种函数也提醒你或许得撰写新的class。小型函数同样能够在你的class中被重复运用。(有时候函数必须很大才行,但它们应该只做一件事情。)
53、尽可能保持”Private”。
一旦你对外公开了程序库的概况(method、Class 或field)。你便再也无法移除它们。因为如果移除它们,便会破坏某个现有的程序代码,使得它们必须重新被编写或重新设计。如果你只公开必要部分,那么你便可以改变其他东西而不造成伤害。设计总是会演化,所以这是个十分重要的自由度。通过这种方式,实现码的更动对derived class 造成的冲击会降最低。在多线程环境下,私密性格外重要-只有private数据可受保护而不被un-synchronized(未受同步控制)的运用所破坏。
54、大量运用注解,并使用javadoc的”注解文档语法”来产生程序的说明文档。
不过注解应该赋予程序代码真正的意义;如果只是重申程序代码已经明确表示的内容,那是很烦人的。请注意,通常Java class和其函数的名称都很长,为的便是降低注解量。
55、避免使用”魔术数字”,也就是那种写死在程序代码里头的数字–如果你想改变它们,它们就会成为你的恶梦,因为你永远都没有办法知道”100″究竟代表” 数组大小”或其他东西。你应该产生具描述性的常量度名称,并在程序中使用该常量名称。这使程序更易于理解也更易于维护。
56、撰写构造函数时,请考虑异常状态。最好情境下,构造函数不执行任何会掷出异常的动作。
次佳情境下,class 只继承自(或合成自)强固的(robust)classes,所以如有任何异常被掷出,并不需要清理。其他情况下,你就得在finally子句清理合成后的classes。如果某个构造函数一定会失败,适当的动作就是掷出异常,使调用者不至于盲目认为对象已被正确产生而继续执行。
57、如果你的class需要在”客户程序员用完对象”后进行清理动作,请将清理动作,放到单一而定义明确的函数中。最好令其名称为cleanup() 以便能够将用途告诉他人。此外请将boolean旗标放到class中,用以代表对象是否已被清理,使finalize()得以检验其死亡条件(请参考第 4章)。
58、finalize() 只可用于对象死亡条件的检验(请参考4章),俾有益于调试。
特殊情况下可能需要释放一些不会被垃圾回收的内存。因为垃圾回收器可能不会被唤起处理你的对象,所以你无法使用finalize()执行必要的清理动作。基于这个原因,你得拟定自己的”清理用”函数。在class finalize()中,请检查确认对象的确已被清理,并在对象尚未被清理时,掷出衍生自Runtime Exception 的异常。使用这种架构前,请先确认finalize()在你的系统上可正常动作(这可能需要调用System.gc()来确认)。
59、如果某个对象在某个特定范围(scope)内必须被清理(cleaned up),而不是被垃圾回收机制收回,请使用以下方法;将对象初始化,成功后立刻进入拥有finally子句的一个try区段内。Finally子句会引发清理动作。
60、当你在继承过程中覆写了finalize(),请记得调用super. Finalize()。
但如果你的”直接上一层superclass”是Object,,就不需要这个动作。你应该让super.finalize() 成为被覆写(overridden)之finalize()的最后一个动作而不是第一个动作,用以确保base class的组件在你需要它们的时候仍然可用。
61、当你撰写固定大小的对象容器,请将它们转换为数组–尤其是从某个函数返回此一容器时。
通过这种方式,你可以获得数组的”编译期型别检验”的好处,而且数组接收者可能不需要”先将数组中的对象加以转型”便能加以使用。请注意,容器库的base class (Java. Util. Collection) 具有两个toArray(),能够达到这个目的。
62、在interface(接口)和abstract class(抽象类)之间,优先选择前者。
如果你知道某些东西即将被设计为一个base class,你的第一选择应该是让它成为interface;只有在一定得放进函数或数据成员时,才应该将它改为abstract class. Interface只和”客户端想进行什么动作”有关,class则比较把重心放在实现细节上。
63、在构造函数中只做惟一必要动作:将对象设定至适当状态。
避免调用其他函数(除了final函数),因为这些函数可能会被其他人覆写因而使你在建构过程中得不可预期的结果(请参考第7章以取得更详细的信息)。小型而简单的构造函数比较不可能掷出异常或引发问题。
64、为了避免一个十分令人泄气的经验,请确认你的classpath中的每个名称,都只有一个未被放到packages里头class。否则编译器会先找到另一个名称相同的class,并回报错误消息。如果你怀疑你的classpath出了问题,试着从classpath中的每个起点查找同名的.class文件。最好还是将所有classes都放到packages里头。
65、留意一不小心犯下的重载(overloading)错误。
如果你覆写base class 函数时没有正确拼写其名称,那么便会增加一个新的函数,而不是覆写原有的函数。但是情况完全合法,所以你不会从编译器或执行期系统得到任何错误消息–你的程序代码只是无法正确作用,如此而已。
66、当心过早最佳化。
先让程序动起来,再让它快–但只有在你必须(也就是说只有在程序被证明在某段程序代码上遭遇效能瓶颈)时才这么做。除非你已经使用效能量测工具(profiler)找出瓶颈所在,否则你可能性只是在浪费你的时间。效能调校的”隐藏成本”便是让你的程序代码变得更不可读、更难维持。
67、记住,程序代码被阅读的时间多于它被撰写的时间。
清晰的设计能够制作出去易懂的程序。注解、细节说明、示例都是无价的。这些东西能够帮助你和你的后继者。如果没有其他信息,那么Java 线上文档找出一些有用的信息时,你所遭遇的挫败应该足以让你相信这一点。
Q3: 北大青鸟java培训:程序员如何规范代码的编写方法?
对于每个程序员来说,养成良好的代码编写方法是非常关键的。
在编写代码的过程中,每个人的方法是不同的,那么应该如何规范自己代码编写的方法呢?规范编写代码有哪些要求呢?下面电脑培训带大家认识代码编写的方法。
一、保证代码压缩后不会出错对于大的JavaScript项目,一般来说,包含在项目中的所有JavaScript文件在产品公开时都会被压缩。
为了正确压缩代码,通常需要考虑压缩工具的必要条件,如句子用分号正常结束,中括号结束等。
因此,IT培训发现当编写代码没有按照标准进行时,在发生压缩错误后再次寻找错误是浪费时间的。
二、保证代码能够通过自动格式化功能一般情况下需要使用完善的开发工具进行自动化格式功能,这个功能能够进行换行、缩进和空格等方法的代码编排,并且还可以设置自己喜欢的格式。
别人在阅读你的代码时需要使用IDE进行格式转换,以满足个人的阅读风格。
江苏北大青鸟认为阅读代码能够更加深入的了解代码调用和细节的实现,这是简单的文档不能实现的。
三、使用标准的文档注释这是编写代码中最基本的要求,能够很好的了解代码的提示,并且还可以利用配套的文档工具生产其他格式让别人阅读。
北大青鸟认为编写完整的注释还可以使团队成员更容易阅读您的代码。
通过您的参数描述,团队成员很容易了解您想要传递参与实现细节和编写的方法。
Q4: 北大青鸟java培训:学Java需要注意什么?
Java从入门到精通学习应该怎么做呢?做好哪些事情可以更快的入门Java编程?今天就让小编来帮你梳理一下~ Java编程语言是一种可以撰写跨平台应用软件的面向对象的程序设计语言。
Java编程技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
No.1找一本好的书本教材好的教材,可以让你更快更好的进入Java的世界。
在校学生的话,你们的教材通常都是不错的也可以到职坐标的优才商城选择合适的教材。
No.2学好基本语法,弄清Java的特点 学习Java,说白了,就是学习它的语法、功能、结构等。
然后按照它的语法编写代码。
Java语法是学习的根本。
开始学习时,可能有些难懂。
没关系,这很正常。
多看多问,多实践,慢慢的你就入门了。
No.3没有捷径,一定要多动手实践 学习Java,和学数学一样,在学懂理论后,一定要实践。
学习Java不能搭便车。
有时候,语法和例子很简单,很容易看懂,但到自己动手写的时候,又是另一种感觉。
只有多动手编程,哪怕是简单的小程序,重复实现书上简单的例子,也是在积累和提高。
动手编码离不开编程工具的支持。
No.4学习编程规范,编程中坚持遵守 俗话说,无规矩不成方圆。
编程是一个将思维逻辑变为代码,让计算机来执行的过程。
特别需要规范。
无论是变量、函数命名还是代码格式,都需要一致规范。
这样便于代码的阅读和修改。
代码的规范性,在代码质量中占据着重要的比重。
No.5给代码添加足够的注释说明 代码注释的作用,毫不夸张的说,就像旅游景点的指示牌。
我们在编程时,对自己的想法十分清楚。
但一段时间之后呢,或者让别人来阅读代码呢。
如果注释丰富,读代码就大体可以用读注释来代替了。
注意,注释要对那些有一定难度的语句、过程方法或结构等的注释,非常浅显易懂的就不需要注释啦。
养成对难懂代码注释的习惯吧。
No.6多看别人的代码对同一种功能的实现,可以有很多种编码方式。
多读别人的代码,非常有利用开拓思路,提高编码的灵活性。
甚至经常可以从别人的代码中得到启发,产生灵感,创作出优秀的代码。
No.7代码尽量写的简单,易于理解代码的简单性、正确性是最重要的。
不要为了追求高效率而写出晦涩难懂的代码。
后续阅读和修改代码时,你会为晦涩的代码付出很多代价。
记住,尽量将代码写成初学Java就能读懂的,那么你的代码就十分的优美了。
No.8学习设计模式设计模式就是高手们总结的一些关于编程方法的总结,这对新手来说非常的有用。
学习设计模式,可以提高我们编程的灵活度以及设计的合理性。
不仅Java,其他编程语言,如C#、C++中,设计模式也在大行其道。
所以,你没有理由错过高手们总结的编程精华。
No.9喜欢它,并坚持走下去Java的学习,容易入门,却难以精通。
永远不要因为害怕困难,而减少你对它的兴趣。
每年都有很多人在学习Java,因为它很强大。
如果你能坚持下去,那么你也是强大的。
No.10选择一套体系完善的课程在完善的课程体系中学习非常重要,这有助于你掌握系统的Java编程知识和技能,而且好的课程会帮助你前期打好基础,后期有针对性地使你快速提升,这对Java新手来说十分有效。
比如云和数据的Java大数据企业直通班,不仅有国际名师在线指导,还有牛人大咖全程面授,“六位一体”、“X+12”双重教学模式,打造一流完善的课程体系,可以给你全方位因材施教的教学指导。
关于我们学校简介
回答于 2022-10-28
详情
该链接由问题回答方推荐
官方电话
在线客服
官方服务
官方网站
领学习资料
计算机培训
设计培训
编程培训
Q5: 初学者学习java编程应该要注意什么
学java到底难不难,对于这个问题,我们专门做过一个调查,超过1000名已经在职的java从业者,其中有80%的程序员觉得学java不难,20%的程序员觉得前期有点难,其中对于50%自学的新手认为java很难学,遇到问题没人解答,又或者是答案太多,根本不知道哪个回答是正确的。所以,我们得出结论,能系统学习的,有老师指导的java课程学起来相对容易,而没有人指导,仅仅靠看视频学习的同学来说会无形中增加难度。
首先,java其实不像我们想的那么困难,但是决定要进入这行,前期就得有相应的心理准备,如果想走的远,就需要不断学习提升,特别是在初期,不能怕吃苦,不要老是想着玩游戏,空余时间多看看代码,设计架构,各个环节的功能与用途。
由于每个人对于问题的难易程度都有不同的标准,总是想着放弃的人,也会无形中给自己设置门槛,如果不是计算机专业毕业的新手朋友,准备转行做java时,往往有可能只是看到了工资高,却忽视了到底适不适合自己。所以,我们看问题不能只看到表面的东西,而应该从多方面去考虑,比如下面这6个方面:
1. 学习的过程中,一定要从小实验开始,逐步完成更多的综合性实验,千万不要盲目求大,这样做的结果往往会陷入一个学习的瓶颈。有的初学者在学习Java的初期就直接看一些案例的书,虽然案例没少做,但是还是无法形成自己的编程思路,原因就是没有通过一个系统的实验过程建立起自己的编程思维,这个是问题的关键。
2. 要熟悉一些简单的设计模式和编程原则。另外最好自己写过完整的工程,熟悉eclipse这样的工具。可以给HR展示自己所做的工程,然后通过讨论来将话题放到自己熟悉的部分。
3. 写的程序要格式清晰规范,可读性好,首行要缩进,成对的花括号,除了类的括号以外,最后都要处于同一列。这并不是强制的,每个人的习惯也不同,但是至少要 清晰规范,比如某人,从来就不把成对的花括号放在同一列,而是任由eclipse自动排版,虽然也很规范,但是我每次看她的代码都要把花括号改一改才舒 服,然后她又气哄哄的给改回去。
4. WEB也要熟悉一些。对于三层模式也要很熟悉,表示层、逻辑层和数据持久层。以上都是很基础的东西,稍微了解一下面试问题都不大,元程序(不是源程序)有时候也会问,但是不多,就是处理器层的处理过程,汇编一样关于寄存器和存储器的操作。
5.学习java不能总是把希望寄托于老师的身上,我们要学会多方位思考,举一反三,遇到问题总是第一时间想的是老师能不能帮帮我,最好是这段代码都由老师来代写了更好,其实这种思路会大大降低我们独立解决问题的能力,我更建议的是,大家在遇到问题时,先想办法自己解决,然后把解决方案拿到老师那里,帮你分析,到底是对的还是错的,又或者实在是解决不了,向老师详细的描述你的问题,老师看到了也会为你解答的,而不是一来就是这个代码怎么写,想寻求答案,先学会正确的提问。
6.我们在学习的过程中,应该有经验丰富的导师为自己指导,又或者是有相关工作经验的前辈们来指导自己,不要想着我看看网上的教程,几个月之后就能找到一份好工作,这是不现实的,如果没有好的导师帮你解决问题,相信对于一个新手来说,我们会走很多弯路,同时也会半途而废,浪费了自己的时间和金钱。
最后,Java编程语言的学习过程是一个从难到易的过程,由于Java编程的抽象程度比较高,所以对于很多初学者来说,需要一个理解的过程,但是当掌握了类、对象等基本概念之后,后面的学习就会顺利起来。如果想系统的学习编程的可以来我这看看,肯定对你有帮助的。
希望对您有所帮助!~
java编写代码注意事项的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java写代码用什么软件、java编写代码注意事项的信息别忘了在本站进行查找喔。






