1. 程式人生 > >一些Java基礎知識

一些Java基礎知識

資料型別

(由於有很多是與c語言的資料型別相同,所以不做具體講述)

*注意:

(1)Java中,整型資料的長度與平臺無關,而c/c++整型資料的長度是與平臺相關的。

(2)不同於c/c++,Java不支援無符號型別(unsigned).

資料型別轉換

資料型別的轉換,分為自動轉換和強制轉換。自動轉換是程式在執行過程中“悄然”進行的轉換,不需要使用者提前宣告,一般是從位數低的型別向位數高的型別轉換;強制型別轉換則必須在程式碼中宣告,轉換順序不受限制。

強制型別轉換:強制轉換的格式是在需要轉型的資料前加上“( )”,然後在括號內加入需要轉化的資料型別。有的資料經過轉型運算後,精度會丟失,而有的會更加精確,下面的例子可以說明這個問題。

Java流程控制

Java流程控制的語法與 C/C++ 類似,也有 if...elsewhiledo...whileforswitch...case等,這裡不再具體講述。

為大家分享一個例子:九乘九乘法表

執行結果

數    組

與C、C++不同,Java在定義陣列時並不為陣列元素分配記憶體,因此[ ]中無需指定陣列元素的個數,即陣列長度。而且對於如上定義的一個數組是不能訪問它的任何元素的,我們必須要為它分配記憶體空間,這時要用到運算子new,其格式如下:
    arrayName=new type[arraySize];
其中,arraySize 為陣列的長度,type 為陣列的型別。

字   符   串

String stringName ="liudongqing ";

字串可以通過“+”連線,基本資料型別與字串進行“+”操作一般也會自動轉換為字串,

String字串與陣列有一個共同點,就是它們被初始化後,長度是不變的,並且內容也不變。如果要改變它的值,就會產生一個新的字串,如下所示:

String str ="Hello ";

str +="World!";

String str = "Hello";

str += "World!";

這個賦值表示式看起來有點像簡單的接龍,在str後面直接加上一個“World!”字串,形成最後的字串“Hello World!”

。其執行原理是這樣的:程式首先產生了str1字串,並在記憶體中申請了一段空間。此時要追加新的字串是不可能的,因為字串被初始化後,長度是固定的。如果要改變它,只有放棄原來的空間,重新申請能夠容納“Hello World!”字串的記憶體空間,然後將“Hello World!”字串放到記憶體中

String的值是不可變的,每次對String的操作都會生成新的String物件,不僅效率低,而且耗費大量記憶體空間。

StringBuffer
類和String類一樣,也用來表示字串,但是StringBuffer的內部實現方式和String不同,在進行字串處理時,不生成新的物件,在記憶體使用上要優於String

StringBuffer
預設分配16位元組長度的緩衝區,當字串超過該大小時,會自動增加緩衝區長度,而不是生成新的物件。

StringBuffer
不像String,只能通過 new 來建立物件,不支援簡寫方式,例如:

StringBuffer str1 = new StringBuffer();// 分配16個位元組長度的緩衝區

StringBuffer str2 = =new StringBuffer(512);// 分配512個位元組長度的緩衝區

// 在緩衝區中存放了字串,並在後面預留了16個位元組長度的空緩衝區

StringBuffer str3 = newStringBuffer("www.weixueyuan.net");

Java中的類可以看作c語言中結構體的升級版,它的成員不僅可以是變數,還可以是函式。通過類定義的變數叫做“物件”。

C語言中的結構體

struct Student{

// 結構體包含的變數

char *name;

int age;

float score;

};

Java中的類的實現

public class Student{  // 通過class關鍵字類定義類

// 類包含的變數

String name;

int age;

float score;

// 類包含的函式

void say(){

System.out.println( name + "的年齡是 " + age + ",成績是 " + score );

}

}

*c語言中通過結構體名臣就可以完成結構體變數的定義,並分配記憶體空間;但是在Java中,不會分配記憶體空間,必須通過new關鍵字完成記憶體空間的分配。

可以將類比喻成圖紙,物件比喻成零件,圖紙說明了零件的引數及其承擔的責任;一張圖紙可以生產出同一種類型的零件;不同圖紙可以生產不同型別的零件。

Java中,使用new關鍵字,就可以通過類來建立物件,這個過程叫做類的例項化,物件是類的一個例項。

Student stu=new Student();

*:類只起到說明的作用,不佔用記憶體空間

類所包含的變數稱為“屬性”,函式成為“方法”。

一個類可以包含以下型別變數

區域性變數:在方法或者語句塊中的變數成為區域性變數。變數宣告和初始化都是在方法中,方法結束後,變數會自動銷燬。

成員變數:定義在類中,方法體之外的變數。

