JAVA -01(簡單知識介紹)

来源:https://www.cnblogs.com/05xy/archive/2023/03/19/17011059.html
-Advertisement-
Play Games

JAVA -01 前期準備 介紹 1972年C誕生【兩大問題:指針;記憶體管理】 1982年C++誕生【面向對象;相容C;圖形領域和游戲,但是更複雜】 1995年JAVA誕生【沒有指針沒有記憶體管理;面向對象;類型安全;高質量類庫;跨平臺(JVM實現);applet圖形界面程式】 小碎點 三高問題:高可 ...


JAVA -01

前期準備

介紹

  1. 1972年C誕生【兩大問題:指針;記憶體管理】
  2. 1982年C++誕生【面向對象;相容C;圖形領域和游戲,但是更複雜】
  3. 1995年JAVA誕生【沒有指針沒有記憶體管理;面向對象;類型安全;高質量類庫;跨平臺(JVM實現);applet圖形界面程式】

小碎點

  • 三高問題:高可用、高性能、高併發

Java特性

  1. 簡單性【易學】
  2. 面向對象
  3. 可移植性【一次編寫多次運行】
  4. 高性能【及時編譯】
  5. 分散式【TCP/IP處理、URL調用、遠程調用】
  6. 動態性【反射機制】
  7. 多線程【交互、實時】
  8. 安全性【防病毒、防篡改、異常機制】
  9. 健壯性
  10. 既是編譯型又是解釋型語言
    11. 大小寫敏感

Java的三大版本

  • JavaSE:標準版(桌面程式、控制台開發)
  • JavaME:嵌入式開發(手機、小家電)
  • JavaEE: 企業級開發(web端、伺服器開發)

JDK、JRE、JVM

1. JDK:Java Development Kit 【Java開發包】
2. JRE:Java Runtime Environment 【Java運行時環境】
3. JVM:Java Virtual Machine 【Java虛擬機】

JDK7和JDK8之間的區別

JDK7

  1. JDK7新特性,數字之間可以用下劃線分割

JDK8


JDK卸載

  1. 刪除安裝目錄
  2. 刪除環境變數配置JAVA_HOME
  3. 刪除path下的關於java的目錄
  4. java -version檢查

JDK安裝

  1. 百度搜索jdk8,找到下載地址
  2. 同意協議、下載對應版本安裝包
  3. 雙擊安裝
  4. 安裝目錄建議找易找到的,並記住安裝路徑
  5. 配置環境變數
    1. 我的電腦 --->右鍵 --->屬性 --->高級系統設置
    2. 環境變數 --->系統變數 --->新建系統變數--->JAVA_HOME--->安裝路徑
  6. 配置path變數
    1. 系統變數裡面找到path --->新建%JAVA_HOME%\bin --->新建%JAVA_HOME%\jre\bin
    2. 打開cmd ---> java -version 檢查,出現安裝的版本及成功

控制台輸出HelloWorld【第一個java程式】

  1. 新建一個文件【文件名HelloWorld文件名和文件里的class後面的要一致】,將尾碼改為.java

  2. 在裡面編寫代碼

  3. public class HelloWorld{    //HelloWorld與文件名一致
    	public static void main(String[] args){
    		System.out.println("Hello,World!");
    	}
    }
    
  4. 控制台進到文件目錄,進行編譯

  5. javac HelloWorld.java
    
  6. 運行

  7. java HelloWorld
    
  8. image

使用IDEA開發

  1. 下載安裝包,安裝

  2. 安裝時需要根據電腦版本選擇是 “.32” 還是 “.64” ,還有勾選 ".java" 。

  3. 破解

使用IDEA快捷鍵

1、psvm + enter	可以快速補充 
    public static void main(String[] args) {
    }

2、sout + enter	可以快速補充
    System.out.println();

3、Ctrl + d	複製當前行到下一行

Java基礎語法

註釋

1、//單行註釋  //
2、//多行註釋  /* 註釋 */
3、//JavaDOC /**  文檔註釋 */

標識符【關鍵字】

1、所有標識符首字母必須字母(A-Z,a-z)美元符號($),下劃線(—)開始
2、首字母之後可以任意
3、大小寫敏感
4、不能使用關鍵字作為變數名和方法名
5、String不是關鍵字,是一個類

數據類型

1、java是強類型語言【變數使用複合類型且必須先定義再使用】
2、兩大類【基本類型、引用類型】
3、primitive type 基本類型 【byte(1B)、short(2B)、int(4B)、long(8B)、float(4B)、double(8B)、char(2B)、boolean(1b)】【long類型要在後面加上L,float要在後面加F】
4、reference type 引用類型 【類、介面、數組】

