java-基本概念

 IDEA旗艦版破解教程:http://www.javashuo.com/article/p-nwptovnj-nh.html

 

【破解jar更新,若失敗請評論聯繫我更新jar包。java

連接: https://pan.baidu.com/s/1z-5EUttHd2fbzBRSFb_Muw 提取碼: k3up 複製這段內容後打開百度網盤手機App,操做更方便哦 】程序員

在 hosts 文件裏面添加以下配置繞過聯網校驗編程

0.0.0.0 account.jetbrains.com
0.0.0.0 www.jetbrains.com
 ubuntu

以前寫過一片idea永久破解的方法,可是最新的2019.1版本好像不能用了,如今更新一下破解方法。其實和以前相似。vim

安裝什麼的就再不贅述了,直接進入正題。數組

1、先下載破解jar包 Jetbrains-agent.jar,直接放在了安裝目錄的bin下,我這裏是D:\software\java\ideaIU2019.1\bin (事實上是放在那裏都行,我這裏放在bin下好管理)安全

2、安裝好後,直接打開idea,選擇試用。(這裏是跟以前不同的一點,修改配置文件時:不能直接在bin目錄下直接修改,必須先打開idea試用30天,而後在idea裏修改配置文件)bash

 

3、隨便建立一個空項目後,進入idea界面。點擊IDE菜單的:「Help」而後點擊  「Edit Custom VM Options」,若是提示是否要建立文件,請點"是|Yes"。而後在打開的vmoptions編輯窗口末行添加:-javaagent:"Jetbrains-agent.jar文件的絕對路徑"(必定要本身確認好路徑,填錯會致使IDE打不開!!!)  好比個人是 -javaagent:D:\software\java\ideaIU2019.1\bin \Jetbrains-agent.jar。網絡

保險起見將bin目錄下idea.exe.vmoptions 和 idea64.exe.vmoptions 這兩個文件末尾也添加該配置。多線程

編輯好後,保存,退出,重啓idea。

修改完配置文件以後重啓

若是錯誤則會出現打不開的狀況,這時候能夠刪除用戶配置目錄(C:\Users\你的用戶名)下的.idea文件夾,從新操做!!!

4、重啓後。再次點擊 idea菜單欄 的 "Help" -> 「Register」,選擇License server方式,地址填入:http://jetbrains-license-server

 

而後再次重啓,當重啓時看到以下圖的 Licensed to (你本身的電腦用戶名),就是激活成功了。

 

安裝java:

一、下載java安裝包(ubuntu系統)

二、新建目錄:mkdir /usr/java,將安裝包解壓到該目錄下

三、修改配置文件:vim /etc/profile 添加java的環境變量

JAVA_HOME=/usr/java/jdk-12
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

四、修改用戶目錄下的bashrc文件:vim ~/.bashrc  添加java環境變量:export JAVA_HOME=/usr/java/jdk-12

五、重啓電腦或者重啓服務:source /etc/profile  source ~/.bashrc

 

注意:

一、java的編譯環境javac不能高於運行環境java,因此下載jdk版本的時候要注意和系統的兼容性。

二、若是出現編碼錯誤,記得在javac 後面加-encoding utf-8這個參數,執行java的時候不用加編碼參數了

 

主要特性

  • Java語言是簡單的:

    Java語言的語法與C語言和C++語言很接近,使得大多數程序員很容易學習和使用。另外一方面,Java丟棄了C++中不多使用的、很難理解的、使人迷惑的那些特性,如操做符重載、多繼承、自動的強制類型轉換。特別地,Java語言不使用指針,而是引用。並提供了自動的廢料收集,使得程序員沒必要爲內存管理而擔心。

  • Java語言是面向對象的:

    Java語言提供類、接口和繼承等面向對象的特性,爲了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,並支持類與接口之間的實現機制(關鍵字爲implements)。Java語言全面支持動態綁定,而C++語言只對虛函數使用動態綁定。總之,Java語言是一個純的面向對象程序設計語言。

  • Java語言是分佈式的:

    Java語言支持Internet應用的開發,在基本的Java應用編程接口中有一個網絡應用編程接口(java net),它提供了用於網絡應用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠程方法激活)機制也是開發分佈式應用的重要手段。

  • Java語言是健壯的:

    Java的強類型機制、異常處理、垃圾的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇。Java的安全檢查機制使得Java更具健壯性。

  • Java語言是安全的:

    Java一般被用在網絡環境中,爲此,Java提供了一個安全機制以防惡意代碼的攻擊。除了Java語言具備的許多安全特性之外,Java對經過網絡下載的類具備一個安全防範機制(類ClassLoader),如分配不一樣的名字空間以防替代本地的同名類、字節代碼檢查,並提供安全管理機制(類SecurityManager)讓Java應用設置安全哨兵。

  • Java語言是體系結構中立的:

    Java程序(後綴爲java的文件)在Java平臺上被編譯爲體系結構中立的字節碼格式(後綴爲class的文件),而後能夠在實現這個Java平臺的任何系統中運行。這種途徑適合於異構的網絡環境和軟件的分發。

  • Java語言是可移植的:

    這種可移植性來源於體系結構中立性,另外,Java還嚴格規定了各個基本數據類型的長度。Java系統自己也具備很強的可移植性,Java編譯器是用Java實現的,Java的運行環境是用ANSI C實現的。

  • Java語言是解釋型的:

    如前所述,Java程序在Java平臺上被編譯爲字節碼格式,而後能夠在實現這個Java平臺的任何系統中運行。在運行時,Java平臺中的Java解釋器對這些字節碼進行解釋執行,執行過程當中須要的類在聯接階段被載入到運行環境中。

  • Java是高性能的:

    與那些解釋型的高級腳本語言相比,Java的確是高性能的。事實上,Java的運行速度隨着JIT(Just-In-Time)編譯器技術的發展愈來愈接近於C++。

  • Java語言是多線程的:

    在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來建立。一般有兩種方法來建立線程:其一,使用型構爲Thread(Runnable)的構造子類將一個實現了Runnable接口的對象包裝成一個線程,其二,從Thread類派生出子類並重寫run方法,使用該子類建立的對象即爲線程。值得注意的是Thread類已經實現了Runnable接口,所以,任何一個線程均有它的run方法,而run方法中包含了線程所要運行的代碼。線程的活動由一組方法來控制。Java語言支持多個線程的同時執行,並提供多線程之間的同步機制(關鍵字爲synchronized)。

  • Java語言是動態的:

    Java語言的設計目標之一是適應於動態變化的環境。Java程序須要的類可以動態地被載入到運行環境,也能夠經過網絡來載入所須要的類。這也有利於軟件的升級。另外,Java中的類有一個運行時刻的表示,能進行運行時刻的類型檢查。

基本語法

編寫Java程序時,應注意如下幾點:

  • 大小寫敏感:Java是大小寫敏感的,這就意味着標識符Hello與hello是不一樣的。
  • 類名:對於全部的類來講,類名的首字母應該大寫。若是類名由若干單詞組成,那麼每一個單詞的首字母應該大寫,例如 MyFirstJavaClass 。
  • 方法名:全部的方法名都應該以小寫字母開頭。若是方法名含有若干單詞,則後面的每一個單詞首字母大寫。
  • 源文件名:源文件名必須和類名相同。當保存文件的時候,你應該使用類名做爲文件名保存(切記Java是大小寫敏感的),文件名的後綴爲.java。(若是文件名和類名不相同則會致使編譯錯誤)。
  • 主方法入口:全部的Java 程序由public static void main(String []args)方法開始執行。

 

Java標識符

Java全部的組成部分都須要名字。類名、變量名以及方法名都被稱爲標識符。

關於Java標識符,有如下幾點須要注意:

  • 全部的標識符都應該以字母(A-Z或者a-z),美圓符($)、或者下劃線(_)開始
  • 首字符以後能夠是字母(A-Z或者a-z),美圓符($)、下劃線(_)或數字的任何字符組合
  • 關鍵字不能用做標識符
  • 標識符是大小寫敏感的
  • 合法標識符舉例:age、$salary、_value、__1_value
  • 非法標識符舉例:123abc、-salary

接口

在Java中,接口可理解爲對象間相互通訊的協議。接口在繼承中扮演着很重要的角色。

接口只定義派生要用到的方法,可是方法的具體實現徹底取決於派生類。

 

Java中的對象

 

如今讓咱們深刻了解什麼是對象。看看周圍真實的世界,會發現身邊有不少對象,車,狗,人等等。全部這些對象都有本身的狀態和行爲。

拿一條狗來舉例,它的狀態有:名字、品種、顏色,行爲有:叫、搖尾巴和跑。

對比現實對象和軟件對象,它們之間十分類似。

軟件對象也有狀態和行爲。軟件對象的狀態就是屬性,行爲經過方法體現。

在軟件開發中,方法操做對象內部狀態的改變,對象的相互調用也是經過方法來完成。

 

Java中的類

類能夠當作是建立Java對象的模板。

一個類能夠包含如下類型變量:

  • 局部變量:在方法、構造方法或者語句塊中定義的變量被稱爲局部變量。變量聲明和初始化都是在方法中,方法結束後,變量就會自動銷燬。
  • 成員變量:成員變量是定義在類中,方法體以外的變量。這種變量在建立對象的時候實例化。成員變量能夠被類中方法、構造方法和特定類的語句塊訪問。
  • 類變量:類變量也聲明在類中,方法體以外,但必須聲明爲static類型。

一個類能夠擁有多個方法,在上面的例子中:barking()、hungry()和sleeping()都是Dog類的方法。

 

構造方法

每一個類都有構造方法。若是沒有顯式地爲類定義構造方法,Java編譯器將會爲該類提供一個默認構造方法。

在建立一個對象的時候,至少要調用一個構造方法。構造方法的名稱必須與類同名,一個類能夠有多個構造方法。

下面是一個構造方法示例:

public class Puppy{
    public Puppy(){
    }
 
    public Puppy(String name){
        // 這個構造器僅有一個參數:name
    }
}

建立對象

對象是根據類建立的。在Java中,使用關鍵字new來建立一個新的對象。建立對象須要如下三步:

  • 聲明:聲明一個對象,包括對象名稱和對象類型。
  • 實例化:使用關鍵字new來建立一個對象。
  • 初始化:使用new建立對象時,會調用構造方法初始化對象。

下面是一個建立對象的例子:

public class Puppy{
   public Puppy(String name){
      //這個構造器僅有一個參數:name
      System.out.println("小狗的名字是 : " + name ); 
   }
   public static void main(String[] args){
      // 下面的語句將建立一個Puppy對象
      Puppy myPuppy = new Puppy( "tommy" );
   }
}

 

源文件聲明規則

在本節的最後部分,咱們將學習源文件的聲明規則。當在一個源文件中定義多個類,而且還有import語句和package語句時,要特別注意這些規則。

  • 一個源文件中只能有一個public類
  • 一個源文件能夠有多個非public類
  • 源文件的名稱應該和public類的類名保持一致。例如:源文件中public類的類名是Employee,那麼源文件應該命名爲Employee.java。
  • 若是一個類定義在某個包中,那麼package語句應該在源文件的首行。
  • 若是源文件包含import語句,那麼應該放在package語句和類定義之間。若是沒有package語句,那麼import語句應該在源文件中最前面。
  • import語句和package語句對源文件中定義的全部類都有效。在同一源文件中,不能給不一樣的類不一樣的包聲明。

類有若干種訪問級別,而且類也分不一樣的類型:抽象類和final類等。這些將在訪問控制章節介紹。

除了上面提到的幾種類型,Java還有一些特殊的類,如:內部類、匿名類。

 

Java包

包主要用來對類和接口進行分類。當開發Java程序時,可能編寫成百上千的類,所以頗有必要對類和接口進行分類。

 

Java 基本數據類型

變量就是申請內存來存儲值。也就是說,當建立變量的時候,須要在內存中申請空間。

內存管理系統根據變量的類型爲變量分配存儲空間,分配的空間只能用來儲存該類型數據。

所以,經過定義不一樣類型的變量,能夠在內存中儲存整數、小數或者字符。

Java 的兩大數據類型:

  • 內置數據類型
  • 引用數據類型

內置數據類型

Java語言提供了八種基本類型。六種數字類型(四個整數型,兩個浮點型),一種字符類型,還有一種布爾型。

byte:

  • byte 數據類型是8位、有符號的,以二進制補碼錶示的整數;
  • 最小值是 -128(-2^7);
  • 最大值是 127(2^7-1);
  • 默認值是 0;
  • byte 類型用在大型數組中節約空間,主要代替整數,由於 byte 變量佔用的空間只有 int 類型的四分之一;
  • 例子:byte a = 100,byte b = -50。

short:

  • short 數據類型是 16 位、有符號的以二進制補碼錶示的整數
  • 最小值是 -32768(-2^15);
  • 最大值是 32767(2^15 - 1);
  • Short 數據類型也能夠像 byte 那樣節省空間。一個short變量是int型變量所佔空間的二分之一;
  • 默認值是 0;
  • 例子:short s = 1000,short r = -20000。

int:

  • int 數據類型是32位、有符號的以二進制補碼錶示的整數;
  • 最小值是 -2,147,483,648(-2^31);
  • 最大值是 2,147,483,647(2^31 - 1);
  • 通常地整型變量默認爲 int 類型;
  • 默認值是 0 ;
  • 例子:int a = 100000, int b = -200000。

long:

  • long 數據類型是 64 位、有符號的以二進制補碼錶示的整數;
  • 最小值是 -9,223,372,036,854,775,808(-2^63);
  • 最大值是 9,223,372,036,854,775,807(2^63 -1);
  • 這種類型主要使用在須要比較大整數的系統上;
  • 默認值是 0L;
  • 例子: long a = 100000L,Long b = -200000L。
    "L"理論上不分大小寫,可是若寫成"l"容易與數字"1"混淆,不容易分辯。因此最好大寫。

float:

  • float 數據類型是單精度、32位、符合IEEE 754標準的浮點數;
  • float 在儲存大型浮點數組的時候可節省內存空間;
  • 默認值是 0.0f;
  • 浮點數不能用來表示精確的值,如貨幣;
  • 例子:float f1 = 234.5f。

double:

  • double 數據類型是雙精度、64 位、符合IEEE 754標準的浮點數;
  • 浮點數的默認類型爲double類型;
  • double類型一樣不能表示精確的值,如貨幣;
  • 默認值是 0.0d;
  • 例子:double d1 = 123.4。

boolean:

  • boolean數據類型表示一位的信息;
  • 只有兩個取值:true 和 false;
  • 這種類型只做爲一種標誌來記錄 true/false 狀況;
  • 默認值是 false;
  • 例子:boolean one = true。

char:

    • char類型是一個單一的 16 位 Unicode 字符;
    • 最小值是 \u0000(即爲0);
    • 最大值是 \uffff(即爲65,535);
    • char 數據類型能夠儲存任何字符;
    • 例子:char letter = 'A';。

實際上,JAVA中還存在另一種基本類型void,它也有對應的包裝類 java.lang.Void,不過咱們沒法直接對它們進行操做。

引用類型

  • 在Java中,引用類型的變量很是相似於C/C++的指針。引用類型指向一個對象,指向對象的變量是引用變量。這些變量在聲明時被指定爲一個特定的類型,好比 Employee、Puppy 等。變量一旦聲明後,類型就不能被改變了。
  • 對象、數組都是引用數據類型。
  • 全部引用類型的默認值都是null。
  • 一個引用變量能夠用來引用任何與之兼容的類型。
  • 例子:Site site = new Site("Runoob")。

Java 常量

常量在程序運行時是不能被修改的。

在 Java 中使用 final 關鍵字來修飾常量,聲明方式和變量相似:

final double PI = 3.1415927;

  

雖然常量名也能夠用小寫,但爲了便於識別,一般使用大寫字母表示常量。

字面量能夠賦給任何內置類型的變量。

byte a = 68;
char a = 'A'

  

byte、int、long、和short均可以用十進制、16進制以及8進制的方式來表示。

當使用常量的時候,前綴 0 表示 8 進制,而前綴 0x 表明 16 進制, 

int decimal = 100;
int octal = 0144;
int hexa =  0x64;

和其餘語言同樣,Java的字符串常量也是包含在兩個引號之間的字符序列。下面是字符串型字面量的例子:

"Hello World"
"two\nlines"
"\"This is in quotes\""

字符串常量和字符常量均可以包含任何Unicode字符。例如:

char a = '\u0001';
String a = "\u0001";

Java語言支持一些特殊的轉義字符序列。

符號	字符含義
\n	換行 (0x0a)
\r	回車 (0x0d)
\f	換頁符(0x0c)
\b	退格 (0x08)
\0	空字符 (0x20)
\s	字符串
\t	製表符
\"	雙引號
\'	單引號
\\	反斜槓
\ddd	八進制字符 (ddd)
\uxxxx	16進制Unicode字符 (xxxx)

自動類型轉換

整型、實型(常量)、字符型數據能夠混合運算。運算中,不一樣類型的數據先轉化爲同一類型,而後進行運算。

轉換從低級到高級。

數據類型轉換必須知足以下規則:

  • 1. 不能對boolean類型進行類型轉換。

  • 2. 不能把對象類型轉換成不相關類的對象。

  • 3. 在把容量大的類型轉換爲容量小的類型時必須使用強制類型轉換。

  • 4. 轉換過程當中可能致使溢出或損失精度,

  • 5. 浮點數到整數的轉換是經過捨棄小數獲得,而不是四捨五入

自動類型轉換

必須知足轉換前的數據類型的位數要低於轉換後的數據類型,例如: short數據類型的位數爲16位,就能夠自動轉換位數爲32的int類型,一樣float數據類型的位數爲32,能夠自動轉換爲64位的double類型。

public class ZiDongLeiZhuan{
        public static void main(String[] args){
            char c1='a';//定義一個char類型
            int i1 = c1;//char自動類型轉換爲int
            System.out.println("char自動類型轉換爲int後的值等於"+i1);
            char c2 = 'A';//定義一個char類型
            int i2 = c2+1;//char 類型和 int 類型計算
            System.out.println("char類型和int計算後的值等於"+i2);
        }
}

運行結果:
char自動類型轉換爲int後的值等於97
char類型和int計算後的值等於66
解析:c1 的值爲字符 a ,查 ASCII 碼錶可知對應的 int 類型值爲 97, A 對應值爲 65,因此 i2=65+1=66。

  

強制類型轉換

  • 1. 條件是轉換的數據類型必須是兼容的。

  • 2. 格式:(type)value type是要強制類型轉換後的數據類型 實例:

    public class QiangZhiZhuanHuan{
        public static void main(String[] args){
            int i1 = 123;
            byte b = (byte)i1;//強制類型轉換爲byte
            System.out.println("int強制類型轉換爲byte後的值等於"+b);
        }
    }
    運行結果:
    int強制類型轉換爲byte後的值等於123

      

隱含強制類型轉換

  • 1. 整數的默認類型是 int。

  • 2. 浮點型不存在這種狀況,由於在定義 float 類型時必須在數字後面跟上 F 或者 f。

Java 變量類型

在Java語言中,全部的變量在使用前必須聲明。聲明變量的基本格式以下:

int a, b, c;         // 聲明三個int型整數:a、 b、c
int d = 3, e = 4, f = 5; // 聲明三個整數並賦予初值
byte z = 22;         // 聲明並初始化 z
String s = "runoob";  // 聲明並初始化字符串 s
double pi = 3.14159; // 聲明瞭雙精度浮點型變量 pi
char x = 'x';        // 聲明變量 x 的值是字符 'x'。

Java語言支持的變量類型有:

  • 類變量:獨立於方法以外的變量,用 static 修飾。
  • 實例變量:獨立於方法以外的變量,不過沒有 static 修飾。
  • 局部變量:類的方法中的變量。
public class Variable{
    static int allClicks=0;    // 類變量
 
    String str="hello world";  // 實例變量
 
    public void method(){
 
        int i =0;  // 局部變量
 
    }
}

 

Java 局部變量

  • 局部變量聲明在方法、構造方法或者語句塊中;
  • 局部變量在方法、構造方法、或者語句塊被執行的時候建立,當它們執行完成後,變量將會被銷燬;
  • 訪問修飾符不能用於局部變量;
  • 局部變量只在聲明它的方法、構造方法或者語句塊中可見;
  • 局部變量是在棧上分配的。
  • 局部變量沒有默認值,因此局部變量被聲明後,必須通過初始化,纔可使用。
package com.runoob.test;
 
public class Test{ 
   public void pupAge(){
      int age = 0;
      age = age + 7;
      System.out.println("小狗的年齡是: " + age);
   }
   
   public static void main(String[] args){
      Test test = new Test();
      test.pupAge();
   }
}

實例變量

  • 實例變量聲明在一個類中,但在方法、構造方法和語句塊以外;
  • 當一個對象被實例化以後,每一個實例變量的值就跟着肯定;
  • 實例變量在對象建立的時候建立,在對象被銷燬的時候銷燬;
  • 實例變量的值應該至少被一個方法、構造方法或者語句塊引用,使得外部可以經過這些方式獲取實例變量信息;
  • 實例變量能夠聲明在使用前或者使用後;
  • 訪問修飾符能夠修飾實例變量;
  • 實例變量對於類中的方法、構造方法或者語句塊是可見的。通常狀況下應該把實例變量設爲私有。經過使用訪問修飾符可使實例變量對子類可見;
  • 實例變量具備默認值。數值型變量的默認值是0,布爾型變量的默認值是false,引用類型變量的默認值是null。變量的值能夠在聲明時指定,也能夠在構造方法中指定;
  • 實例變量能夠直接經過變量名訪問。但在靜態方法以及其餘類中,就應該使用徹底限定名:ObejectReference.VariableName。
import java.io.*;
public class Employee{
   // 這個實例變量對子類可見
   public String name;
   // 私有變量,僅在該類可見
   private double salary;
   //在構造器中對name賦值
   public Employee (String empName){
      name = empName;
   }
   //設定salary的值
   public void setSalary(double empSal){
      salary = empSal;
   }  
   // 打印信息
   public void printEmp(){
      System.out.println("名字 : " + name );
      System.out.println("薪水 : " + salary);
   }
 
   public static void main(String[] args){
      Employee empOne = new Employee("RUNOOB");
      empOne.setSalary(1000);
      empOne.printEmp();
   }
}

 

運行結果:

$ javac Employee.java 
$ java Employee
名字 : RUNOOB
薪水 : 1000.0

 

類變量(靜態變量)

  • 類變量也稱爲靜態變量,在類中以 static 關鍵字聲明,但必須在方法以外。
  • 不管一個類建立了多少個對象,類只擁有類變量的一份拷貝。
  • 靜態變量除了被聲明爲常量外不多使用。常量是指聲明爲public/private,final和static類型的變量。常量初始化後不可改變。
  • 靜態變量儲存在靜態存儲區。常常被聲明爲常量,不多單獨使用static聲明變量。
  • 靜態變量在第一次被訪問時建立,在程序結束時銷燬。
  • 與實例變量具備類似的可見性。但爲了對類的使用者可見,大多數靜態變量聲明爲public類型。
  • 默認值和實例變量類似。數值型變量默認值是0,布爾型默認值是false,引用類型默認值是null。變量的值能夠在聲明的時候指定,也能夠在構造方法中指定。此外,靜態變量還能夠在靜態語句塊中初始化。
  • 靜態變量能夠經過:ClassName.VariableName的方式訪問。
  • 類變量被聲明爲public static final類型時,類變量名稱通常建議使用大寫字母。若是靜態變量不是public和final類型,其命名方式與實例變量以及局部變量的命名方式一致。
import java.io.*;
 
public class Employee {
    //salary是靜態的私有變量
    private static double salary;
    // DEPARTMENT是一個常量
    public static final String DEPARTMENT = "開發人員";
    public static void main(String[] args){
    salary = 10000;
        System.out.println(DEPARTMENT+"平均工資:"+salary);
    }
}

注意:若是其餘類想要訪問該變量,能夠這樣訪問:Employee.DEPARTMENT

相關文章
相關標籤/搜索