java和php基礎部分相同或異同

風來了發表於2016-10-02

拿著JAVA參考書,一章一章的走過
目前先整理這麼多
風.fox

程式設計正規化:

Java:純物件導向的語言,有人說過:Java中一切皆物件!當然咯,人們都忘了Java的八種基本資料型別:int、double、boolean、byte、float、 long、short、char。但是念在每個Java每個基本資料型別都有包裝類(int的包裝類是Integer)的基礎上,就姑且認為一切是物件吧。

PHP:即使用可物件導向的方式程式設計,又可使用程式導向的方式。這種兩種程式設計正規化結合的語言代表了計算機語言以後的一個發展趨勢,在Scala、Golang、Python中都有體現。

OOP 物件導向

封裝
繼承
多型

執行入口方法

JAVA中程式入口是 main方法,沒有則報錯
PHP中不需要入口方法,隨時都可以執行
JAVA

class main{
    public static void main(String args[]){
        /......
    }
}

基本元素

JAVA或PHP程式
是由空白符,識別符號,字面值,註釋,運算子,分隔符以及關鍵字組合而成

空白符

可以是空格,製表符,換行符
JAVA和PHP 都相同

識別符號

識別符號用於命名事物,例如類,變數以及方法。
識別符號可以是大寫或者小寫字母,數字,下劃線,美元符號等字元組成的任意字元序列
不能以數字開頭,防止與數值產生混淆
都是大小寫敏感的
PHP唯一與JAVA不同的是 變數要以$號為開頭,其他都相同

字面值

資料型別中介紹

註釋

// 或者 /* */ 註釋方式
PHP和JAVA是相同的

分隔符

() {} [] ; , . (JAVA)
() {} [] ; , / -> :: (PHP)
java 和PHP 從 . 號開始不一樣,
JAVA 中 . 用於將包的名稱與子包以及類的名稱分隔開,也可以用於將變數或方法與引用變數分隔開。
如果在PHP中,“”用於將包的名稱與子包以及類的名稱分隔開,“->”用於將變數或方法與引用變數分隔開。
PHP中 :: 是靜態引數(變數,常量,方法)與引用變數或者類分割開
(我覺得PHP中,不用 . 分隔符是語言設計中永遠的一個痛)

關鍵字

JAVA和PHP中的關鍵字部分相同

資料型別

java是編譯型強型別的語言,變數必須宣告型別
php是解釋型弱型別的語言,變數不必宣告型別

基本型別

整型
浮點型
字元型
布林型

整形

java

名稱      長度(寬度)
byte     8
short    16
int      32
long     64

整形字面值中可以嵌入一個或多個下劃線(程式編譯時,自動忽略下劃線),方便閱讀。
下劃線只能用於分割數字,不能位於字面值的開頭和結尾。

int x = 123_12__123;

php

int      長度與平臺有關,32位平臺,64位平臺

浮點型

JAVA

double    64           雙精度
float     32           單精度

字面值中可以嵌入一個或多個下劃線(程式編譯時,自動忽略下劃線),方便閱讀。
下劃線只能用於分割數字,不能位於字面值的開頭和結尾。

double num = 9_12__23.2__123_23;

PHP

float      長度與平臺有關,32位平臺,64位平臺

字元型

布林型

JAVA 和PHP 相同

PHP特有資料型別(也可以說分類不同吧)

Array 陣列
Object 對
Resource 資源型別
NULL
Callback 回撥型別

變數

java是編譯型強型別的語言,變數必須宣告型別
php是解釋型弱型別的語言,變數不必宣告型別,且$符號作為變數的字首
變數可以是大寫或者小寫字母,數字,下劃線,美元符號等字元組成的任意字元序列
java 和php 區分大小寫,賦值,變數的作用範圍,成員變數與區域性變數(作用同,使用方法不同)這些方式相同

JAVA

int x = 123123;
int a;      //初始化

java 變數宣告不能以數字開頭
有很多保留關鍵字

PHP

$x   = 123123;

開頭)

陣列

JAVA

int arr[];
int arr2[]=new int[12];
int duo[][]=new int[9][3];

PHP

php中最強大的就是陣列

$arr=[];
$arr2=[1,2,3];
$duo=[[1,2,3],[3,3,4]];
$sss=[[`A`=>`c`,`h`=>`d`],[`b`=>`d`]];

運算子

JAVA

算術執行符:+、-、*、/、%
賦值執行符:+=、-=、*=、/=、%=
自增/自減執行符:++、–
關係運算子:==、>、<、>=、<=、!=
邏輯執行符:&&、||、!、^

PHP(包括上面的,還有)