public class Demo01 {
    public static void main(String[] args) {
        //====================================================
        //int型  【int(4B)】
        //====================================================
        int i = 10;
        int i2 = 010;  //八進位0
        int i3 = 0x10;  //十六進位 0x

        System.out.println(i);
        System.out.println(i2);
        System.out.println(i3);
        System.out.println("====================");

        //====================================================
        //float型   &&  double型  【float(4B)、double(8B)】
        //====================================================
        float f = 0.1f;
        double d = 1.0/10;

        System.out.println(f);
        System.out.println(d);
        System.out.println(f==d);
        System.out.println("====================");

        //====================================================
        //浮點數拓展? 銀行業務怎麼表示?錢
        //BigDecimal  數學工具類
        //====================================================
        //float 有限  離散  舍入誤差  大約  接近但不等於
        //最好完全避免使用浮點數標記!!!
        //最好完全避免使用浮點數標記!!!
        //最好完全避免使用浮點數標記!!!
        float d1 = 23169541465661f;
        float d2 = d1 + 1 ;
        System.out.println(d1==d2);
        System.out.println(d1);
        System.out.println(d2);
        System.out.println("====================");

        //====================================================
        //char型   【char(2B)】
        //字元拓展?
        //所有字元本質還是數字  編碼 Unicode 2位元組  0-65536  Excel  2^16 = 65536
        //====================================================
        char c1 = 'a';
        char c2 = '中';
        System.out.println(c1);
        System.out.println((int)c1);
        System.out.println(c2);
        System.out.println((int)c2);
        System.out.println("====================");

        //轉義字元
        // \t   製表符 tab
        // \n   換行
        System.out.println("hello\thello");
        System.out.println("hello\nhello");
        System.out.println("====================");

        //====================================================
        //boolea型  【boolean(1b)】
        //====================================================
        boolean flag = false;
        if(flag == true){ }  //新手
        if(flag){}  //老手
        //上面兩個if判斷功能一致

        //====================================================
        //String   不是數據類型,它是一個類!!!!!!
        //====================================================
        String s1 = new String("nihao");
        String s2 = new String("nihao");
        String s3 = "nihao";
        String s4 = "nihao";
        System.out.println(s1==s2);
        System.out.println(s3==s4);
        System.out.println("====================");

    }
}

自己找找看有哪些轉義符?

  • 位(bit):電腦內部最小存儲單位
  • 位元組(byte):計算數據處理基本單位,習慣B表示
  • 1B = 8bit

類型轉換

註意點:
1、不能對boolean類型進行轉換
2、不能將最想類型轉換為不相干的類型
3、轉換的時候可能存在記憶體溢出、或者精度問題

強制轉換 高到低 (類型)變數名

低--->高:byte , short , char , int ,long , float , double

自動類型轉換 低到高【不需要處理】

package base;

public class Demo02 {
    public static void main(String[] args) {

        //強制轉換 高到低     (類型)變數名
        //自動類型轉換 低到高
        int i = 128;
        byte b = (byte)i;  //記憶體溢出
        double d = i;

        System.out.println(i);
        System.out.println(b);
        System.out.println(d);
        System.out.println("===============================");

        System.out.println((int)23.7);
        System.out.println((int)-45.75f);
        System.out.println("===============================");

        char c = 'a';
        int i2 = c+1;
        System.out.println(i2);
        System.out.println((char)i2);
        System.out.println("===============================");

        //操作比較大的數,註意溢出
        //JDK7新特性,數字之間可以用下劃線分割
        int money = 10_0000_0000;
        int years = 20;
        int total = money*years;  //負數,計算溢出
        long total2 = money*years;  //負數,計算之後轉換為long類型,同樣會溢出
        long total3 = money*((long)years);  //先將years強轉為long,再計算
        System.out.println(total);
        System.out.println(total2);
        System.out.println(total3);

        /*
        小寫的L(即l)也可以,但是在編寫軟體里,他和1非常相似,為避免認錯,代碼規範易讀都用L來標記long類型
         */

    }
}

變數、常量、作用域

註意點:
1、每個變數都要有類型
2、變數名必須是合法的標識符
3、變數生命是一條完整的語句,所以必須以分號結束
4、不建議一行定義多個變數

  • 類變數:加了static關鍵字
  • 實例變數:從屬於對象,在類中有效,可以不初始化就使用,會有預設值【boolean預設false ,除了基本類型其餘的是null】
  • 局部變數:使用之前必須實例化並賦值,作用域只在它聲明的方法內部有用(即它所在的{}內有用)
