本文目錄一覽:
- 1、如何使用 visual studio code 編譯和調試 java 代碼
- 2、java框架學習方式有哪些?
- 3、怎麼樣使用visual studio code 配置java環境
- 4、如何寫一個自己的Java框架
- 5、用JAVA寫了一個計算機的框架,怎麼加代碼實現基本運算(加減乘除,等於,清零)import java.awt.*;
如何使用 visual studio code 編譯和調試 java 代碼
介紹
Visual Studio Code的宣傳語是:
一個運行於 Mac OS X、Windows和 Linux 之上的,針對於編寫現代 Web 和雲應用的跨平台源代碼編輯器。
按說的,Visual Studio Code特別適合來作為前端開發編輯器。
內置html開發神器emmet(zencoding),對css及其相關編譯型語言Less和Sass都有很好的支持。
當然,最nice的還是寫js代碼了,這也是接下來要著重介紹的功能。
智能提示
因為之前微軟推出了typescript語言,結合tsd文件,用visual studio寫typescript代碼是相當爽的,智能提示的功能非常nb。
這個功能理所應當也被vsc繼承了。
目前主流的前端類庫/框架,包括node.js及其模塊/框架都有相應的tsd文件,可以去DefinitelyTyped上找一下。
在項目中引入對應文件,就可以有智能提示了。
這裡以angular為例,使用步驟如下:
全局安裝tsd,通過tsd安裝.d.ts文件。這樣會在項目下面生成.typings目錄,目錄下面就是下載的.d.ts文件,再寫代碼的時候就會有智能提示了。具體用法參考tsd用法。
npm install -g tsd
tsd query angular –action install
如果不想自己手工引入,也可以在angular變數後面按ctrl+k,會有個燈泡圖片,點擊燈泡圖片就會有對應提示,選擇下載xx.d.ts文件就可以了,編輯器會下載對應文件放在.typings目錄。
過程如下圖:
說完智能提示,再說代碼調試。
調試Node
之前寫過文章介紹過node.js的調試方案(Node.js調試)。從vsc發布後,就一直用寫代碼,也是用來調試node.js代碼。
使用方法也很簡單,步驟如下:
打開要調試的文件,按f5,編輯器會生成一個launch.json
修改launch.json相關內容,主要是name和program欄位,改成和項目對應的
點擊編輯器左側長得像蜘蛛的那個按鈕
點擊左上角DEBUG後面的按鈕,啟動調試
打斷點,盡情調試
過程如下圖:
最後,再贈送彩蛋一個。
Node API 查看
在寫node.js代碼的時候,有時會忘記某個模塊中有哪些方法及其用法,經常要去官網翻一下api文檔。
這裡介紹下怎麼使用vsc來搞定這一問題。
打開vsc控制台(Help Toggle Developer Tools Console)
在控制台寫代碼,查詢模塊方法。
過程如下圖:
vsc是用atom-shell(現在叫electron)寫的,這和node-webkit(現在叫nw.js)一樣,都是把node.js和chrome結合起來的工具,所以可以這麼使用。
不過vsc使用到的node.js模塊並不多,比如引用util和vm等會報錯,用node-webkit就不會這樣。
java框架學習方式有哪些?
1、打好基礎是重中之重
基礎部分可能很枯燥,但是一定要耐心堅持下去。因為打基礎好比是在造輪子造汽車,沒有打好基礎在後面的學習就好比走路,可以說後面遇到的百分之七八十的問題都是基礎沒學好造成的。
2、多看官方文檔多讀源碼
一定要看JDK相關類庫、常用框架各種功能的源碼,去了解其底層實現的原理。總的來說這個也是在打基礎的部分,Java基礎非常紮實才能看懂,在我們學習一個類的源碼時,肯定會衍生出其他各種各樣的問題,供我們來了解和學習,這也就是我們下一步學習的目標和方向。慢慢的,我們就會學習更多的知識,並積累更多的經驗。
3、系統性學習,循序漸進
不要急於求成,每個知識點都要看,並且每個知識點都要勤加練習。有的同學在學習過程中覺得這個知識點簡單,就跳著學習,其實這是個很大的問題,知識點細節必須要了解。我們學習Java需要循序漸進,一步一步來,不能操之過急。
4、遇到問題
遇到不會做的問題,當然不能置之不理。先在網上查,目前網路上針對很多問題都有完美的解決方案,如果網上沒有類似的問題,那可能是你犯了什麼小錯誤。也不要在這個問題上花費太多時間,這需要一定的學習技巧。Java中的知識有很強的相關性,有不懂的地方,可以用其他周邊相關知識再回過頭來理解,這樣既不會耽誤學習進度,又能理解自己不懂的地方
1)jvm有很多種,其實jvm是一個標準,sun做的那個叫hotspot,作者就是後來v8的作者lars bak,其他公司也做過jvm,其中做得比較好的有bea的jrockit,其他的包括ibm的r9,apple的jvm等在內,都做得不行,所以jvm主要是整合淘汰掉這些做得不好的jvm(s),整合成一個統一的openjdk。
2)java是典型的oop語言,其執行效率的優化,最早就是lars bak等人從smalltalk等長期優化的經驗中總結出來並apply到hotspot上去滴,而smalltalk在早期apple機上搞出了那種拖拖拽拽就開發出app的做法,後來vc,delphi之類的其實都是抄襲或者說借鑒apple的smalltalk的做法,jobs說微軟從頭到尾都在抄襲apple是空穴來風,這裡空穴來風跟王垠使用的空穴來風是一個意思,有趣的是,java的gui並沒有繼承這種搞法,反而對這種拖拖拽拽就作出app的做法批判有加,到今天,其實java的gui都還不能真正做到拖拖拽拽就作出來,問題很多,個人建議對於純java的gui開發,還是以寫代碼為主。
3)jee也是一個或者說是一堆標準,知乎上有些人把maven,jenkins都算做jee是不對滴,jee的標準核心是ejb,其實就是一個xml配置化的java文件,這個標準在4的時候,達到了頂峰狀態,幾乎所有的挨踢大廠都主動支持該標準,之後開始走下坡路,支持的廠越來越少。
4)java和javascript的關係比很多人認為的要密切,javascript裡面的java這四個字母可不是白叫的,比如js的版權和商標都控制在oracle手裡,oracle對於js的支持甚至超過其對java的支持,並且喜歡捆綁銷售,比如jvm裡面就有一個js引擎。
5)jvm裡面除了js engine以外還有一個瀏覽器排版引擎webkit,就是apple safari和google chrome用的那個那個。
6)java支持絕大多數腳本語言,你能叫得上名字的腳本語言,幾乎都可以在jvm上執行,比如常見的js,ruby,python,甚至php,lua,只不過除了js以外你需要找到相關的腳本引擎。
7)spring的版權被控制在vmware手裡,其實spring的那一大堆東西,本質上是一個非標準的jee實現,比如在jee裡面用的inject,在spring裡面就是autowire,當然spring曾經深刻滴影響了jee,所以有些東西比如di標準,是spring影響下制定出來的,所以spring的做法會比較特例一點。
8)maven上的jars數量前兩天突破800萬,其他語言的類庫,排名第二的是npm,大概數量是maven的十分之一,也就是幾十萬,不知道現在突破100萬沒有,然後是gem,也就是ruby那個,大概是十幾萬,下來是python的module,大概數量級是幾萬,沒突破十萬。
9)java的標準是由一個叫做jcp的組織制定的,所有標準需要經過jcp的執行委員會通過方可執行,jcp幾乎包括了你所知道的絕大多數知名挨踢公司和組織,比如google,apple,ibm,intel,arm,red hat,twitter等,還有一些教育機構,比如我國的北京大學,阿里最近一次申請jcp執行委員會成員資格,似乎投票不通過,最近一次執行委員會新增兩個成員是arm和jetbrains。
10)微軟也曾經是jcp甚至是java的主要貢獻者,但是利益驅使下,想擴展java,從而破壞java跨平台的特性,所以跟sun鬧翻,其本質原因就是想讓客戶寫的java代碼跟windows綁定,sun堅決不同意,鬧翻,今天回頭看這個結果,只能說:雙輸,sun掛了,微軟的ria也離掛不太遠了,silverlight已經放棄了,比起當年ie自帶有jvm的支持來說,那完全就是兩回事。
11)除了微軟以外,jcp還缺少一個重要組織apache,因為apache跟oracle也鬧翻了,oracle似乎並不在乎開源組織,而更在意商業公司的支持。
12)java曾經有一個內置的資料庫,9之後被剝離。
13)j2me是j2se的子集。
14)vert.x作者tim fox最早在vmware做spring時候看到了node.js,萌生出了製作支持多核的node.x的想法,並在離開vmware後加入red hat將其實現,vmware看到後開始耍無賴,claim node.x後來改叫vert.x的版權,不惜跟red hat打官司,後來各方妥協,將其交給eclipse foundation。
15)oracle在收購bea之前,一開始的目標並不是bea和bea的weblogic,而是jboss,但是jboss表現出了極為有種的一面,在oracle收購成功之前,投入了red hat的懷抱,因為都是開源組織,從此jboss成了red hat的一個子部門,oracle收購jboss失敗之後,轉向bea,庄思浩氣死了,但是沒用,最後還是被惡意收購。
16)sun在玩不下去之前最早嘗試接觸的目標是ibm,ibm嫌太貴,放棄之後,被轉手給了oracle。(Java學習交流QQ群:589809992 我們一起學Java!)
17)vert.x的作者tim fox在離開red hat之前曾經發過twitter抱怨,外人比如我們,猜測是因為red hat內部已經有了一個jboss,所以跟vert.x在應用上有了重疊,所以導致tim fox的出走,但是出走之後,red hat答應對vert.x做持續性的戰略投入,所以vert.x core的幾個developers,其實拿的是red hat的工資,但是vert.x的版權並不在red hat手裡,而在eclipse foundation手裡。
18)vert.x的幾個核心開發人員都是google summer of code的導師,每年年初時候會招收在校大學生搞項目。
19)教育機構相關:scala的作者馬丁是德國人,eth的博導,groovy的主要領導人是法國人,jruby背後是東京大學,jboss的作者是法國大學校x的校友,x就是伽羅瓦考不進去的那所大學,伽羅瓦進不了x,所以改讀巴黎高師,tim fox畢業於帝國理工,主席去的那個,netty作者trustin lee是acm銀牌,現在line工作,畢業於sky裡面的延世大學,kotlin是毛子公司jetbrains的作品,看linkedin,很多人畢業自聖彼得堡大學,spring作者rod johnson是悉尼大學的音樂博士,hibernate作者gavin king是澳洲莫那什大學的數學本科畢業生,james gosling這種cmu和calgory的估計爛大街了,sun是斯坦福大學網路的意思,夾帶兩個私貨,aspectj有一個維護小組在mcgill,hbase跟waterloo關係密切。
20)java早期被人認為慢,跟java堅持不用硬體加速渲染有關,死活就是不肯接入directx和opengl,7之後總算開竅,搞了一個圖形引擎接入了directx/opengl。
21)casssandra是facebook做失敗的項目,被貢獻給了apache之後老樹開花。
22)groovy被貢獻給了apache,現在叫做apache groovy,ceylon被貢獻給了eclipse,現在叫做eclipse ceylon。
23)netflix現在是java shop,之前是用.net的。
先想到這麼多,有空再寫。
怎麼樣使用visual studio code 配置java環境
visual
studio
code僅僅是一個代碼編輯器(相當於一個高級記事本),不是IDE。
要寫java代碼建議使用eclipse
如何寫一個自己的Java框架
可以寫一些能通用的類 ,封裝好 然後可以用maven打包成jar ,這樣就是一個簡單的java框架了。在項目中導入這個jar 就能直接調用你寫的類了。
用JAVA寫了一個計算機的框架,怎麼加代碼實現基本運算(加減乘除,等於,清零)import java.awt.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import javax.swing.*;
public class Counter extends Frame {
// 聲明三個面板的布局
GridLayout gl1, gl2, gl3;
Panel p0, p1, p2, p3;
JTextField tf1;
TextField tf2;
Button b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14,
b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26;
StringBuffer str;// 顯示屏所顯示的字元串
double x, y;// x和y都是運算數
int z;// Z表示單擊了那一個運算符.0表示”+”,1表示”-“,2表示”*”,3表示”/”
static double m;// 記憶的數字
public Counter() {
gl1 = new GridLayout(1, 4, 10, 0);// 實例化三個面板的布局
gl2 = new GridLayout(4, 1, 0, 15);
gl3 = new GridLayout(4, 5, 10, 15);
tf1 = new JTextField(27);// 顯示屏
tf1.setHorizontalAlignment(JTextField.RIGHT);
tf1.setEnabled(false);
tf1.setText(“0”);
tf2 = new TextField(10);// 顯示記憶的索引值
tf2.setEditable(false);
// 實例化所有按鈕、設置其前景色並註冊監聽器
b0 = new Button(“Backspace”);
b0.setForeground(Color.red);
b0.addActionListener(new Bt());
b1 = new Button(“CE”);
b1.setForeground(Color.red);
b1.addActionListener(new Bt());
b2 = new Button(“C”);
b2.setForeground(Color.red);
b2.addActionListener(new Bt());
b3 = new Button(“MC”);
b3.setForeground(Color.red);
b3.addActionListener(new Bt());
b4 = new Button(“MR”);
b4.setForeground(Color.red);
b4.addActionListener(new Bt());
b5 = new Button(“MS”);
b5.setForeground(Color.red);
b5.addActionListener(new Bt());
b6 = new Button(“M+”);
b6.setForeground(Color.red);
b6.addActionListener(new Bt());
b7 = new Button(“7”);
b7.setForeground(Color.blue);
b7.addActionListener(new Bt());
b8 = new Button(“8”);
b8.setForeground(Color.blue);
b8.addActionListener(new Bt());
b9 = new Button(“9”);
b9.setForeground(Color.blue);
b9.addActionListener(new Bt());
b10 = new Button(“/”);
b10.setForeground(Color.red);
b10.addActionListener(new Bt());
b11 = new Button(“sqrt”);
b11.setForeground(Color.blue);
b11.addActionListener(new Bt());
b12 = new Button(“4”);
b12.setForeground(Color.blue);
b12.addActionListener(new Bt());
b13 = new Button(“5”);
b13.setForeground(Color.blue);
b13.addActionListener(new Bt());
b14 = new Button(“6”);
b14.setForeground(Color.blue);
b14.addActionListener(new Bt());
b15 = new Button(“*”);
b15.setForeground(Color.red);
b15.addActionListener(new Bt());
b16 = new Button(“%”);
b16.setForeground(Color.blue);
b16.addActionListener(new Bt());
b17 = new Button(“1”);
b17.setForeground(Color.blue);
b17.addActionListener(new Bt());
b18 = new Button(“2”);
b18.setForeground(Color.blue);
b18.addActionListener(new Bt());
b19 = new Button(“3”);
b19.setForeground(Color.blue);
b19.addActionListener(new Bt());
b20 = new Button(“-“);
b20.setForeground(Color.red);
b20.addActionListener(new Bt());
b21 = new Button(“1/X”);
b21.setForeground(Color.blue);
b21.addActionListener(new Bt());
b22 = new Button(“0”);
b22.setForeground(Color.blue);
b22.addActionListener(new Bt());
b23 = new Button(“+/-“);
b23.setForeground(Color.blue);
b23.addActionListener(new Bt());
b24 = new Button(“.”);
b24.setForeground(Color.blue);
b24.addActionListener(new Bt());
b25 = new Button(“+”);
b25.setForeground(Color.red);
b25.addActionListener(new Bt());
b26 = new Button(“=”);
b26.setForeground(Color.red);
b26.addActionListener(new Bt());
// 實例化四個面板
p0 = new Panel();
p1 = new Panel();
p2 = new Panel();
p3 = new Panel();
// 創建一個空字元串緩衝區
str = new StringBuffer();
// 添加面板p0中的組件和設置其在框架中的位置和大小
p0.add(tf1);
p0.setBounds(10, 25, 300, 40);
// 添加面板p1中的組件和設置其在框架中的位置和大小
p1.setLayout(gl1);
p1.add(tf2);
p1.add(b0);
p1.add(b1);
p1.add(b2);
p1.setBounds(10, 65, 300, 25);
// 添加面板p2中的組件並設置其的框架中的位置和大小
p2.setLayout(gl2);
p2.add(b3);
p2.add(b4);
p2.add(b5);
p2.add(b6);
p2.setBounds(10, 110, 40, 150);
// 添加面板p3中的組件並設置其在框架中的位置和大小
p3.setLayout(gl3);// 設置p3的布局
p3.add(b7);
p3.add(b8);
p3.add(b9);
p3.add(b10);
p3.add(b11);
p3.add(b12);
p3.add(b13);
p3.add(b14);
p3.add(b15);
p3.add(b16);
p3.add(b17);
p3.add(b18);
p3.add(b19);
p3.add(b20);
p3.add(b21);
p3.add(b22);
p3.add(b23);
p3.add(b24);
p3.add(b25);
p3.add(b26);
p3.setBounds(60, 110, 250, 150);
// 設置框架中的布局為空布局並添加4個面板
setLayout(null);
add(p0);
add(p1);
add(p2);
add(p3);
setResizable(false);// 禁止調整框架的大小
// 匿名類關閉窗口
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e1) {
System.exit(0);
}
});
setBackground(Color.lightGray);
setBounds(100, 100, 320, 280);
setVisible(true);
}
// 構造監聽器
class Bt implements ActionListener {
public void actionPerformed(ActionEvent e2)
{
try{
if(e2.getSource()==b1)// 選擇”CE”清零
{
tf1.setText(“0”);// 把顯示屏清零
str.setLength(0);// 清空字元串緩衝區以準備接收新的輸入運算數
}
else if(e2.getSource()==b2)// 選擇”C”清零
{
tf1.setText(“0”);// 把顯示屏清零
str.setLength(0);
}
else if(e2.getSource()==b23)// 單擊”+/-“選擇輸入的運算數是正數還是負數
{
x=Double.parseDouble(tf1.getText().trim());
tf1.setText(“”+(-x));
}
else if(e2.getSource()==b25)// 單擊加號按鈕獲得x的值和z的值並清空y的值
{
x=Double.parseDouble(tf1.getText().trim());
str.setLength(0);// 清空緩衝區以便接收新的另一個運算數
y=0d;
z=0;
}
else if(e2.getSource()==b20)// 單擊減號按鈕獲得x的值和z的值並清空y的值
{
x=Double.parseDouble(tf1.getText().trim());
str.setLength(0);
y=0d;
z=1;
}
else if(e2.getSource()==b15)// 單擊乘號按鈕獲得x的值和z的值並清空y的值
{
x=Double.parseDouble(tf1.getText().trim());
str.setLength(0);
y=0d;
z=2;
}
else if(e2.getSource()==b10)// 單擊除號按鈕獲得x的值和z的值並空y的值
{
x=Double.parseDouble(tf1.getText().trim());
str.setLength(0);
y=0d;
z=3;
}
else if(e2.getSource()==b26)// 單擊等號按鈕輸出計算結果
{
str.setLength(0);
switch(z)
{
case 0 : tf1.setText(“”+(x+y));break;
case 1 : tf1.setText(“”+(x-y));break;
case 2 : tf1.setText(“”+(x*y));break;
case 3 : tf1.setText(“”+(x/y));break;
}
}
else if(e2.getSource()==b24)// 單擊”.”按鈕輸入小數
{
if(tf1.getText().trim().indexOf(‘.’)!=-1)// 判斷字元串中是否已經包含了小數點
{
}
else// 如果沒數點有小
{
if(tf1.getText().trim().equals(“0”))// 如果初時顯示為0
{
str.setLength(0);
tf1.setText((str.append(“0″+e2.getActionCommand())).toString());
}
else if(tf1.getText().trim().equals(“”))// 如果初時顯示為空則不做任何操作
{
}
else
{
tf1.setText(str.append(e2.getActionCommand()).toString());
}
}
y=0d;
}
else if(e2.getSource()==b11)// 求平方根
{
x=Double.parseDouble(tf1.getText().trim());
tf1.setText(“數字格式異常”);
if(x0)
tf1.setText(“負數沒有平方根”);
else
tf1.setText(“”+Math.sqrt(x));
str.setLength(0);
y=0d;
}
else if(e2.getSource()==b16)// 單擊了”%”按鈕
{
x=Double.parseDouble(tf1.getText().trim());
tf1.setText(“”+(0.01*x));
str.setLength(0);
y=0d;
}
else if(e2.getSource()==b21)// 單擊了”1/X”按鈕
{
x=Double.parseDouble(tf1.getText().trim());
if(x==0)
{
tf1.setText(“除數不能為零”);
}
else
{
tf1.setText(“”+(1/x));
}
str.setLength(0);
y=0d;
}
else if(e2.getSource()==b3)// MC為清除內存
{
m=0d;
tf2.setText(“”);
str.setLength(0);
}
else if(e2.getSource()==b4)// MR為重新調用存儲的數據
{
if(tf2.getText().trim()!=””)// 有記憶數字
{
tf1.setText(“”+m);
}
}
else if(e2.getSource()==b5)// MS為存儲顯示的數據
{
m=Double.parseDouble(tf1.getText().trim());
tf2.setText(“M”);
tf1.setText(“0”);
str.setLength(0);
}
else if(e2.getSource()==b6)// M+為將顯示的數字與已經存儲的數據相加要查看新的數字單擊MR
{
m=m+Double.parseDouble(tf1.getText().trim());
}
else// 選擇的是其他的按鈕
{
if(e2.getSource()==b22)// 如果選擇的是”0″這個數字鍵
{
if(tf1.getText().trim().equals(“0”))// 如果顯示屏顯示的為零不做操作
{
}
else
{
tf1.setText(str.append(e2.getActionCommand()).toString());
y=Double.parseDouble(tf1.getText().trim());
}
}
else if(e2.getSource()==b0)// 選擇的是「BackSpace」按鈕
{
if(!tf1.getText().trim().equals(“0”))// 如果顯示屏顯示的不是零
{
if(str.length()!=1)
{
tf1.setText(str.delete(str.length()-1,str.length()).toString());// 可能拋出字元串越界異常
}
else
{
tf1.setText(“0”);
str.setLength(0);
}
}
y=Double.parseDouble(tf1.getText().trim());
}
else// 其他的數字鍵
{
tf1.setText(str.append(e2.getActionCommand()).toString());
y=Double.parseDouble(tf1.getText().trim());
}
}
}
catch(NumberFormatException e){
tf1.setText(“數字格式異常”);
}
catch(StringIndexOutOfBoundsException e){
tf1.setText(“字元串索引越界”);
}
} }
public static void main(String args[]) {
new Counter();
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/237254.html