程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Linux下Java開辟情況搭建和第一個HelloWorld

Linux下Java開辟情況搭建和第一個HelloWorld

編輯:關於JAVA

Linux下Java開辟情況搭建和第一個HelloWorld。本站提示廣大學習愛好者:(Linux下Java開辟情況搭建和第一個HelloWorld)文章只能為提供參考,不一定能成為您想要的結果。以下是Linux下Java開辟情況搭建和第一個HelloWorld正文


想在Linux停止JAVA開辟嗎?情況若何搭建,第一個HelloWorld若何完成,上面立時貢獻:
1情況搭建
    1.1 Java JDK 的裝置
    Java JDK 是java編譯和運轉的需要情況,所以起首必需裝置這一軟件包,辦法以下:
    1)下載JDK緊縮包,留意看好版本是x86照樣x64,windows的照樣
          linux,要弄清晰,我下的是jdk-7u13-linux-i586.tar.gz;
    2)解壓緊縮包,並將解壓後的目次放到/usr/lib/jvm/上面,敕令以下(?表現你的緊縮包地點目次):
          ~$:tar -zxvf  ?/jdk-7u13-linux-i586.tar.gz
          ~$:sudo mkdir /usr/lib/jvm
          ~$:sudo cp ?/jdk1.7.0_13 /usr/lib/jvm
    3)添加JAVA_HOME,將/usr/lib/jvm/jdk1.7.0_13樹立一個對應的情況變量JAVA_HOME:
         在~/.profile中追加上面一行:
         export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_13
         在~/.profile追加則情況變量只對以後用戶有用,假如在/etc/profile中追加,則對一切用戶有用,讀者可
         酌情選擇。
         更新設置裝備擺設:
         ~$:source ~/.profile
    4)添加CLASSPATH,將/usr/lib/jvm/jdk1.7.0_13/lib樹立一個對應的情況變量,以下:
         在~/.profile中追加上面一行:
         export CLASSPATH=$JAVA_HOME/lib
         也可在/etc/profile中添加,說明如(3)
         更新設置裝備擺設:
         ~$:source ~/.profile
    5)檢查JDK版本,確認裝置勝利:
         ~$:java -version
         假如勝利,則顯示以下:
         java version "1.7.0_13"
         Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
         Java HotSpot(TM) Server VM (build 23.7-b01, mixed mode)

2 小試牛刀--第一個HelloWorld
    到這一步,我們固然裝置了完全的JDK,然則沒有裝置任何集成開辟情況,就比如windows裡沒有裝置VC6
    一樣,不外經由過程手動樹立和編譯源文件,我們可以先跑一次HelloWorld,看看JDK裝置准確與否,開端....
    1) 編纂源文件HelloWorld.java,內容以下
      

 public class HelloWorld 
    {
      public static void main(String[] args)
      {
         System.out.println("Hello,World!");
         return;
       }
    }

     2) 編譯源文件,以下:
      ~$:javac HelloWorld.java
      編譯後發生HelloWorld.class文件,這就是編譯後生成的所謂java字節碼.
     3) 履行java字節碼,以下:
     ~$:java HelloWorld
     留意,固然java字節碼文件是.class後綴的,然則履行時不須要,這點要留意,履行後,輸入以下:
     Hello,World!

3 應用IDE走向圖形化--裝置IntelliJ IDE
    現在固然eclipse橫行,然則IntelliJ確切一款不錯的輕量級IDE,就以他為例吧,泡面哥愛好小而精的器械。
    1)下載IntelliJ IDE
         http://www.jetbrains.com/idea/download/
         本例中下載的是community版
    2)解壓('?'表現ideaIC-12.1.6.tar.gz地點目次),並放置到/opt目次下(也能夠是其他合適的目次)
         ~$:tar -zxvf  ?/ideaIC-12.1.6.tar.gz
         ~$:sudo cp ?/idea-IC-129.1359  /opt/
    3)將/opt/idea-IC-129.1359/bin 添加到情況變量中
         可在~/.profile或許/etc/profile添加,只是實用規模的分歧, 本例修正/etc/profile,追加以下內容:
         export PATH=$PATH:/opt/idea-IC-129.1359/bin
         更新設置裝備擺設:
         ~$:source /etc/profile
    4) 運轉IDE
        直接在終端輸出idea.sh便可啟動IntelliJ開辟情況
        ~$:idea.sh
    OK,剩下該怎樣做,我想年夜家都曉得了,簡略進修下IntelliJ的應用辦法,如若何新建工程,添加文件,工程
    屬性的設置,編譯,調試,普通的IDE都如許。