型別運算子:instanceof
陣列運算子:+、==、===、!=、<>、!==
字串運算子:+
執行運算子:“
錯誤控制執行符:@

位運算子

三元運算子

JAVA和PHP都一樣

控制語句

if else

JAVA

if(a ==1){
}else if(a ==2){
}else if(a ==3){
}else{
}

PHP(包括上面的,還可以寫成)

if($a ==1){
}elseif($a ==2){
}elseif($a ==3){
}else{
}

switch

可以是數值,字元型別
java 和 PHP 幾乎相同

迴圈語句

for,while,do while
java和php基本使用方法都相同

java for 的 foreach 版本

int nums[]={1,2,3,4,5,6};
int sum=0;
for(int x: nums){
    sum+=x;
}

PHP foreach

$nums=[1,2,3,4,5,6];
$sum=0;
foreach($nums as $x){
    $sum+=$x;
}

跳轉語句

break
continue
return
java 和php 基本寫法相同

java 版 break 的 goto版本

less: {
    for(int i=0;i<10;i++) 
    { 
      ........
      break less; 
     }
 }

PHP goto

less: {
    for($i=0;$i<10;$i++) 
    { 
      ........
     goto less; 
     } 
 }

java每個類會生成一個.class檔案
php每個檔案為.php檔案

類修飾符

abstract(同)
final(同)
public(PHP沒有)

變數修飾符:

靜態變數修飾符 static(同)
靜態初始化器 static{}(PHP沒有)
最終常量 final(同) (建議用static代替)
易失變數 volatile(PHP沒有)

方法修改飾

抽象方法 abstract(同)
靜態方法 static (同)
最終方法 final(同)
本地方法 native(PHP沒有)
多執行緒同步方法 synchronized(PHP沒有)

訪問控制符,JAVA比PHP多了包的概念

JAVA的public可以修改類,PHP不可以;其他相同
JAVA的預設是同一包中可見,PHP預設是任何地方可見

類或方法的引用

java是使用”.”點號引用屬性與方法,
PHP是使用”->”引用屬性與方法,沒有點號用法

JAVA

class Box{
    int width;
    int height;
    public Box(int w,int h){
    }
    public Box(){
    }
}
Box mybox3;//宣告
mybox3=new Box();//例項化
Box mybox=new Box();// 宣告
Box mybox2=new Box(10,20);// 宣告

java的class可以定義為public,此時檔名要與公共類完全一致,PHP中沒有這個功能,如果不包含公共類,則class與PHP宣告一樣

php

class Box{
    private $width;
    private $height;
    public __construct(int $w,int $h){
    }
}
$mybox2=new Box(10,20);// 宣告

方法

JAVA有返回值型別,PHP必須有關鍵字function
JAVA中的main(String args[])特殊方法,php中沒有

返回值

java

class Box{
    int width;
    int height;
    public Box(int w,int h){
    }
    public Box(){
    }
    public int show(){
    }
    public static void main(String args[]){
    }
}

建構函式

java

JAVA 中建構函式的名稱和包含他的類的名稱相同,並在語法上和方法類似。因為方法支援過載,所有可以由多個建構函式

class Box{
    int width;
    int height;
    public Box(int w,int h){
    }
    public Box(){
    }
}
Box mybox3;//宣告
mybox3=new Box();//例項化
Box mybox=new Box();// 宣告
Box mybox2=new Box(10,20);// 宣告

PHP

php 中方法不支援過載,所以只能有一種,如果需要更多,可以通過其他方式實現

class Box{
    private $width;
    private $height;
    public function __construct(int $w,int $h){
    }
}
$mybox2=new Box(10,20);// 宣告

物件銷燬

java和php 中使用方式相同

JAVA finalize 方法銷燬物件

class Box{
    int width;
    int height;
    public Box(int w,int h){
    }
    public Box(){
    }
    protected void finalize(){
        //
    }
}

PHP

class Box{
    private $width;
    private $height;
    public function __construct(int $w,int $h){
    }
    public function __destruct () {
    echo "clear";
    }
}

this表示當物件

Java的this 表示當物件,一般情況下不必寫
PHP也使用this表示當物件,這點相同

PHP使用self表示當前類,Java沒有這個關鍵字,也不需要使用表示類
PHP在呼叫本類中的靜態變數和方法時,必須使用self關鍵字和::,JAVA中直接使用

方法過載

JAVA支援方法過載,PHP不支援