類變數:宣告在類中,方法體之外,但必須宣告為static型別。

構造方法

程式碼實現

/**
 
* Created by LDQ on 2017/4/27.
 */
public class structure2 {
    public String name;
    public int age;
   
structure2(String name,int age){

       
this.name=name;
       
this.age=age;
       
System.out.println("構造方法系統自動呼叫!");

   
}
    public  void get(){

        System.out.println(name+age);
   
}
    public static void main(String args[]){
       
structure2 ldq=new structure2("劉東清",20);
       
System.out.println("我在學習Java的構造方法!");
        ldq.get();
    }
}

*注意:

(1)構造方法不能被顯示呼叫

(2)構造方法沒有返回值

談談訪問修飾符

訪問控制和繼承

在子類中的訪問許可權不能低於父類中的訪問許可權。

Java變數的作用域

Java中,變數的作用域分為四個級別:類級、物件例項級、方法級、塊級。
類級變數又稱全域性級變數或靜態變數,需要使用static關鍵字修飾。類級變數在類定義後就已經存在,佔用記憶體空間,可以通過類名來訪問,不需要例項化。
物件例項級變數就是成員變數,例項化後才會分配記憶體空間,才能訪問。
方法級變數就是在方法內部定義的變數,就是區域性變數。
塊級變數就是定義在一個塊內部的變數,變數的生存週期就是這個塊,出了這個塊就消失了,比如 iffor 語句的塊。塊是指由大括號包圍的程式碼

/**
 * Created by LDQ on 2017/4/27.
 */
  public class zuoyongyu {
    public static String name = "劉東清"// 類級變數
    public int i; // 物件例項級變數
  
    // 屬性塊,在類初始化屬性時候執行
    {
        int j = 2;// 塊級變數
    }
  
    public void test1() {
        int j = 3// 方法級變數
        if(j == 3) {
            int k = 5// 塊級變數
        }
        // 這裡不能訪問塊級變數,塊級變數只能在塊內部訪問
        System.out.println("name=" + name + ", i=" + i + ", j=" + j);
  
        //System.out.println(k)  ;此處訪問會報錯
    }
  
    public static void main(String[] args) {
        // 不建立物件,直接通過類名訪問類級變數
        System.out.println(zuoyongyu.name);
  
        // 建立物件並訪問它的方法
        zuoyongyu t = new zuoyongyu();
        t.test1();
    }
  
}

繼     承

一個新類從已有類獲得屬性和方法,這種現象叫做繼承。

Java只支援單繼承,不允許多繼承。

單繼承是指一個子類只有一個父類。

多繼承是指一個子類可以有多個父類。

繼承的好處:

  1. 為多型創造條件

  2. 程式碼重用

  3. 形成類的一種層次體系結構

繼承許可權問題

子類中的所有方法內部可以訪問父類中除私有成員外的所有成員。*注意:無法繼承構造方法,在子類的構造方法中,可以通過super(引數列表)呼叫父類構造方法,且只能放在構造方法內的第一句。

通過子類物件可以訪問:

  1. 子類本身的所有成員

  2. 父類除私有成員以外的成員

子類可以繼承父類除私有成員外的所有成員。

方法重寫

指在子類中重新定義父類中已有的方法。

重寫方法和被重寫方法有相同的返回值型別,引數列表,方法名稱。

重寫方法時,不能使用被重寫方法更低的訪問許可權。

多   態

一個父類的引用變數既可以指向父類物件也可以指向子類物件,它可以根據當時指向的不同,呼叫不同時刻指向的不同,自動呼叫不同物件,這就是多型。

/**
 
* Created by LDQ on 2017/4/28.
 */
class A{
    public void display(){
       
System.out.println("AAA");
   
}
}
class B extends A{

   
public void display(){
       
System.out.println("BBB");
   
}
}
public class duotai {
   
public static void main(String[] args){
       
A aa=new A();
       
aa.display();
        aa=new B();
       
aa.display();
    }
}

*注意:

(1)子類物件可以賦值給父類引用,但父類物件不能賦值給子類引用。

(2)  通過父類引用只能訪問子類物件從父類繼承過來的成員,不能訪問子類特有成員。

靜態成員屬於類本身,即使不建立物件,也可以通過類本省來訪問static成員。

靜態成員分為:

  1. 靜態資料成員

  2. 靜態成員方法

呼叫靜態成員的方法:

  1. 類名.靜態成員名

  2. 類物件名.靜態成員名

示例:通過一個static成員,統計總共建立了多少個物件

/**
 
* Created by LDQ on 2017/4/28.
 */
public class tongji {
    public  String name;
   
public  static int count =0;
   
tongji(String name){

        this.name=name;
       
count++;

   
}

    public static void main(String[] args){

       
tongji obj1=new tongji("張三");
        tongji obj2=new tongji("李四");
        tongji obj3=new tongji("王五");
        tongji obj4=new tongji("錢六");
        tongji obj5=new tongji("馬七");
        System.out.println(count);
   
}
}

在靜態方法中只能直接呼叫同類中的靜態成員,而不能直接訪問類中的非靜態成員。

靜態方法只能訪問靜態成員,但非靜態方法可以訪問靜態成員。

靜態方法中不能以任何形式引用this和super關鍵字。

*注意:static型別的成員記憶體不會被自動回收,容易造成記憶體洩漏。

 

抽  象   類

抽象類通常用來作為一個類族最頂層的父類。

抽象類:

  1. 用abstract關鍵字來修飾一個類時,該類則是抽象類。

  2. 包含抽象方法的類必須宣告為抽象類。

  3. 抽象類可以不包含抽象方法。

  4. 有抽象方法的一定是抽象類。

  5. 不能new出抽象類物件。

抽象方法:

  1.      只給出方法的方法頭,不給出具體的實現。

  2.      凡是沒有方法體的方法必須加abstract關鍵字修飾為抽象方法。

可以將子類物件的地址賦給抽象類的引用,通過抽象類的引用呼叫子類從父類繼承的方法,即通過抽象類實現多型。

示例:

/**
 
* Created by LDQ on 2017/4/28.
 */

abstract class A{
    public abstract void f();

}
class B extends A{
   
public void f(){

       
System.out.println("就是這樣");
   
}

}
public class chouxiang {
   
public static void main(){

       
A aa=null;
       
aa=new B();
       
aa.f();
    }
}

Final

Final可以修飾:

  1. 整個類

  2. 類中的若干屬性和方法。

final 修飾整個類時表示該類不可被繼承。

public final class A{……};

final 修飾類中的屬性時,表示該屬性必須被賦初值,且只能賦一次。

初始化的方法:

  1. 定義變數的同時初始化

  2. 在建構函式中初始化

*注意:類中所有的普通方法均不可修改被宣告為final的成員變數的值。

修飾類中的方法時,表示該方法可被繼承,但不可重寫。

介面(interface)

就是抽象方法和常量值的集合。

介面中定義的屬性必須是public static final型別的,方法必須是public abstract的。

介面中的屬性不可被修改。

一個類只能實現介面,不能繼承介面。但一個介面可以繼承一個介面,且允許多繼承。

如果一個類只實現了一個介面的部分方法,該類必須

宣告為抽象類。

一個類在繼承父類的同時可以實現一個或多個介面,但extends必須在implements之前。

不可以new一個介面物件,但可以定義一個介面引用型別的變數並將其指向實現介面的物件,從而達到多型度的目的。

/**
 
* Created by LDQ on 2017/4/29.
 */
interface A{
    void f();



}
class B implements A{
   
public void f()         //此處的public 很關鍵
   
{

       
System.out.println("nihao");
   
}
}
public class inter {
   
public static void main(String[] args)
   
{
        A obj1=new B();     //不可以new介面物件,但可以通過介面物件的引用指向實現介面的物件
       
B obj=new B();
       
obj.f();
        obj1.f();
    }

}

介面與抽象類的區別:

  1. 介面中的方法不允許有方法體,但抽象類中卻允許。

  2. Java類不允許多繼承,但介面允許多繼承。

 

相關推薦

一些Java基礎知識

資料型別 (由於有很多是與c語言的資料型別相同,所以不做具體講述) *注意: (1)Java中,整型資料的長度與平臺無關,而c/c++整型資料的長度是與平臺相關的。 (2)不同於c/c++,Java不支援無符號型別(unsigned). 資料型別轉換 資料型別的轉換,分

Java基礎知識中的一些關鍵字

  1、break關鍵字:   break 語句用於終止最近的封閉迴圈或它所在的switch 語句。控制傳遞給終止語句後面的語句(如果有的話)。 適用:for迴圈 、 switch兩種迴圈語句。 break的用法: 1.  單獨使用。

一些必須知道的JAVA基礎知識

作為一名Android開發人員,面試的時候也會經常被問到一些java基礎方面的。這就前段時間面試中遇到的一些java方面的,可能不全,只是我面試中遇到的。 寫這篇部落格只是為了自己在以後的

Java基礎知識二次學習--第八章 流

cti 註意 spa 基礎 2個 cnblogs images 方向 視頻 第八章 流 時間:2017年4月28日11:03:07~2017年4月28日11:41:54 章節:08章_01節 視頻長度:21:15 內容:IO初步 心得: 所有的流在java.io包裏面

java基礎知識應用--雙色球開獎號碼

雙色球開獎 java基礎 開獎號碼 public   雙色球是中國福利彩票的玩法,雙色球分為紅色球號碼區和藍色球號碼區,紅色球號碼區由1-33共33個號碼組成,藍色球號碼區由1-16共16個號碼組成,開獎號碼由6個不重復的紅色球號碼和1個藍色球號碼共7個數組成。  首先要設置三個數組來分別保存

JAVA 基礎知識 第二波~

部分 申請 ava 去掉 nbsp 特定 spa family 語言 Java 之Java概述 1.計算機語言發展史 第一代 打孔器-- 純機器語言 第二代 匯編 第三代 C,Pascal,Fortran 面向過程的語言

Java基礎知識整理(一)

顯式 sys 轉換 強制 print pri 字符 parse ger Java開發環境JDK(Java編輯器、Java運行工具(JRE作用)、Java文檔生成工具、Java打包工具) 1.Java是嚴格區分大小寫的。2.Java程序中一句連續的字符串不能分開在兩行書寫,

java基礎知識匯總6(html篇)

多個 替代 設置 func 粗體 mage java基礎 scrip option 五、html // 定義文檔類型。 < html> 定義 HTML 文檔。 < body> 定義文檔的主體。 < h1> t

Java基礎知識Java知識簡介

構造方法 sign () 結束 字母 信息 set 需要 double 一、java基礎語法:   一個Java程序可以認為是一系列對象的集合,而這些對象通過調用彼此的方法來協同工作。下面簡要介紹下類、對象、方法和實例變量的概念。 對象:對象是類的一個實例,有狀態和行為。例

Java基礎知識_畢向東_Java基礎視頻教程筆記(5-10)

efi color 逗號 ret 語句 簡單的 靜態成員 throws 解決 06天-05-面向對象(幫助文檔的制作javadoc):java文檔生成命令:javadoc -d filepatn demo.java -author -version(可選)一個類中默認會

java基礎知識積累總結

發生 數據 相互轉換 移動智能終端 產生 包含 dep while 順序 參考:http://www.importnew.com/22083.html 參考:http://www.importnew.com/22087.html 十分感謝原作者的匯總,我在這個基礎上,有所改

Java基礎知識_畢向東_Java基礎視頻教程筆記(13)

書寫 線程 定位 obi binarys hexstring 替換 ringbuf 3.5 13天-01-String  String類適用於描述字符串事物。  常見的操作:1.獲取:   1.1字符串中包含的字符數,也就是字符串的長度。 int length():獲取長度

java基礎知識之圖形程序設計-1

public clas location image ima 線程 圖形用戶界面 位置 title 經過一段時期java語法的學習,從現在開始,我將進行圖形用戶界面(GUI)的java程序學習。以下是我對此的一點學習筆記。 在java1.0出現初期,采用了A

java基礎知識--繼承

但是 port [] 3.1 語句 ring 都是 -c ffffff 繼承   1、繼承的概念 繼承是java面向對象編程技術的一塊基石,因為它允許創建分等級層次的類。 繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使

Java基礎知識思維導圖

-a log 思維 data box csdn disable clas ava Java基礎知識思維導圖

java基礎知識學習--------之枚舉類型(1)

blog 枚舉類型 csdn 相同 名稱 枚舉類 java string pac 枚舉類型的概念: 1 /** 2 * 目的:枚舉類型 3 * @author chenyanlong 4 * 日期:2017/10/22 5 * 網址:http://blo

模擬QQ聊天與視頻聊天同時進行-------java基礎知識總結

span img mage java基礎知識 java基礎 @override args pub spa 前言:多線程的知識 代碼: 1 package com.day13.math; 2 /** 3 * 類說明 :模擬QQ聊天與視頻聊天同時進行 4 * @a

集合框架基礎知識-----java基礎知識

訪問 java集合框架 pan 至少 組成 常見 .get htable equals Java集合框架 :接口:Collection、List 、Set、 Map;實現類:ArrayList、LinkedList、Vector、HashSet、TreeSet、HashMa

core Java基礎知識匯總

java基礎collection和collections有什麽區別?collection是一個接口集合,它提供了一系列對集合對象進行操作的通用接口方法,設計這個接口的目的是為各種不同的集合提供一個統一的接口方法。collections是集合類的一個包裝類,它提供了一系列靜態的方法和對集合進行索引、排序、線程安

構造方法和一般方法的區別(面試)-----java基礎知識總結

col 進行 span round 構造方法 基礎知識 fff font size 構造方法:對象創建時,就會調用與之對應的構造方法,對對象進行初始化; 一般方法:對象創建後,需要方法功能時才會調用。 構造方法,在對象創建時,會調用且只調用一次。