以上就是跟年夜家分享的關於Linux下Java開辟情況搭建和第一個HelloWorld,願望可以真實的贊助到年夜家。

">
//參數很好懂得 後面滑動肇端點 中央滑動間隔 最初一個是 突變時光
//並且我們看到startScroll 這個辦法就是設置了一下參數 並沒有甚麼滑動的代碼在
//回到後面的demo能看到我們平日挪用完這個辦法今後 都邑立時挪用invalidate()辦法
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
mMode = SCROLL_MODE;
mFinished = false;
mDuration = duration;
mStartTime = AnimationUtils.currentAnimationTimeMillis();
mStartX = startX;
mStartY = startY;
mFinalX = startX + dx;
mFinalY = startY + dy;
mDeltaX = dx;
mDeltaY = dy;
mDurationReciprocal = .f / (float) mDuration;
}
//我們都曉得invalidate 會觸發view的 draw辦法 
//我們跟出來看 會發明draw辦法裡 會挪用上面的代碼:
//也就是說會挪用 computeScroll辦法 而view自己這個辦法
//是空的所以會留給我們本身完成
int sx = ;
int sy = ;
if (!drawingWithRenderNode) {
computeScroll();
sx = mScrollX;
sy = mScrollY;
}
//然後回到我們的customtextview 可以看到我們完成的 computeScroll辦法以下:
//你看在這個辦法裡 我們挪用了scrollTo辦法 來完成滑動,滑動停止今後再次觸發view的重繪
//然後又會再次觸發computeScroll 完成一個輪回。
public void computeScroll() {
if (mScroller.computeScrollOffset())
{
scrollTo(mScroller.getCurrX(),mScroller.getCurrY());
//這個辦法不要忘卻挪用。
postInvalidate();
}
super.computeScroll();
} 
//前往true就代表滑動還沒停止 false就是停止了
//其實這個辦法 就跟屬性動畫裡的插值器一樣 你在應用startScroll辦法的時刻 會傳一個事宜的值,
//這個辦法就是依據這個事宜的值來盤算你每次scrollx和scrolly的值
public boolean computeScrollOffset() {
if (mFinished) {
return false;
}
int timePassed = (int)(AnimationUtils.currentAnimationTimeMillis() - mStartTime);
if (timePassed < mDuration) {
switch (mMode) {
case SCROLL_MODE:
final float x = mInterpolator.getInterpolation(timePassed * mDurationReciprocal);
mCurrX = mStartX + Math.round(x * mDeltaX);
mCurrY = mStartY + Math.round(x * mDeltaY);
break;
case FLING_MODE:
final float t = (float) timePassed / mDuration;
final int index = (int) (NB_SAMPLES * t);
float distanceCoef = .f;
float velocityCoef = .f;
if (index < NB_SAMPLES) {
final float t_inf = (float) index / NB_SAMPLES;
final float t_sup = (float) (index + ) / NB_SAMPLES;
final float d_inf = SPLINE_POSITION[index];
final float d_sup = SPLINE_POSITION[index + ];
velocityCoef = (d_sup - d_inf) / (t_sup - t_inf);
distanceCoef = d_inf + (t - t_inf) * velocityCoef;
}
mCurrVelocity = velocityCoef * mDistance / mDuration * .f;
mCurrX = mStartX + Math.round(distanceCoef * (mFinalX - mStartX));
// Pin to mMinX <= mCurrX <= mMaxX
mCurrX = Math.min(mCurrX, mMaxX);
mCurrX = Math.max(mCurrX, mMinX);
mCurrY = mStartY + Math.round(distanceCoef * (mFinalY - mStartY));
// Pin to mMinY <= mCurrY <= mMaxY
mCurrY = Math.min(mCurrY, mMaxY);
mCurrY = Math.max(mCurrY, mMinY);
if (mCurrX == mFinalX && mCurrY == mFinalY) {
mFinished = true;
}
break;
}
}
else {
mCurrX = mFinalX;
mCurrY = mFinalY;
mFinished = true;
}
return true;
}

8.view的滑動突變後果總共有幾種辦法?