class Box{
    int width;
    int height;
    public Box(int w,int h){
    }
    public Box(){
    }
    public int show(int x){
        System.out.println(x);
        return x;
    }
    public double show(double x){
        System.out.println(x);
        return x;
    }
    public String show(String x){
        System.out.println(x);
        return x;
    }
}
class Show{
    public static void main(String args[]){
        Box box=new Box(10,30);
        box.show("字元");
        box.show(10);//整型
        box.show(10.123);//浮點型
    }
}

建構函式過載

JAVA支援建構函式過載,PHP不支援

class Box{
    int width;
    int height;
    public Box(int w,int h){
    }
    public Box(){
    }
    public int show(int x){
        System.out.println(x);
        return x;
    }
    public double show(double x){
        System.out.println(x);
        return x;
    }
    public String show(String x){
        System.out.println(x);
        return x;
    }
}
class Show{
    public static void main(String args[]){
        Box box=new Box(10,30);
        Box box2=new Box();
    }
}

將物件用作引數

java和PHP都支援

JAVA

class Box{
    int width;
    int height;
    public Box(int w,int h){
    }
    public Box(){
    }
    public Box(Box ob){
        width=ob.width;
        height=ob.height;
    }
    public int show(int x){
        System.out.println(x);
        return x;
    }
    public double show(double x){
        System.out.println(x);
        return x;
    }
    public String show(String x){
        System.out.println(x);
        return x;
    }
}
class Show{
    public static void main(String args[]){
        Box box=new Box(10,30);
        Box clone_box=new Box(box);
    }
}

PHP

class Box{
    private $width;
    private $height;
    public function __construct($w=0,$h=0){
        $this.width=$w;
        $this.height=$h;
    }
    public function setData(Box $box){
        $this.width=$box.width;
        $this.height=$box.height;
    }
    public function __destruct () {
        echo "clear";
    }
}
$box=new Box(10,20);
$clone_box=(new Box())->setData($box);

返回物件

java 和php中返回物件 相同

包(名稱空間)

java中叫包
PHP中叫名稱空間

JAVA

package com.fox.lanmp;
class Box{
}

php

namespace comfoxlanmp;
class Box{
}

包 引用

java

java 中 引用關鍵詞 import
單獨引用:import packageName.className;
包引用:import packageName.*;

package com.fox.lanmp;
import com.fox.util;
import com.fox.service.*;
class Box{
}

php

php 中名稱空間 引用關鍵詞 use;
單獨引用 use packageNameclassFile;
多個引用 use packageName{classFile,classFile2};
php中沒有包引用

namespace comfoxlanmp;
use somenamespace{ClassA, ClassB, ClassC as C};
use function somenamespace{fn_a, fn_b, fn_c};
use const somenamespace{ConstA, ConstB, ConstC};
class Box{
}

介面和抽象類

java 和php 中 相同,某些寫法不同

異常處理

JAVA和PHP 相同

JAVA

try {
    // some code
} catch (SecondException e) {
    // handle first and second exceptions
} catch (Exception e) {
    // ...
} finally{
//
}

php

try {
    // some code
} catch (FirstException | SecondException $e) {
    // handle first and second exceptions
} catch (Exception $e) {
    // ...
} finally{
//
}

丟擲異常 throw

throw 關鍵詞
java和PHP相同

方法 異常 throws

PHP中沒有,JAVA中有
如果方法肯能引發自身不進行處理的異常,就必須指明這種行為,以便方法的呼叫者能夠保衛他們自己以防備上述異常。可以通過在方法宣告中提供throws子語句來完成該任務。

class Demo{
     static void one throws IllegalAccessException{
         System.out.println("one");
         throw new IllegalAccessException("Demo");
     }
     public static void main(String args[]){
         try{
             one();
         }catch(IllegalAccessException e){
             System.out.println("CAUGHT " +e);
         }
     }
}

泛型

泛型,即“引數化型別”。
JAVA特有,PHP 沒有

public class Container<K, V> {
    private K key;
    private V value;

    public Container(K k, V v) {
        key = k;
        value = v;
    }

    public K getKey() {
        return key;
    }

    public void setKey(K key) {
        this.key = key;
    }

    public V getValue() {
        return value;
    }

    public void setValue(V value) {
        this.value = value;
    }
}

public class Main {

    public static void main(String[] args) {
        Container<String, String> c1 = new Container<String, String>("name", "findingsea");
        Container<String, Integer> c2 = new Container<String, Integer>("age", 24);
        Container<Double, Double> c3 = new Container<Double, Double>(1.1, 2.2);
        System.out.println(c1.getKey() + " : " + c1.getValue());
        System.out.println(c2.getKey() + " : " + c2.getValue());
        System.out.println(c3.getKey() + " : " + c3.getValue());
    }
}

輸出
name : findingsea
age : 24
1.1 : 2.2


相關文章