package base;

public class Demo03 {
    //變數  type varName [=value][{varName[=value]}];

    //常量一般用大寫  final

    static double salary = 2500;
    String name;
    int age;

    //修飾符不存在先後順序
    static final double PI = 3.14;

    public static void main(String[] args) {
        int i = 10;
        System.out.println(i);
        Demo03 demo = new Demo03();
        System.out.println(demo.name);
        System.out.println(demo.age);
        System.out.println(salary);

        System.out.println(PI);
    }

    //外部方法
    public  void  add(){
		//***
    }
}

運算符

算數運算符:+ - * / %(取餘/模) ++(自增,一元運算符) --(自減,一元運算符)
賦值運算符:=
關係運算符:> < >= <= == != instanceof
邏輯運算符:&& || !        
位運算符:& | ^ ~ >> << >>>(瞭解!!!)
條件運算符:? :
擴展賦值運算符:+= -= *= /=
package base;

public class Demo04 {

    public static void main(String[] args) {

        //二元運算符
        int a = 10;
        int b = 20;
        int c = 25;
        int d = 25;

        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println(a/(double)b);
        System.out.println("================================");

        long aa = 123123123123L;
        int bb = 123;
        short cc = 10;
        byte dd = 8;

        System.out.println(aa+bb+cc+dd);  //long  最高
        System.out.println(bb+cc+dd);   //int
        System.out.println(cc+dd);  //int
        System.out.println("================================");

        //關係運算符返回結果 true false
        int a2 = 10;
        int b2 = 20;
        int c2 = 21;

        System.out.println(a2>b2);
        System.out.println(a2<b2);
        System.out.println(a2==b2);
        System.out.println(a2!=b2);
        System.out.println(c2%b2);
        System.out.println("================================");

        //一元運算符  ++ --
        int x = 1;                  //x=1
        int y = x++;                //y=1,x=2【先將x賦給y,在x+1】
        System.out.println(x);      //x=2
        int z = ++x;                //x=3【先x+1,再將x賦給z】

        System.out.println(x);
        System.out.println(y);
        System.out.println(z);
        System.out.println("================================");

        //冪運算 2^3 = 8  很多運算,需要使用工具類
        double m = Math.pow(2,3);
        System.out.println(m);
        System.out.println("================================");

        //邏輯運算符
        boolean f1 = true;
        boolean f2 = false;

        System.out.println(f1&&f2);
        System.out.println(f1||f2);
        System.out.println(!(f1&&f2));
        System.out.println("================================");

		擴展賦值運算符
        int xy = 10;
    	int xz = 20;
   		a+=b;   //a=a+b
    	a-=b;   //a=a-b
    	System.out.println(a+b);

        //三元運算符
        //xx ? yy : zz  如果xx為真則結果為yy,否則結果為zz
        int score = 80;
        String type = score < 60 ? "不及格" : "及格";
        System.out.println(type);

        /*
        運算符的優先順序,一元運算符最優
         */

    }
}

運算符優先順序

短路原則

    boolean f1 = true;
    boolean f2 = false;
    //短路原則
    System.out.println(f2&&f1);     //因為邏輯與是全為真則結果為真,所以在判斷法等於false時,就不會再執行f1的判斷了
    //驗證短路原則
    int flag = 5;
    boolean f3 = (flag < 4)&&(flag++ < 4);
    System.out.println(f3);
    System.out.println(flag);
    System.out.println("================================");

位運算 效率高【跟底層二級制打交道】

<< **左移 ** 相當於*2

>> **右移 ** 相當於/2

        /*
        A = 0011 1100
        B = 0000 1101
        A&B = 0000 1100            全為1,則為1
        A|B = 0011 1101            都為0,則為0
        A^B = 0011 0001      異或  相同則為0,否則為1
         ~B = 1111 0010      取反
    
        2*8 = 16  = 2*2*2*2
        <<      左移   相當於*2
        >>      右移   相當於/2
    
        0000 0001   1
        0000 0010   2
        0000 0011   3
        0000 0100   4
        0000 0101   5
        0000 0110   6
        0000 0111   7
        0000 1000   8
        0001 0000   16
         */
    
        System.out.println(2 << 3);
        System.out.println("===============================");

面試題

  • new對象,判斷是否相等
		String s1 = new String("nihao");
        String s2 = new String("nihao");
        String s3 = "nihao";
        String s4 = "nihao";
        System.out.println(s1==s2);
        System.out.println(s3==s4);