答:三種,第一種是scroller 也是應用最多的。成績7裡有說明。還有一種就是動畫,動畫我就不多說了,不屬於本文領域。最初一種也是我們常常應用的就是用handler ,每隔一個時光距離 來更新view的狀況。

代碼不寫了很簡略。 自行領會。

9.view的事宜傳遞機制 若何用偽代碼來表現?

答:

/**
* 關於一個root viewgroup來講,假如接收了一個點擊事宜,那末起首會挪用他的dispatchTouchEvent辦法。
* 假如這個viewgroup的onInterceptTouchEvent 前往true,那就代表要攔阻這個事宜。接上去這個事宜就
* 給viewgroup本身處置了,從而viewgroup的onTouchEvent辦法就會被挪用。假如假如這個viewgroup的onInterceptTouchEvent
* 前往false就代表我不攔阻這個事宜,然後就把這個事宜傳遞給本身的子元素,然後子元素的dispatchTouchEvent
* 就會被挪用,就是如許一個輪回直到 事宜被處置。
*
*/
public boolean dispatchTouchEvent(MotionEvent ev)
{
boolean consume=false;
if (onInterceptTouchEvent(ev)) {
consume=onTouchEvent(ev);
}else
{
consume=child.dispatchTouchEvent(ev);
}
return consume;
} 

10.view的onTouchEvent,OnClickListerner和OnTouchListener的onTouch辦法 三者優先級若何?

答:onTouchListener優先級最高,假如onTouch辦法前往 false ,那onTouchEvent就被挪用了,前往true 就不會被挪用。至於onClick 優先級最低。

11.點擊事宜的傳遞次序若何?

答:Activity-Window-View。從上到下順次傳遞,固然了假如你最低的誰人view onTouchEvent前往false 那就解釋他不想處置 那就再往上拋,都不處置的話

終究就照樣讓Activity本身處置了。舉個例子,pm下發一個義務給leader,leader本身不做 給架構師a,小a也不做 給法式員b,b假如做了那就停止了這個義務。

b假如發明本身弄不定,那就找a做,a如果也弄不定 就會赓續向上提議要求,終究能夠照樣pm做。

//activity的dispatchTouchEvent 辦法 一開端就是交給window行止理的
//win的superDispatchTouchEvent 前往true 那就直接停止了 這個函數了。前往false就意味
//這事宜沒人處置,終究照樣給activity的onTouchEvent 本身處置 這裡的getwindow 其實就是phonewindow
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
onUserInteraction();
}
if (getWindow().superDispatchTouchEvent(ev)) {
return true;
}
return onTouchEvent(ev);
}
//來看phonewindow的這個函數 直接把事宜傳遞給了mDecor
@Override
public boolean superDispatchTouchEvent(MotionEvent event) {
return mDecor.superDispatchTouchEvent(event);
}
//devorview就是 我們的rootview了 就是誰人framelayout 我們的setContentView外面傳遞的誰人layout
//就是這個decorview的 子view了
@Override
public final View getDecorView() {
if (mDecor == null) {
installDecor();
}
return mDecor;
}

12.事宜分為幾個步調?

答:down事宜開首,up事宜開頭,中央能夠會稀有目不定的move事宜。

13.ViewGroup若何對點擊事宜分發?

答:

viewgroup就是在actionMasked == MotionEvent.ACTION_DOWN 和 mFirstTouchTarget != null 這兩種情形來斷定能否會進入攔阻事宜的流程看代碼可以曉得 假如是ACTION_DOWN事宜 那就確定進入 能否要攔阻事宜的流程假如不是ACTION_DOWN事宜 那就要看mFirstTouchTarget != null 這個前提能否成立這個處所有點繞然則也好懂得,其實就是 關於一個事宜序列來講 down是事宜的開首 所以確定進入了這個事宜能否攔阻的流程 也就是if 括號內。
mFirstTouchTarget實際上是一個單鏈表構造他指向的是 勝利處置事宜的子元素。
也就是說 假如有子元素勝利處置了 事宜,那這個值就不為NULL。反過去說只需viewgroup攔阻了事宜,mFirstTouchTarget就不為NULL,所以括號內就不會履行,也就正面解釋了一個結論:

某個view 一旦決議攔阻事宜,那末這個事宜所屬的事宜序列 都只能由他來履行。而且onInterceptTouchEvent 這個辦法不會被挪用了

