Shape.java接口代碼
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司、米東網(wǎng)絡(luò)推廣、小程序開發(fā)、米東網(wǎng)絡(luò)營銷、米東企業(yè)策劃、米東品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供米東建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:aaarwkj.com
public interface Shape {
public static final double PI = 3.14d;
public double area();
}
Circle.java圓類代碼
public class Circle implements Shape {
private double radius;
public Circle(double radius) {
? this.radius = radius;
}
@Override
public double area() {
? return PI * this.radius * this.radius;
}
public double perimeter() {
? return 2 * PI * this.radius;
}
}
Cylinder.java圓柱體類代碼
public class Cylinder extends Circle {
private double height;
public Cylinder(double radius, double height) {
? super(radius);
? this.height = height;
}
public double area() {
? return 2 * super.area() + super.perimeter() * this.height;
}
public double volume() {
? return super.area() * this.height;
}
}
X5_3_6.java主類代碼
public class X5_3_6 {
public static void main(String[] args) {
? Circle cir1 = new Circle(5);
? System.out.println("圓的面積為:" + cir1.area());
? System.out.println("圓的周長為:" + cir1.perimeter());
? Cylinder cy1 = new Cylinder(10, 15);
? System.out.println("圓柱體的表面積為:" + cy1.area());
? System.out.println("圓柱體的體積為:" + cy1.volume());
}
}
上面是我寫的代碼,下圖是執(zhí)行結(jié)果,麻煩看一下,是否可以。
package threadgroup;
class ThreadDemo3 extends Thread {
private String name;
private int delay;
public ThreadDemo3(String sname, int i_delay) {
name = sname;
delay = i_delay;
}
public void run() {
try {
sleep(delay);
} catch (InterruptedException e) {
}
System.out.println("多線程測試!\n" + name + "\n" + delay);
}
}
public class testMyThread {
public static void main(String[] args) {
ThreadDemo3 th1,th2,th3;
th1 = new ThreadDemo3("線程1", (int) (Math.random() * 900));
th2 = new ThreadDemo3("線程2", (int) (Math.random() * 900));
th3 = new ThreadDemo3("線程3", (int) (Math.random() * 900));
th1.start();
th2.start();
th3.start();
}
}
package threadgroup;
public class threadDemo {
public static void main(String[] args) {
Thread t = Thread.currentThread();
t.setName("你好嗎?");
System.out.println("正在進(jìn)行的Thread是:" + t);
try {
for (int i = 0; i 5; i++) {
System.out.println("我不叫穆繼超" + i);
Thread.sleep(3000);
}
} catch (Exception e) {
// TODO: handle exception
System.out.println("Thread has wrong" + e.getMessage());
}
}
}
package threadgroup;
public class threadDemo2 implements Runnable {
public threadDemo2() {
Thread t1 = Thread.currentThread();
t1.setName("第一個(gè)主進(jìn)程");
System.out.println("正在運(yùn)行" + t1);
Thread t2 = new Thread(this, "");
System.out.println("在創(chuàng)建一個(gè)進(jìn)程");
t2.start();
try {
System.out.println("使他進(jìn)入第一個(gè)睡眠狀態(tài)");
Thread.sleep(2000);
} catch (InterruptedException e) {
System.out.println("Thread has wrong" + e.getMessage());
}
System.out.println("退出第一個(gè)進(jìn)程");
}
public void run() {
try {
for (int i = 0; i 5; i++) {
System.out.println("進(jìn)程" + i);
Thread.sleep(3000);
}
} catch (InterruptedException e) {
// TODO: handle exception
System.out.println("Thread has wrong" + e.getMessage());
}
System.out.println("退出第二個(gè)進(jìn)程");
}
public static void main(String[] args) {
new threadDemo2();
}
}
如何編寫高質(zhì)量代碼,從而提升系統(tǒng)性能。想必是很多程序員都非常注意的地方,最近總結(jié)了一些要點(diǎn),特此記錄在案。 所謂代碼高可讀性和高可維護(hù)性,其實(shí)就是應(yīng)該有著規(guī)范的Java程序設(shè)計(jì)風(fēng)格,在開發(fā)程序過程中,從近期目標(biāo)看是應(yīng)該著眼于功能實(shí)現(xiàn),但是只能解一時(shí)之渴,而不思長遠(yuǎn)之計(jì),確不可取,一個(gè)雜亂無序的代碼讓人看后有一種不解其意,心緒煩亂的感覺。所以,作為一名合格的程序員,一定要確定一個(gè)觀點(diǎn)就是你編寫出來的代碼不只是給你一個(gè)人看的,還是給別人看的,所以在開發(fā)過程中文件注釋頭,java源文件編排格式,方法體的具體業(yè)務(wù)含義的注釋都是必須的。 如程序注釋就分為塊注釋與行注釋 。例如塊注釋為
/**
* @param
@return
*/
行注釋
/** **/或者 //
再者就是方法的命名也需要多加斟酌,一個(gè)業(yè)務(wù)方法,如果取最能體現(xiàn)體現(xiàn)該業(yè)務(wù)的名字,這樣讀者幾乎不需要看代碼便可以知道該方法具體用途。 高質(zhì)量的代碼其實(shí)很多時(shí)候都在一些小細(xì)節(jié)中體現(xiàn),對于每個(gè)程序員來說一個(gè)for循環(huán)都會(huì)寫,可是卻有很多人沒有能在代碼中體現(xiàn)出高效性來,在這里我用簡單的一個(gè)例子來說明:一個(gè)ArrayList需要遍歷。 一般人會(huì)寫成for(int i=0;ilist.size();i++) 這有問題嗎?沒有問題,能夠完成程序員的意圖的功能。
可是它高效嗎?你有注意到這點(diǎn)嗎?其實(shí)問題就出現(xiàn)在list.size()方法,這個(gè)方法是計(jì)算一個(gè)list的大小,本身它不會(huì)存在任何問題,可是將它放在了一個(gè)for()循環(huán)中的話,就很有問題了,因?yàn)槿绻粋€(gè)N次的for循環(huán),這個(gè)方法就需要被執(zhí)行N次,這樣的代碼就造成計(jì)算機(jī)花很多的時(shí)間去做沒有意義的事情,而本來這個(gè)list.size()方法只需要計(jì)算一次的就可以了,所以我們把計(jì)算list大小的方法放在for循環(huán)外面去定義的話,效率就可以得到提高
如: int size = list.size();
for(int i=0;isize;i++)
關(guān)于For循環(huán)還有一個(gè)要注意的地方,就是在for循環(huán)里面去New一個(gè)新對象。如:
for(int i=0;i10;i++){
A a = new A();
}
是不是怎么看都不會(huì)有問題,是的在語法上?;蛘呤菆?zhí)行業(yè)務(wù)處理邏輯的時(shí)候,它都是沒有任何問題的,可是這是從語言級別去看待問題,沒有深入到它的實(shí)現(xiàn)機(jī)制上去看待問題。
在介紹這個(gè)問題的之前我想先簡單說下關(guān)于java內(nèi)存的機(jī)制:java是如何在內(nèi)存中保存對象,我們回到A a=new A()在內(nèi)存中是怎么分配這個(gè)問題來,
首先在棧中開辟一段空間存放引用a,然后在堆中開辟一段空間存放新建的A對象,同時(shí)引用a指向堆中新建得A對象,a所指代的對象地址為A在堆中地址。根據(jù)javaGC機(jī)制,只有對象已經(jīng)沒有引用指向它的時(shí)候,才有可能被GC給回收,所以基于這種機(jī)制的話,上述的一個(gè)For循環(huán)就會(huì)存在很大的效率問題了,如果循環(huán)有1000次,在內(nèi)存中棧會(huì)有1000個(gè)引用,而堆中也會(huì)有1000個(gè)新生成的對象,同時(shí)1000個(gè)引用會(huì)相應(yīng)指向1000個(gè)新生成的對象,即使這個(gè)for循環(huán)結(jié)束,也不會(huì)有任何改變。但是實(shí)際上1000個(gè)引用的生成完全是沒有必要的,如果有著編寫高性能代碼的想法的話:像這樣的for循環(huán)完全可以這樣寫:
A a = null;
for(int i=0;i1000;i++){
a = new A();
...
}
這樣的代碼在內(nèi)存中便只會(huì)在棧中生成一個(gè)指向,每當(dāng)一個(gè)for循環(huán)結(jié)束后,這個(gè)指向會(huì)指向下一個(gè)新生成的對象,前面生成的對象就會(huì)失去指向,這樣GC就有可能更加快速的回收這些已經(jīng)失去功能的對象。 在java中其實(shí)new 一個(gè)對象是非常耗費(fèi)時(shí)間的,特別是重量級對象,所以每次在new 對象的時(shí)候一定需要考慮清楚是不是非的生成一個(gè)對象才能完成我的業(yè)務(wù)需求呢?總之能夠根據(jù)實(shí)際情況,然后舉一反三的話,我相信大家編寫出來的代碼就會(huì)更加高效了。
其次是針對同步的慎重考慮,因?yàn)槲覀円坏┯昧藄ynchronized這個(gè)關(guān)鍵字后,就很可能喪失了并行的功效,所以在開發(fā)的過程中需要注意到線程是不是會(huì)對共有的資源進(jìn)行處理,然后在慎重選擇Synchronized 關(guān)鍵字,其實(shí)大家可以考慮用ThreadLocal這個(gè)類,它的優(yōu)點(diǎn)是既保證同步的情況下仍然能保證并行,缺點(diǎn)是會(huì)占用更多的空間去換取換取時(shí)間。
最后,便是在j2ee開發(fā)過程中對數(shù)據(jù)庫操作的優(yōu)化,在這里我只針對代碼級別的優(yōu)化,關(guān)于數(shù)據(jù)庫級別的我不涉及。大家編寫SQL的時(shí)候會(huì)不會(huì)注意到一些原則,在這里我將羅列一些需要注意的要點(diǎn)。(總結(jié)肯定不會(huì)很全,我希望如果有大蝦能給予更多的經(jīng)驗(yàn)指導(dǎo),在下將會(huì)感激萬分。)
(1)在搜索子句的列名邊要避免函數(shù)、算術(shù)操作符和其它的表達(dá)式,除非建立基于函數(shù)的索引
(2)使用復(fù)合索引的第一個(gè)列名
(3)SELECT子句中避免使用 ‘*’
(4)如果可能盡量多用"Commit"
(5)避免在索引列上使用IS null和Is not null
(6)用Union -all替換Union(如果可能的話)
(7)Oracel 采用自下而上的順序解析WHERE子句,可以過濾掉最大數(shù)量記錄的條件寫在WHERE子句的末尾
(8)between謂詞可以轉(zhuǎn)化為=and=子句,比如:price between 10 and 20
可以轉(zhuǎn)化為 price= 10 and =20
(9)like子句中匹配值的第一個(gè)字符是常量,也可以進(jìn)行轉(zhuǎn)換, 例如:
like “sm%”可以轉(zhuǎn)換成 =“sm” and “sn”
(10)在子查詢,exists和in要比not exists和not in執(zhí)行得快,因?yàn)閷τ趀xists和in,優(yōu)化器只要找到一條記錄就可以返回TRUE,而對于not exists和not in則必須檢查所有的值。
以上10條總結(jié)如果在編寫sql的時(shí)候能注意到的話,將會(huì)在一定程度上提高java跟數(shù)據(jù)交互的性能。
那么除了在SQL上下功夫來提高性能之外,編寫合適的事務(wù)處理也將帶來一些性能提高。我們都知道事務(wù)具有:原子性,隔離性,一致性,持久性,所以在使用事務(wù)的時(shí)候肯定是犧牲并發(fā)性能為代價(jià)的。特別是一個(gè)涉及update的事務(wù)處理的時(shí)候,數(shù)據(jù)庫會(huì)在表上加上排他鎖,而一個(gè)數(shù)據(jù)資源只要被一個(gè)事務(wù)放置了排他鎖,其他事務(wù)將不能放上排他鎖,一定要一直等到事務(wù)結(jié)束后才釋放。所以在這種情況下的,并發(fā)性就會(huì)被抹殺掉了。我們不能改變這種加鎖的機(jī)制,但是我們可以用另外一種方式來達(dá)到一定程度的性能提升,那就是根據(jù)實(shí)際情況將一個(gè)大事務(wù)分解成小事務(wù)來處理。簡而言之就是減低事務(wù)放置排他鎖和釋放排他鎖的時(shí)間間隔,這樣可以讓其他的事務(wù)能更快的訪問到數(shù)據(jù)資源。而關(guān)于大事務(wù)分解一定要小心使用,如果使用不恰當(dāng)?shù)脑捄芸赡軙?huì)產(chǎn)生意想不到的數(shù)據(jù)不一致錯(cuò)誤。
網(wǎng)站欄目:java高級代碼,Java高級編程
當(dāng)前鏈接:http://aaarwkj.com/article42/dssgphc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、企業(yè)網(wǎng)站制作、做網(wǎng)站、小程序開發(fā)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)