輸出結果:

flash

true


  • 字元串連接符 + ,String
    System.out.println(" "+a+b);和System.out.println(a+b+" ");輸出區別
    前者輸出1020,後面的a+b中的+變成了連接符
    後者輸出30,a+b裡面的+是運算符
int a = 10;
int b = 20;
System.out.print("\" \"+a+b:");
System.out.println(" "+a+b);
System.out.print("a+b+\" \"
System.out.println(a+b+" ");

輸出結果:
" "+a+b:1020
a+b+" ":30


  • ++位置

​ y = x++;和z = ++x;輸出區別(各自結果)

int x = 1;                  //x=1
int y = x++;                //y=1,x=2【先將x賦給y,在x+1】
System.out.println(x);      //x=2
int z = ++x;                //x=3【先x+1,再將x賦給z】

System.out.println(x);	//3
System.out.println(y);	//1
System.out.println(z);	//3

輸出結果:

3

1

3

命名規範

  1. 見名知意
  2. 類名:首字母大寫和駝峰原則
  3. 常量:全部大寫,單詞之間下劃線
  4. 類成員變數:首字母小寫和駝峰原則(除首字母外,之後的單詞首字母大寫)
  5. 局部變數:首字母小寫和駝峰原則
  6. 方法名:首字母大寫和駝峰原則

包機制

JavaDOC

  • Javadoc命令是用來生成自己的API文檔

  • 可用的參數信息:

    1. @author 作者名
    2. @version 版本號
    3. @since 知名需要最早使用的jdk版本
    4. @param 參數名
    5. @return 返回值情況
    6. @throws 異常聲明情況
  • cmd輸出API幫組文件方式

  進到文件位置(namespace位置)
  javadoc -encoding UTF-8 -charset UTF-8 文件名.java【要生成API的java類名】

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 定義 如果希望動態給某個類添加一些屬性或者方法,但是你又不希望這個類派生的對象受到影響,那麼裝飾器模式就可以給你帶來這樣的體驗。 它的定義就是在不改變原對象的基礎上,通過對其進行包裝拓展,使得原有對象可以動態具有更多功能,從而滿足用戶的更複雜需求。 舉個例子,一部手機,你可以買各種花里胡哨的手機殼等 ...
  • 長期以來,我們一直聽說物聯網(IoT)將通過將日常設備連接到互聯網來改變我們的生活和工作方式。雖然物聯網的許多承諾似乎總是 "即將到來",但物聯網設備的激增已經創造了大量的數據,需要實時處理、存儲和分析。我已經說了很多年--實際上已經超過十年了--如果你的物聯網數據不及時、不准確、不具有可操作性,那 ...
  • 這篇文章主要描述硬體同步原語,它是由電腦硬體提供的一組原子操作。 我們常見的原語操作有CAS和FAA兩種。在某些情景下,我們可以使用它來替代鎖,從而更加安全高效的操作數據。 ...
  • 這篇文章主要關註分散式鎖,包括加鎖和解鎖的過程,鎖的用法,加鎖帶來的代價,對性能的影響以及如何避免死鎖。 ...
  • 1. 性能優化是圍繞工具展開的 1.1. 最重要的工具大都是Java開發工具包(JDK)自帶的 1.2. 查看應用程式性能時,首先應該考察的就是CPU時間 2. 操作系統工具 2.1. Unix系統 2.1.1. sar(System Accounting Report)及其組成工具 2.1.2.  ...
  • Java 比較(==, equals) 一、= = ==:比較兩個對象的引用是否是同一個地址 二、equals object中equals方法調用的就是==,可以在其他類中重寫該方法。 三、為什麼要重寫equals要重寫hashcode方法 因為散列集合插入對象時會進行判斷,先調用hashcode, ...
  • 大家好,我是3y啊。 大概不知道從什麼時候,「微服務」「分散式」這兩個詞又再次頻繁出現在我的視線里。 「微服務」「分散式」在我剛畢業的時候還是比較關註的,那時候還入門了一把SpringCloud,寫了一篇很長的文章,還是很頂的,有不少的大號都給我轉載了,在知乎又獲得了很多的贊。 那時候覺得懂「分散式 ...
  • 這篇文章記錄了Collection集合,List集合,Set集合 在文章第七點總結了兩大系列集合的五種實現類的區別,有需要的小伙伴可以直接去查看 一、什麼是集合 集合是Java中存儲對象數據的一種容器 二、集合有什麼特點 大小不固定,類型也可以不固定(通常需要泛型約束) 集合只能存儲引用數據類型 集 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...