final boolean intercepted;
if (actionMasked == MotionEvent.ACTION_DOWN
|| mFirstTouchTarget != null) {
final boolean disallowIntercept = (mGroupFlags & FLAG_DISALLOW_INTERCEPT) != ;
if (!disallowIntercept) {
intercepted = onInterceptTouchEvent(ev);
ev.setAction(action); // restore action in case it was changed
} else {
intercepted = false;
}
} else {
// There are no touch targets and this action is not an initial down
// so this view group continues to intercept touches.
intercepted = true;
} 

14.:果某個view 處置事宜的時刻 沒有消費down事宜 會有甚麼成果?

答:假設一個view,在down事宜來的時刻 他的onTouchEvent前往false, 那末這個down事宜 所屬的事宜序列 就是他後續的move 和up 都不會給他處置了,全體都給他的父view處置。

15.假如view 不用耗move或許up事宜 會有甚麼成果?

答:那這個事宜所屬的事宜序列就消逝了,父view也不會處置的,終究都給activity 行止理了。

16.ViewGroup 默許攔阻事宜嗎?

答:默許不攔阻任何事宜,onInterceptTouchEvent前往的是false。

17.一旦有事宜傳遞給view,view的onTouchEvent必定會被挪用嗎?

答:是的,由於view 自己沒有onInterceptTouchEvent辦法,所以只需事宜離開view這裡 就必定會走onTouchEvent辦法。

而且默許都是消費失落,前往true的。除非這個view是弗成點擊的,所謂弗成點擊就是clickable和longgclikable同時為fale

Button的clickable就是true 然則textview是false。

18.enable能否影響view的onTouchEvent前往值?

答:不影響,只需clickable和longClickable有一個為真,那末onTouchEvent就前往true。

19.requestDisallowInterceptTouchEvent 可以在子元素中攪擾父元素的事宜分發嗎?假如可以,是全體都可以攪擾嗎?

答:確定可以,然則down事宜攪擾不了。

20.dispatchTouchEvent每次都邑被挪用嗎?

答:是的,onInterceptTouchEvent則不會。

21.滑動抵觸成績若何處理 思緒是甚麼?

答。要處理滑動抵觸 其實最重要的就是有一個焦點思惟。你究竟想在一個事宜序列中,讓哪一個view 來呼應你的滑動?好比 從上到下滑,是哪一個view來處置這個事宜,從左到右呢?

用營業需求 來想明確今後 剩下的 其實就很好做了。焦點的辦法 就是2個 內部攔阻也就是父親攔阻,別的就是外部攔阻,也就是子view攔阻法。 學會這2種 根本上一切的滑動抵觸都是這2種的變種,並且焦點代碼思惟都一樣。

內部攔阻法:思緒就是重寫父容器的onInterceptTouchEvent便可。子元素普通不須要管。可以很輕易懂得,由於這和android本身的事宜處置機制 邏輯是如出一轍的

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
boolean intercepted = false;
int x = (int) ev.getX();
int y = (int) ev.getY();
switch (ev.getAction()) {
//down事宜確定不克不及攔阻 攔阻了前面的就收不到了
case MotionEvent.ACTION_DOWN:
intercepted = false;
break;
case MotionEvent.ACTION_MOVE:
if (你的營業需求) {
//假如肯定攔阻了 就去本身的onTouchEvent裡 處置攔阻以後的操作和後果 便可了
intercepted = true;
} else {
intercepted = false;
}
break;
case MotionEvent.ACTION_UP:
//up事宜 我們普通都是前往false的 普通父容器都不會攔阻他。 由於up是事宜的最初一步。這裡前往true也沒啥意義
//獨一的意義就是由於 父元素 up被攔阻。招致子元素 收不到up事宜,那子元素 就確定沒有onClick事宜觸發了,這裡的
//小細節 要想明確
intercepted = false;
break;
default:
break;
}
return intercepted;
} 

外部攔阻法:外部攔阻法略微龐雜一點,就是事宜到來的時刻,父容器不論,讓子元素本身來決議能否處置。假如消費了 就最好,沒消費 天然就轉給父容器處置了。

子元素代碼:

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
if (假如父容器須要這個點擊事宜) {
getParent().requestDisallowInterceptTouchEvent(false);
}//不然的話 就交給本身自己view的onTouchEvent主動處置了
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return super.dispatchTouchEvent(event);
} 

父親容器代碼也要修正一下,其實就是包管父親別攔阻down:

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
return false;
}
return true;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved