標識符的命名規則需要注意哪幾點?
定義
就是給類,接口,方法,變量等起名字的字符序列
組成規則
- 英文大小寫字母
- 數字
- $和_
注意事項
- 不能以數字開頭
- 不能是java中的關鍵字
- 區分大小寫
常見的命名規則(見名知意)
A:包全部小寫
單級包:小寫
- 舉例:liuyi,com
多級包:小寫,並用.隔開
- 舉例:cn.itcast,com.baidu
B:類或者接口
一個單詞:首字母大寫
- 舉例:Student,Demo
多個單詞:每個單詞首字母大寫
- 舉例:HelloWorld,StudentName
C:方法或者變量
一個單詞:首字母小寫
- 舉例:name,main
多個單詞:從第二個單詞開始,每個單詞首字母大寫
- 舉例:studentAge,showAllNames()
D:常量
全部大寫
一個單詞:大寫
- 舉例:PI
多個單詞:大寫,並用_隔開
- 舉例:STUDENT_MAX_AGE
基本數據類型有哪幾類?包含String嗎?
Java的數據類型分兩種:
1.基本類型:int,byte,float,double,char
2. 對象類型(類): Integer,Byte,Float,Double,Char,String,其它一切java提供的,或者你自己創建的類。
其中Integer又叫 int的包裝類。而Byte和Float也類似,一般包裝類的名字首寫是數值名的大寫開頭。
String類你可以理解成 char[]數組去想就明白了。因為數組是一個類,所以String也就是一個類了。它不是基本數據類型。
或者你還可以這樣想, java分為
1。數據;
2。類對象
兩種類型,數據是運算的基本單元,這些運算一般類似+ - * % 等數學運算,而類對象的運算是必須你定義的。或者系統有幫你定義的。這些運算一般都是一些函數如set和get方法。
什么叫包裝類?
在java中有時候的運算必須是兩個類對象之間進行的,不充許對象與數字之間進行運算。所以需要有一個對象,這個對象把數字進行了一下包裝,這樣這個對象就可以和另一個對象進行運算了。
比如我們也可以定義一個類:
class Integer{
int i=0;
public Integer(int i){
this.i=i;
}
}
這樣這個Integer就是一個包裝類,他包裝了一個整數值,然后可以在里面寫一些運算符重載的方法使它支持某些運算。這個時候可以賦值:
Integer it=new Integer(10);
現在變量it就是一個對象,不是一個數字。
每種基本數據類型都定義一個變量。
//這里偷懶了,變量名盡量不要這么定義,值得注意的就是float類型后要加后綴
private
byte
bb =
1
;
private
short
s =
2
;
private
int
i =
1
;
private
long
l =
2
;
private
float
f =
0
.5f;
private
double
d =
0.05
;
private
char
c =
'a'
;
private
boolean
b =
false
;
寫出基本數據類型自動轉化的流程圖。
整型默認的是什么類型,浮點型(實數型)默認的是什么類型?
在基本JAVA類型中,如果不明確指定,整數型的默認是int類型,帶小數的默認是double類型
對於包名,類名接口名,變量名和函數名,常量名我們習慣如何格式來命名?
Java包的名字都是由小寫單詞組成。但是由於Java面向對象編程的特性,每一名Java程序員都可以編寫屬於自己的Java包,為了保障每個Java包命名的唯一性,在最新的Java編程規范中,要求程序員在自己定義的包的名稱之前加上唯一的前綴。由於互聯網上的域名稱是不會重復的,所以程序員一般采用自己在互聯網上的域名稱作為自己程序包的唯一前綴。
例如: net.frontfree.javagroup
類的名字必須由大寫字母開頭而單詞中的其他字母均為小寫;如果類名稱由多個單詞組成,則每個單詞的首字母均應為大寫例如TestPage;如果類名稱中包含單詞縮寫,則這個所寫詞的每個字母均應大寫,如:XMLExample,還有一點命名技巧就是由於類是設計用來代表對象的,所以在命名類時應盡量選擇名詞。
例如: Circle
interface RasterDelegate;
interface Storing;
方法的名字的第一個單詞應以小寫字母作為開頭,后面的單詞則用大寫字母開頭。
例如: sendMessge
變量(Variables) 除了變量名外,所有實例,包括類,類常量,均采用大小寫混合的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫。變量名不應以下划線或美元符號開頭,盡管這在語法上是允許的。
變量名應簡短且富於描述。變量名的選用應該易於記憶,即,能夠指出其用途。盡量避免單個字符的變量名,除非是一次性的臨時變量。臨時變量通常被取名為i,j,k,m和n,它們一般用於整型;c,d,e,它們一般用於字符型。 char c;
int i;
float myWidth;
實例變量(Instance Variables) 大小寫規則和變量名相似,除了前面需要一個下划線 int _employeeId;
String _name;
Customer _customer;
常量的名字應該都使用大寫字母,並且指出該常量完整含義。如果一個常量名稱由多個單詞組成,則應該用下划線來分割這些單詞。
例如: MAX_VALUE
定義一個變量需要注意什么?
/*
* 定義變量的注意事項:
* 1)定義一個變量,變量不能重復定義,否則報錯
* 2)定義變量,變量的作用域的范圍,在當前的這個方法中有效的
* 3)在同一行上是可以定義多個變量,但是不建議
* 4)定義變量,不能以數字開頭
* */
public class DataTypeDemo2 {
public static void main(String[] args) {
//定義變量
int a = 10 ;
//重復定義
// int a = 20 ;//錯誤
// int m = 10,n = 20 ,z = 30 ;//在同一行上可以定義多個變量
int m = 10 ;
int n = 20 ;
int z = 30 ;
//不能以數字開頭
// int 1y = 20 ;//錯誤
}
/*public static void add(){
//類的成員方法
}*/
}
強制類型轉化可能出現的問題
讓我意識到這個問題是做了一道求標准差的題目,本來題目要求精度不高,答案卻總是相差一些。和室友進行比較,發現大致思路一樣,並不是很麻煩要用高精度算法求解的。
先上代碼:
#include <stdio.h> #include <math.h> int main (void) { int num,sum,i; int a[100]; double pro,sum1; sum = sum1 = 0; //定義並初始化變量 scanf ("%d",&num); for (i=0; i<num; i++) { scanf ("%d",&a[i]); sum = (double)sum + a[i]; //求和 14行 } ave = (double)sum / num; //求平均數 16行 for (i=0; i<num; i++) { sum1 = sum1 + pow (pro - a[i],2); //求方差 } printf ("%f\n",sqrt (sum1 / num)); //求標准差並輸出 return 0; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
上面的代碼是可以輸出正確答案的,一開始我不是用double來把sum給強制類型轉換的,我是用1.0*sum來轉換的。其實這兩種方法的結果是一樣。
現在有個問題:
因為第14行已經對sum進行強制類型轉換,那么是不是第16行的類型轉換可以省略了,反正ave已經定義為double型了
答案是:錯誤!
第14行對sum進行的強制類型轉換只對右邊的sum生效,后邊得出的值為浮點型,但是把這個浮點型數值賦值給左邊的整型sum,則后面的小數部分會丟失。所以第16行的double不能省!
但是這也是有巧合存在,因為第14行運算的輸入的數都為整型,所以小數部分丟不丟失無所謂,更嚴謹一些應該把sum定義為浮點型。
(同樣把整型數賦值給浮點型數,也只是在整型數后面補0而已)
為抵抗洪水,戰士連續作戰89小時,編程計算共多少天零多少小時?
今天是周二,100天以后是周幾?
考查運算符的優先級
寫出輸出的結果.
class Demo{
public static void main(String[] args){
int x=0,y=1;
if(++x==y-- & x++==1||--y==0)
System.out.println("x="+x+",y="+y); //x = 2,y = 0;
else
System.out.println("y="+y+",x="+x);
}
}
插入代碼,實現n和m值的交換
//方式一:
int n = 5,m = 13;
//int temp = n;
//n = m;
//m = temp;
System.out.println("n="+n+",m="+m);
//方式二:
//n = n + m;
//m = n - m;
//n = n - m;
System.out.println("n="+n+",m="+m);
//方式三:
n = n ^ m;
m = n ^ m ;
n = n ^ m;
System.out.println("n="+n+",m="+m);
如何手動實現整型數值60的二進制到十六進制的轉換
//方式一:自動實現
String str1 = Integer.toBinaryString(60);
String str2 = Integer.toHexString(60);
//方式二:手動實現
int i1 = 60;
int i2 = i1&15;
String j = (i2 > 9)? (char)(i2-10 + 'A')+"" : i2+"";
int temp = i1 >>> 4;
i2 = temp & 15;
String k = (i2 > 9)? (char)(i2-10 + 'A')+"" : i2+"";
System.out.println(k+""+j);
根據運算符的功能,我們把運算符分成哪幾類?
運算符按照其要求的操作數數目來分,可以有單目運算符、雙目運算符和三目運算符,它們分別對應於1個、2個、3個操作數。運算符按其功能來分,有算術運算符、賦值運算符、關系運算符、邏輯運算符、位運算符和其他運算符。
算術
單目:+(取正)-(取負) ++(自增1) - -(自減1)
雙目:+ - * / %(取余)
三目:a>b?true:false 說明:當a大於b的時候,為true(也就是冒號之前的值),否則為false;這整個運算符包括一個關系運算符(可以是“>”"<""!="等等),一個“?”,一個“:”,冒號前后需要有兩個表達式或者是值或者是對象。
關系
都是雙目運算符
等於符號:==,不等於符號:!= ,大於符號:>, 小於符號:<,大於等於符號:>= ,小於等於符號:<= 。
位與邏輯
位運算符 與(&)、非(~)、或(|)、異或(^)
&:雙目運算符,運算時均把運算數轉換為二進制再做比較,規則:當相同的位上均為1時結果為1,否則結 果為0.如:1010&1101,轉為二進制:10001001101&1111110010比較結果為:1000000轉為十進制: 64所以1010&1101=64;
| :當兩邊操作數的位有一邊為1時,結果為1,否則為0。如1100|1010=1110
~:0變1,1變0
^:兩邊的位不同時,結果為1,否則為0.如1100^1010=0110
邏輯運算符
與(&&)、非(!)、或(||)
賦值
= += -= *= /= %= &= ^= |= <<= >>=
instanceof
該運算符是雙目運算符,左面的操作元是一個對象,右面是一個類或接口。當左面的對象是右面的類(或右邊類的子孫類)創建的對象、或者是右邊接口的實現類(或實現類的子孫類)的對象時,該運算符運算結果是true,否則是false。
小明要到美國旅游,可是那里的溫度是以華氏度為單位記錄的。它需要一個程序將華氏溫度(80度)轉換為攝氏度,並以華氏度和攝氏度為單位分別顯示該溫度。
提示:攝氏度與羋氏度的轉換公式為:攝氏度 = 5/9.0*(華氏度-32)
練習前++,后++,三元運算符
寫出輸出結果:
class Demo{
public static void main(String[] args){
int a=3,b=8;
int c=(a>b)?a++:b++;
System.out.println("a="+a+"\tb="+b+"\tc="+c); //
int d=(a>b)?++a:++b;
System.out.println("a="+a+"\tb="+b+"\td="+d); //
int e=(a<b)?a++:b++;
System.out.println("a="+a+"\tb="+b+"\te="+e); //
int f=(a<b)?++a:++b;
System.out.println("a="+a+"\tb="+b+"\tf="+f); //
}
}
----------------------------------------------------
比較 + 與 +=
short s1 = 1; s1 = s1 + 1;有什么錯?
short s1 = 1; s1 += 1;有什么錯
答:short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換類型)
short s1 = 1; s1 += 1;(可以正確編譯)
Java有沒有goto
答:java中的保留字,現在沒有在java中使用
用最有效率的方法算出2乘以8等於幾
答:2 << 3
char型變量中能不能存貯一個中文漢字?為什么?
答:是能夠定義成為一個中文的,因為java中以unicode編碼,一個char占16個字節,
所以放一個中文是沒問題的
定義float f=3.4;是否正確?
答:不正確。精度不准確,應該用強制類型轉換,如下所示:float f=(float)3.4
String是最基本的數據類型嗎
答:基本數據類型包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間,
我們應該用StringBuffer類