接下來會同步開啓android的學習。並且寫一系列的學習筆記。本博文先來介紹一下Android Studio的安裝以及java的基本語法和android的概述。(在本博文對應的資源中,給出了JDK以及android studio的安裝包)
目錄
安裝Android Studio
以前曾經學過一段時間的android 開發,當時採用的是eclipse、而現在由於google已經推出了其集成開發工具android studio,停止了對Eclipse的支持,爲此大部分都採用android studio了~
安裝JDK
安裝Android Studio前先安裝JDK
下載與安裝
下面來安裝JDK,進入網站如下圖所示 (https://www.oracle.com/downloads/)
如上圖所示,Java SE Development Kit 11.0.6是LTS,所以我們選11,安裝Windows版本
只有Windows 64位。需要勾選接受。同時需要創建賬戶
下載成功後就可以安裝了。
一般情況下建議路徑不要有中文,最好也不要有空格(因爲可能出現亂碼);最好別安裝到C盤。但是由於本人的只有一個固態硬盤就直接安裝了哈~
很快就安裝完了
java程序就在裏面的bin
直接點擊會發現,一閃而過~打開cmd
輸出一系列信息(java安裝成功了)
但是直接輸入java是不行的
環境變量配置
安裝好的jdk需要進行環境變量的配置。
我使用的是Win10的系統,“此電腦/計算機”右鍵 “屬性”,進入“高級系統設置”
然後進入“環境變量”的設置,新建所需的 環境變量(記得要在“系統變量”裏面創建)
點擊新建
輸入,然後確定
然後修改path
點擊編輯文本將“%JAVA_HOME%\bin”加入Path的變量值中。然後重啓CMD窗口後輸入java
完成路徑匹配
Android Studio
首先搜索android studio,第一個就是了
下載後開始安裝
安裝完後,接下來進行一系列的設置,選擇第二個
不發送。然後要進行setup
並沒有代理(proxy)
所以只能回到上一個界面點cancel了
採取標準安裝(發現更改不了位置,換爲custom)
習慣選擇黑色風格
下方安裝路徑如果需要更改的話。一定要改爲沒有標點符號,(空格之類千萬不要有,另外,中文不能出現!!!!!本文所有路徑,不能出現中文!!!!新手按照我的去安裝就好,就不需要費心改變了)
這裏顯示已經安裝好了???
然後cancel
如下圖所示,應該是SDK沒有配置好
點擊上圖中的Start a new Android Studio project新建一個工程,進入下面的界面,
會發現沒有配置好Android SDK。由於上面的安裝包是不包含SDK的
直接去http://tools.android-studio.org/index.php/sdk下載SDK
再把SDK安裝到C:UsersusernameAppDataLocalAndroidSdk
這個版本的SDK太低了。。。。
cnmd,做了各種嘗試,然後重啓一下電腦,終於可以了。。。。。
修改一下文件名
糾結了半天。。。。點擊finish就可以下載了
終於可以了!!!!!
配置Android studio及hello world
選擇一個empty activity
在這裏的name其實就是application name,應用程序的名稱。此應用安裝到手機之後會在手機上顯示該名稱。Android系統就是通過包名來區分不同應用程序的,因此包名一定要有唯一性。Android studio會根據應用名稱和公司域(就是example.com)名來自動幫我們生成合適的包名。location就是項目代碼存放的位置了。
Minimum SDK就是項目最低的兼容版本。
如下圖所示
點擊下方的build會發現在一直進行一系列的配置
等了比較久,終於加載好了
在程序運行前。還必須要有一個運行的載體,可以是一部Android手機,也可以是Android模擬器。這裏我們暫時先使用模擬器來運行程序。添加模擬器,第一次運行需要先創建一個新的模擬器
可以看到目前我們的模擬器列表中還是空的。點擊Create Virtual Device按鈕就可以立刻開始創建了,如下所示
繼續選擇圖片素材
需要下載1個G左右!
前面改爲選擇則可正常下載了
完成!
下面一步改名無關緊要直接完成即可!
此時前面那個選擇虛擬設備畫面已經有了一個設備,進行勾選!
配置一下
可以看到,現在模擬器列表中已經存在一個創建好的模擬器設備了,點擊Actions欄目中最左邊的三角形按鈕即可啓動模擬器。模擬器會像手機一樣,有一個開機過程,啓動完成之後的界面,如圖下圖所示。
上圖中左邊的錘子按鈕是用來編譯項目的,中間的下拉列表是用來選擇運行哪一個項目的,通常app就是當前的主項目,右邊的三角形按鈕是用來運行項目的。
然後在MainActivity的同級目錄,新建一個hello.java,然後做一個簡單的實現,
package com.example.demo;
public class hello {
public static void main (String[] args) {
System.out.println("Hello, world!");
}
}
使用android studio自帶的Terminal進入該hello.java所在目錄,執行,
javac hello.java
然後運行則有
目錄介紹
HelloWorld項目運行成功!並且你會發現,模擬器上已經安裝上demo這個應用了。打開啓動器列表,如圖所示。
然後會發現一個問題就是,這裏的helloworld是Android studio生成的,並不是我們上面敲的代碼hhhh。再次回到目錄下
任何一個新建的項目都會默認使用Android模式的項目結構,但這並不是項目真實的目錄結構,而是被Android Studio轉換過的。這種項目結構簡潔明瞭,適合進行快速開發,但是對於新手來說可能並不易於理解。點擊圖中的Android區域可以切換項目結構模式,如圖所示。
.gradle和.idea
這兩個目錄下放置的都是Android Studio自動生成的一些文件,我們無須關心,也不要去手動編輯。
gradle
這個目錄下包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前將gradle下載好,而是會自動根據本地的緩存情況決定是否需要聯網下載gradle。Android Studio默認沒有啓用gradle wrapper的方式,如果需要打開,可以點擊Android Studio導航欄→File→Settings→Build, Execution, Deployment→Gradle,進行配置更改。
.gitignore
這個文件是用來將指定的目錄或文件排除在版本控制之外的。
build.gradle
這是項目全局的gradle構建腳本,通常這個文件中的內容是不需要修改的。
gradle.properties
這個文件是全局的gradle配置文件,在這裏配置的屬性將會影響到項目中所有的gradle編譯腳本。
gradlew和gradlew.bat
這兩個文件是用來在命令行界面中執行gradle命令的,其中gradlew是在Linux或Mac系統中使用的,gradlew.bat是在Windows系統中使用的。
demo.iml
iml文件是所有IntelliJ IDEA項目都會自動生成的一個文件(Android Studio是基於IntelliJ IDEA開發的),用於標識這是一個IntelliJ IDEA項目,我們不需要修改這個文件中的任何內容。
local.properties
這個文件用於指定本機中的Android SDK路徑,通常內容都是自動生成的,我們並不需要修改。除非你本機中的Android SDK位置發生了變化,那麼就將這個文件中的路徑改成新的位置即可。
settings.gradle
這個文件用於指定項目中所有引入的模塊。由於HelloWorld項目中就只有一個app模塊,因此該文件中也就只引入了app這一個模塊。通常情況下模塊的引入都是自動完成的,需要我們手動去修改這個文件的場景可能比較少。
app
項目中的代碼、資源等內容幾乎都是放置在這個目錄下的,除了app目錄之外,大多數的文件和目錄都是自動生成的,我們並不需要進行修改。我們後面的開發工作也基本都是在這個目錄下進行的。
build
這個目錄你也不需要過多關心,它主要包含了一些在編譯時自動生成的文件。
libs
如果你的項目中使用到了第三方jar包,就需要把這些jar包都放在libs目錄下,放在這個目錄下的jar包都會被自動添加到構建路徑裏去。
androidTest
此處是用來編寫Android Test測試用例的,可以對項目進行一些自動化測試。
java
毫無疑問,java目錄是放置我們所有Java代碼的地方,展開該目錄,你將看到我們剛纔創建的HelloWorldActivity文件就在裏面。
res
這個目錄下的內容就有點多了。簡單點說,就是你在項目中使用到的所有圖片、佈局、字符串等資源都要存放在這個目錄下。當然這個目錄下還有很多子目錄,圖片放在drawable目錄下,佈局放在layout目錄下,字符串放在values目錄下,所以你不用擔心會把整個res目錄弄得亂糟糟的。
AndroidManifest.xml
這是你整個Android項目的配置文件,你在程序中定義的所有四大組件都需要在這個文件裏註冊,另外還可以在這個文件中給應用程序添加權限聲明。由於這個文件以後會經常用到,我們用到的時候再做詳細說明。
test
此處是用來編寫Unit Test測試用例的,是對項目進行自動化測試的另一種方式。
.gitignore
這個文件用於將app模塊內的指定的目錄或文件排除在版本控制之外,作用和外層的.gitignore文件類似。
app.iml
IntelliJ IDEA項目自動生成的文件,我們不需要關心或修改這個文件中的內容。
build.gradle
這是app模塊的gradle構建腳本,這個文件中會指定很多項目構建相關的配置。
proguard-rules.pro
這個文件用於指定項目代碼的混淆規則,當代碼開發完成後打成安裝包文件,如果不希望代碼被別人破解,通常會將代碼進行混淆,從而讓破解者難以閱讀。
分析helloworld項目的運行
AndroidManifest.xml文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.demo">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
其中的代碼塊:表示對MainActivity這個活動進行註冊。沒有在在AndroidManifest.xml裏註冊的活動是不能使用的。
其中intent-filter 裏的兩行代碼非常重要,<action android:name="android.intent.action.MAIN" /> 和
<category android:name="android.intent.category.LAUNCHER" /> 表示MainActivity是這個項目的主活動,在手機上點擊應用圖標,首先啓動的就是這個活動。
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
那麼MainActivity又是有什麼用的呢?活動是Android應用程序的門面,凡是在應用中你看得到的東西,都是放在活動中的。因此你在上圖中看到的界面,其實就是MainActivity這個活動。
MainActivity文件
打開文件,代碼如下
package com.example.demo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
首先我們可以看到,MainActivity是繼承自AppCompatActivity的,這是一種向下兼容的Activity,可以將Activity在各個系統版本中增加的特性和功能最低兼容到Android 2.1系統。
Activity是Android系統提供的一個活動基類,我們項目中所有的活動都必須繼承它或者它的子類才能擁有活動的特性(AppCompatActivity 是Activity的子類)。然後可以看到MainActivity中有一個onCreate() 方法,這個方法是一個活動被創建時必定要執行的方法,其中只有兩行代碼,並且沒有Hello World!的字樣。那麼之前app中顯示的Hello World!是在哪裏定義的呢?
Hello World!在哪裏定義?
其實Android程序的設計講究邏輯和視圖分離,因此是不推薦在活動中直接編寫界面的,更加通用的一種做法是,在佈局文件中編寫界面,然後在活動中引入進來。可以看到,在onCreate() 方法的第二行調用了setContentView() 方法,就是這個方法給當前的活動引入了一個activity_main佈局,那Hello World!一定就是在這裏定義的了!我們快打開這個文件看一看。
在res、layout中有:
直接點開是這樣的:
切換到text視圖
代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
終於找到hello world的定義了
項目中的資源
回到Android模式
任何一個新建的項目都會默認使用Android模式的項目結構,但這並不是項目真實的目錄結構,而是被Android Studio轉換過的。這種項目結構簡潔明瞭,適合進行快速開發,。點擊下圖當中的Android區域可以切換項目結構模式。
好,繼續在project模式下。展開res目錄有
- 所有以drawable開頭的文件夾都是用來放圖片的
- 所有以mipmap開頭的文件夾都是用來放應用圖標的
- 所有以values開頭的文件夾都是用來放字符串、樣式、顏色等配置的
- layout文件夾是用來放佈局文件的
之所以有這麼多mipmap開頭的文件夾,其實主要是爲了讓程序能夠更好地兼容各種設備。在製作程序的時候最好能夠給同一張圖片提供幾個不同分辨率的版本,分別放在這些文件夾下,然後當程序運行的時候,會自動根據當前運行設備分辨率的高低選擇加載哪個文件夾下的圖片。
打開res/values/strings.xml文件,內容如下所示:
<resources>
<string name="app_name">demo</string>
</resources>
可以看到,這裏定義了一個應用程序名的字符串,我們有以下兩種方式來引用它。
- 在代碼中通過R.string.app_name 可以獲得該字符串的引用。
- 在XML中通過@string/app_name 可以獲得該字符串的引用。
修改應用程序的名稱及圖標
打開AndroidManifest.xml文件,找到如下代碼:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher" //圖標
android:label="@string/app_name" //應用的名稱
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
。。。
。。。
</application>
對應的圖標可以找
build.gradle文件
Android Studio是採用Gradle來構建項目的。Gradle是一個非常先進的項目構建工具,它使用了一種基於Groovy的領域特定語言(DSL)來聲明項目設置,摒棄了傳統基於XML(如Ant和Maven)的各種煩瑣配置。項目中有兩個build.gradle文件,一個是在最外層目錄下的,一個是在app目錄下的。這兩個文件對構建Android Studio項目都起到了至關重要的作用。
最外層build.gradle文件
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()//是一個代碼託管倉庫,很多Android開源項目都會選擇將代碼託管到jcenter上,聲明瞭這行配置之後,我們就可以在項目中輕鬆引用任何jcenter上的開源項目了。
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.2'
//使用classpath 聲明瞭一個Gradle插件。
//如果想要用gradle來構建Android項目需要聲明這個插件,最後的就是版本號啦
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()//是一個代碼託管倉庫,很多Android開源項目都會選擇將代碼託管到jcenter上,聲明瞭這行配置之後,我們就可以在項目中輕鬆引用任何jcenter上的開源項目了。
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
這些代碼都是自動生成的,雖然語法結構看上去可能有點難以理解,但是如果我們忽略語法結構,只看最關鍵的部分,其實還是很好懂的。(看註釋)
app目錄下的build.gradle文件
apply plugin: 'com.android.application'
//第一行應用了一個插件。一般可以選擇:
//1、com.android.application 表示這是一個應用程序模塊
//2、com.android.library 表示這是一個庫模塊
//兩者的最大區別是:一個是可以直接運行的;一個只能作爲代碼庫依賴於別的應用程序來運行
//下面是一個Android包,用於配置項目構建的各種屬性
android {
compileSdkVersion 29 //用於指定項目的編譯版本
buildToolsVersion "29.0.3" //用於指定項目構建工具的版本
defaultConfig { //對項目的更多細節進行配置
applicationId "com.example.demo"//用於指定項目的包名
minSdkVersion 16 //用於指定項目最低兼容的Android系統版本
targetSdkVersion 29 //指定的值表示你在該目標版本上已經做過了充分的測試,系統將會爲你的應用程序啓用一些最新的功能和特性。
versionCode 1 //指定項目的版本號
versionName "1.0" //指定項目的版本名
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes { //用於指定生成安裝文件的相關配置
release { //用於指定生成正式版安裝文件的配置
minifyEnabled false ////////用於指定是否對項目的代碼進行混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' //指定混淆時使用的規則文件
}
//除了release包還有debug包(可以忽略不寫)。用於指定生成測試版安裝文件的配置
}
}
dependencies { //指定當前項目所有的依賴關係.一般有三種依賴:本地依賴、庫依賴和遠程依賴
//本地依賴可以對本地的Jar包或目錄添加依賴關係
//庫依賴可以對項目中的庫模塊添加依賴關係
//遠程依賴則可以對jcenter庫上的開源項目添加依賴關係
implementation fileTree(dir: 'libs', include: ['*.jar'])
//一個本地依賴聲明,它表示將libs目錄下所有.jar後綴的文件都添加到項目的構建路徑當中
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
Java編程的簡易瞭解
安卓開發是基於java的。但是感覺跟CPP類似,所以本人僅僅打算簡單的瞭解一下基本的語法就儘快的開始android開發了
Java是由Sun Microsystems公司於1995年5月推出的Java面向對象程序設計語言和Java平臺的總稱。由James Gosling和同事們共同研發,並在1995年正式推出。
Java分爲三個體系:
- JavaSE(J2SE)(Java2 Platform Standard Edition,java平臺標準版)
- JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平臺企業版)
- JavaME(J2ME)(Java 2 Platform Micro Edition,java平臺微型版)。
2005年6月,JavaOne大會召開,SUN公司公開Java SE 6。此時,Java的各種版本已經更名以取消其中的數字"2":J2EE更名爲Java EE, J2SE更名爲Java SE,J2ME更名爲Java ME。
Java 虛擬機——JVM
Java Virtual Machine,JVM是運行所有java程序的假想計算機,是java程序的運行環境,是java最具吸引力的特性之一,我們所編寫的java代碼都運行在jvm之上。通過JVM來實現跨平臺。編寫的程序運行在jvm上,而jvm運行在操作系統上。
JRE和JDK
- JRE——java run environment。是java程序運行時的環境,包含JVM和運行時所需要的核心類庫
- JDK——java development kit,是java程序開發的工具包,包含JRE和開發人員使用的工具
那麼,如果我們只是想運行一個java程序,只需要JRE就可以了,但是如果我們希望開發java程序就需要JDK
三者的關係如下所示
上面已經介紹過JDK的安裝
HelloWorld
java開發的步驟
將文件命名如下
編寫hello world
public class HelloWorld {
public static void main (String[] args) {
System.out.println("Hello, Java!");
}
}
然後運行javac
javac HelloWorld.java
java HelloWorld
javac 後面跟着的是java文件的文件名,例如 HelloWorld.java。 該命令用於將 java 源文件編譯爲 class 字節碼文件,如: javac HelloWorld.java。運行javac命令後,如果成功編譯沒有錯誤的話,會出現一個 HelloWorld.class 的文件。
java 後面跟着的是java文件中的類名,例如 HelloWorld 就是類名,如: java HelloWorld。注意:java命令後面不要加.class。
然而,卻報錯了n次
C:\>javac HelloWorld.java
HelloWorld.java:1: 錯誤: 寫入HelloWorld時出錯: C:\HelloWorld.class
public class HelloWorld {
^
1 個錯誤
有可能你的文件名和類名不一致,也有可能你的這個文件中還有其他的類,這些類前面都要public造成的錯誤
解決方法是:把文件放到一個新建文件夾下,然後進行編譯
然後就ok了
然後運行
Java基本語法
一個 Java 程序可以認爲是一系列對象的集合,而這些對象通過調用彼此的方法來協同工作。下面簡要介紹下類、對象、方法和實例變量的概念。
- 對象:對象是類的一個實例,有狀態和行爲。例如,一條狗是一個對象,它的狀態有:顏色、名字、品種;行爲有:搖尾巴、叫、喫等。
- 類:類是一個模板,它描述一類對象的行爲和狀態。
- 方法:方法就是行爲,一個類可以有很多方法。邏輯運算、數據修改以及所有動作都是在方法中完成的。
- 實例變量:每個對象都有獨特的實例變量,對象的狀態由這些實例變量的值決定。
基於android studio的java開發
作爲一個IDE,android studio同樣的可以當做普通的IDE一樣調試java的代碼
通過新建一個module(注意新建的是模塊不是工程),選擇java library
然後就可以跟普通IDE一樣調試java了。點擊下面來運行java文件
結果如下
package com.example.lib;//注意包與工程的區別。
//同一個工程下,多個包,本實例新建了一個包專門用於java學習,而不是android開發
//選中包名,右鍵,run當前的包則可以運行本文件
//註釋與取消均爲:“Ctrl + /”
//public class 後面跟隨本java文件名
//public class後面代表定義一個類的名稱,類是java當中所有源代碼的基本組織單位
public class LearnJAVA { //JAVA所有的源代碼都必須寫在類之內
public static void main (String[] args) {//代表類的方法,代表程序執行的起點。main函數
System.out.println("Hello, JAVA!");//打印輸出語句
}
}
方法的定義與調用
其實就是類似於cpp中函數的定義
修飾符 返回值類型 方法名(參數類型 參數名){
...
方法體
...
return 返回值;
}
- 修飾符:修飾符,這是可選的,告訴編譯器如何調用該方法。定義了該方法的訪問類型。
- 返回值類型 :方法可能會返回值。returnValueType 是方法返回值的數據類型。有些方法執行所需的操作,但沒有返回值。在這種情況下,returnValueType 是關鍵字void。
- 方法名:是方法的實際名稱。方法名和參數表共同構成方法簽名。
- 參數類型:參數像是一個佔位符。當方法被調用時,傳遞值給參數。這個值被稱爲實參或變量。參數列表是指方法的參數類型、順序和參數的個數。參數是可選的,方法可以不包含任何參數。
- 方法體:方法體包含具體的語句,定義該方法的功能。
public static void NAME(){
方法體;
}
需要在同一個類裏面定義不同的方法。
注意事項
- 方法的定義的先後順序無所謂
- 方法的第一不能產生嵌套包含關係
- 要執行方法需要調用方法。(程序只會在main中執行),直接通過方法名稱()來調用方法;
- 與cpp不同的是:不需要聲明方法(哪怕方法定義在main的後面)
對應的局部與全局的代碼設計理念。
條件語句
if(布爾表達式){
//如果布爾表達式的值爲true
}else{
//如果布爾表達式的值爲false
}
(大部分的語句跟cpp還是差不多的)
if(布爾表達式 1){
//如果布爾表達式 1的值爲true執行代碼
}else if(布爾表達式 2){
//如果布爾表達式 2的值爲true執行代碼
}else if(布爾表達式 3){
//如果布爾表達式 3的值爲true執行代碼
}else {
//如果以上布爾表達式都不爲true執行代碼
}
循環語句
while
while( 布爾表達式 ) {
//循環內容
}
對於 while 語句而言,如果不滿足條件,則不能進入循環。但有時候我們需要即使不滿足條件,也至少執行一次。do…while 循環和 while 循環相似,不同的是,do…while 循環至少會執行一次。
do {
//代碼語句
}while(布爾表達式);
for循環
for(初始化; 布爾表達式; 更新) {
//代碼語句
}
Java 增強 for 循環
for(聲明語句 : 表達式)
{
//代碼句子
}
聲明語句:聲明新的局部變量,該變量的類型必須和數組元素的類型匹配。其作用域限定在循環語句塊,其值與此時數組元素的值相等。
表達式:表達式是要訪問的數組名,或者是返回值爲數組的方法。
public class Test {
public static void main(String args[]){
int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers ){
System.out.print( x );
System.out.print(",");
}
System.out.print("\n");
String [] names ={"James", "Larry", "Tom", "Lacy"};
for( String name : names ) {
System.out.print( name );
System.out.print(",");
}
}
}
其實也就是for循環的簡化而已,按正常的for循環也可以
Break(跳出當前循環語句塊)
break 主要用在循環語句或者 switch 語句中,用來跳出整個語句塊。
break 跳出最裏層的循環,並且繼續執行該循環下面的語句。
continue 關鍵字(結束當前循環進入下一次循環)
continue 適用於任何循環控制結構中。作用是讓程序立刻跳轉到下一次循環的迭代。
在 for 循環中,continue 語句使程序立即跳轉到更新語句。
在 while 或者 do…while 循環中,程序立即跳轉到布爾表達式的判斷語句。
switch case語句
switch(expression){
case value :
//語句
break; //可選
case value :
//語句
break; //可選
//你可以有任意數量的case語句
default : //可選
//語句
}
switch case 語句有如下規則:
-
switch 語句中的變量類型可以是: byte、short、int 或者 char。從 Java SE 7 開始,switch 支持字符串 String 類型了,同時 case 標籤必須爲字符串常量或字面量。
-
switch 語句可以擁有多個 case 語句。每個 case 後面跟一個要比較的值和冒號。
-
case 語句中的值的數據類型必須與變量的數據類型相同,而且只能是常量或者字面常量。
-
當變量的值與 case 語句的值相等時,那麼 case 語句之後的語句開始執行,直到 break 語句出現纔會跳出 switch 語句。
-
當遇到 break 語句時,switch 語句終止。程序跳轉到 switch 語句後面的語句執行。case 語句不必須要包含 break 語句。如果沒有 break 語句出現,程序會繼續執行下一條 case 語句,直到出現 break 語句。
-
switch 語句可以包含一個 default 分支,該分支一般是 switch 語句的最後一個分支(可以在任何位置,但建議在最後一個)。default 在沒有 case 語句的值和變量值相等的時候執行。default 分支不需要 break 語句。
switch case 執行時,一定會先進行匹配,匹配成功返回當前 case 的值,再根據是否有 break,判斷是否繼續輸出,或是跳出判斷。
Java 修飾符
訪問控制修飾符。Java中,可以使用訪問控制符來保護對類、變量、方法和構造方法的訪問。Java 支持 4 種不同的訪問權限(這個CPP也是一樣的)。
-
default (即默認,什麼也不寫): 在同一包內可見,不使用任何修飾符。使用對象:類、接口、變量、方法。
-
private : 在同一類內可見。使用對象:變量、方法。 注意:不能修飾類(外部類)
-
public : 對所有類可見。使用對象:類、接口、變量、方法
-
protected : 對同一包內的類和所有子類可見。使用對象:變量、方法。 注意:不能修飾類(外部類)
非訪問修飾符。爲了實現一些其他的功能,Java 也提供了許多非訪問修飾符。
- static 修飾符,用來修飾類方法和類變量。
- final 修飾符,用來修飾類、方法和變量,final 修飾的類不能夠被繼承,修飾的方法不能被繼承類重新定義,修飾的變量爲常量,是不可修改的。
- abstract 修飾符,用來創建抽象類和抽象方法。
- synchronized 和 volatile 修飾符,主要用於線程的編程。
static 修飾符
-
靜態變量:
static 關鍵字用來聲明獨立於對象的靜態變量,無論一個類實例化多少對象,它的靜態變量只有一份拷貝。 靜態變量也被稱爲類變量。局部變量不能被聲明爲 static 變量。
-
靜態方法:
static 關鍵字用來聲明獨立於對象的靜態方法。靜態方法不能使用類的非靜態變量。靜態方法從參數列表得到數據,然後計算這些數據。
final 修飾符
final 變量:
final 表示"最後的、最終的"含義,變量一旦賦值後,不能被重新賦值。被 final 修飾的實例變量必須顯式指定初始值。
final 修飾符通常和 static 修飾符一起使用來創建類常量。
abstract 修飾符
抽象類:
抽象類不能用來實例化對象,聲明抽象類的唯一目的是爲了將來對該類進行擴充。
一個類不能同時被 abstract 和 final 修飾。如果一個類包含抽象方法,那麼該類一定要聲明爲抽象類,否則將出現編譯錯誤。
抽象類可以包含抽象方法和非抽象方法。
其他的修飾符可以參考(https://www.runoob.com/java/java-modifier-types.html)
其他
關於運算符
三元運算符
Java開發參考資料
https://www.runoob.com/java/java-tutorial.html
https://www.youtube.com/watch?v=eIrMbAQSU34
https://www.bilibili.com/video/BV1A4411K7Gx?p=7
Android概述
Android是一個開源的,基於Linux的移動設備操作系統,主要使用於移動設備,如智能手機和平板電腦。Android是由谷歌及其他公司帶領的開放手機聯盟開發的。
Android 提供了一個統一的應用程序開發方法,這意味着開發人員只需要爲 Android 進行開發,這樣他們的應用程序就能夠運行在不同搭載 Android 的移動設備上。
谷歌在2007年發佈了第一個測試版本的 Android 軟件開發工具包(SDK),第一個商業版本的 Android 1.0,則發佈於2008年9月。2012年6月27日,在谷歌I/O大會上,谷歌宣佈發佈了 Android 版本4.1 Jelly Bean。 Jelly Bean 是一個在功能和性能方面的漸進的更新,主要目的是改進用戶界面,
Android 源代碼是根據自由和開放源碼軟件許可證。谷歌發佈的大部分代碼遵循 Apache 許可證2.0版,Linux 內核的變化遵循 GNU 通用公共許可證版本2。
Android編程是基於Java編程語言的,所以需要先對JAVA語言有基本的瞭解
Android 應用程序一般使用 Android 軟件開發工具包,採用 Java 語言來開發。
Android歷史各種已發佈的版本名稱:
Android 架構
Android 操作系統是一個軟件組件的棧,在架構圖中它大致可以分爲五個部分和四個主要層。
Linux Kernel (linux 內核層)
在所有層的最底下是 Linux - 包括大約115個補丁的 Linux 3.6。它提供了基本的系統功能,比如進程管理,內存管理,設備管理(如攝像頭,鍵盤,顯示器)。同時,內核處理所有 Linux 所擅長的工作,如網絡和大量的設備驅動,從而避免兼容大量外圍硬件接口帶來的不便。
android系統是基於linux內核的,這一層爲android設備的各種硬件提供底層的驅動,如顯示驅動、音頻頻率、照相機驅動、藍牙驅動、藍牙驅動、wifi驅動、電影管理。
系統運行庫層——Libraries(程序庫)
這一層通過一些C、C++庫來爲android系統提供了主要的特性支持。如SQLite庫提供了數據的支持,OpenGL|ES庫提供了3D繪圖的支持,webkit庫提供了瀏覽器內核的支持等。
在 Linux 內核層的上面是一系列程序庫的集合,包括開源的 Web 瀏覽器引擎 Webkit ,知名的 libc 庫,用於倉庫存儲和應用數據共享的 SQLite 數據庫,用於播放、錄製音視頻的庫,用於網絡安全的 SSL 庫等。
Android程序庫
這個類別包括了專門爲 Android 開發的基於 Java 的程序庫。這個類別程序庫的示例包括應用程序框架庫,如用戶界面構建,圖形繪製和數據庫訪問。一些 Android 開發者可用的 Android 核心程序庫總結如下:
- android.app - 提供應用程序模型的訪問,是所有 Android 應用程序的基石。
- android.content - 方便應用程序之間,應用程序組件之間的內容訪問,發佈,消息傳遞。
- android.database - 用於訪問內容提供者發佈的數據,包含 SQLite 數據庫管理類。
- android.opengl - OpenGL ES 3D 圖片渲染 API 的 Java 接口。
- android.os - 提供應用程序訪問標註操作系統服務的能力,包括消息,系統服務和進程間通信。
- android.text - 在設備顯示上渲染和操作文本。
- android.view - 應用程序用戶界面的基礎構建塊。
- android.widget - 豐富的預置用戶界面組件集合,包括按鈕,標籤,列表,佈局管理,單選按鈕等。
- android.webkit - 一系列類的集合,允許爲應用程序提供內建的 Web 瀏覽能力。
系統運行庫層——Android Runtime
這是架構中的第三部分,自下而上的第二層。這個部分提供名爲 Dalvik 虛擬機的關鍵組件,類似於 Java 虛擬機,但專門爲 Android 設計和優化。
Dalvik 虛擬機使得可以在 Java 中使用 Linux 核心功能,如內存管理和多線程。Dalvik 虛擬機(5.0系統之後改爲ART運行環境)使得每一個 Android 應用程序運行在自己獨立的虛擬機進程。相較於java虛擬機,Dalvik是專門爲移動設備定製的,它針對手機內存、CPU性能有限等情況做了優化處理。
Android 運行時同時提供一系列核心的庫來爲 Android 應用程序開發者使用標準的 Java 語言來編寫 Android 應用程序。
Application Framework(應用框架層)
這一層主要提供了構建應用程序時可能用到的各種API,Android自帶的一些核心應用就是使用這些API完成的。
應用框架層以 Java 類的形式爲應用程序提供許多高級的服務。應用程序開發者被允許在應用中使用這些服務。
- 活動管理者 - 控制應用程序生命週期和活動棧的所有方面。
- 內容提供者 - 允許應用程序之間發佈和分享數據。
- 資源管理器 - 提供對非代碼嵌入資源的訪問,如字符串,顏色設置和用戶界面佈局。
- 通知管理器 - 允許應用程序顯示對話框或者通知給用戶。
- 視圖系統 - 一個可擴展的視圖集合,用於創建應用程序用戶界面。
Application (應用層)
頂層中有所有的 Android 應用程序。你寫的應用程序也將被安裝在這層。這些應用程序包括通訊錄,瀏覽器,遊戲等。
Android 應用程序組件
應用程序組件是一個Android應用程序的基本構建塊。這些組件由應用清單文件松耦合的組織。AndroidManifest.xml描述了應用程序的每個組件,以及他們如何交互。
以下是可以在Android應用程序中使用的四個主要組件。其中,活動是所有Android應用程序的門面,凡是在應用中看得到的東西都是放在活動中的(也即與用戶交互,UI)。而服務則是在後臺運行的,即使用戶退出了應用,服務仍然是可以繼續運行的。廣播接收器允許應用接收來自各處的廣播消息,比如電話、短信等。當然應用同樣也可以向外發佈廣播消息。內容提供器澤爲應用程序之間共享數據提供了可能。
組件 | 描述 |
---|---|
Activities(活動) | 描述UI,並且處理用戶與機器屏幕的交互。 |
Services(服務) | 處理與應用程序關聯的後臺操作。 |
Broadcast Receivers(廣播接收器) | 處理Android操作系統和應用程序之間的通信。 |
Content Providers(內容提供器) | 處理數據和數據庫管理方面的問題。 |
Activities
一個活動標識一個具有用戶界面的單一屏幕。舉個例子,一個郵件應用程序可以包含一個活動用於顯示新郵件列表,另一個活動用來編寫郵件,再一個活動來閱讀郵件。當應用程序擁有多於一個活動,其中的一個會被標記爲當應用程序啓動的時候顯示。
一個活動是Activity類的一個子類,如下所示:
public class MainActivity extends Activity {
}
Services
服務是運行在後臺,執行長時間操作的組件。舉個例子,服務可以是用戶在使用不同的程序時在後臺播放音樂,或者在活動中通過網絡獲取數據但不阻塞用戶交互。
一個服務是Service類的子類,如下所示:
public class MyService extends Service {
}
Broadcast Receivers
廣播接收器簡單地響應從其他應用程序或者系統發來的廣播消息。舉個例子,應用程序可以發起廣播來讓其他應用程序知道一些數據已經被下載到設備,並且可以供他們使用。因此廣播接收器會攔截這些通信並採取適當的行動。
廣播接收器是BroadcastReceiver類的一個子類,每個消息以Intent對象的形式來廣播。
public class MyReceiver extends BroadcastReceiver {
}
Content Providers
內容提供者組件通過請求從一個應用程序到另一個應用程序提供數據。這些請求由ContentResolver類的方法來處理。這些數據可以是存儲在文件系統、數據庫或者其他其他地方。
內容提供者是ContentProvider類的子類,並實現一套標準的API,以便其他應用程序來執行事務。
public class MyContentProvider extends ContentProvider {
}
系統控件
Android系統爲開發者提供了豐富的系統控件,使得我們可以很輕鬆地編寫出漂亮的界面。
SQLite數據庫
android系統還自帶了輕量級、運算速度極快的嵌入式關係型數據庫。它不僅支持標準的SQL語法,還可以通過android封裝好的APII進行操作,讓存儲和讀取數據變得非常方便。
Android開發所需的工具
JDK
正如前面介紹那樣,android開發是基於java語言的。而JDK包含了java運行的環境、工具集合、基礎類庫
Android SDK
Android SDK是谷歌提供的Android開發工具包(前面我們安裝的時候,出問題的地方就是SDK的安裝)。在開發Android程序時,我們需要引入該工具包,來使用Android相關的API
Android studio
這在前面已經完成的安裝和配置了。
在2013年,google就推出了這款強大的IDE
參考資料
https://developer.android.com/studio
https://www.runoob.com/android/android-tutorial.html
https://blog.csdn.net/qq_41976613/article/details/91432304(android studio 安裝)
https://www.youtube.com/watch?v=roDz8mMvbIg&list=PLknSwrodgQ72X4sKpzf5vT8kY80HKcUSe&index=2&t=0s
https://blog.csdn.net/konggu_youlan/article/details/79942800(JDK安裝教程)
https://www.runoob.com/android/android-studio-install.html(android studio 安裝)
https://developer.android.com/studio/intro(android studio的用戶手冊)
https://blog.csdn.net/xuw_xy/article/details/89524335
https://blog.csdn.net/weixin_38234890/article/details/80010231
https://www.youtube.com/watch?v=sehxt5wbsgM&list=PLoDvOw64tSYsWvlxk9aIDOGPVrFQeHull(android開發視頻)
《Android第一行代碼》(推薦書籍)