java和php基礎部分相同或異同
拿著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
相關文章
- java與php區別或異同(整理、整合)JavaPHP
- java基礎部分Java
- java基礎題(部分)Java
- Java基礎部分6Java
- Java基礎-異常Java
- Java基礎 — 異常Java
- [Java基礎]異常Java
- 機器學習基礎 | 互相關係數和互資訊異同探討機器學習
- java基礎:Exception異常JavaException
- java基礎部分總結2Java
- PHP基礎:異常處理ExceptionPHPException
- Java基礎知識——異常Java
- Java基礎 ---Throwable異常類Java
- 【Java基礎】--異常處理Java
- 面試題收集——Java基礎部分(一)面試題Java
- PHP基礎之錯誤與異常PHP
- 基礎演算法題——異或和之和(位運算、組合數)演算法
- java基礎部分程式碼相關題Java
- Java 基礎(十二)異常機制Java
- JAVA物件導向基礎--異常Java物件
- Java 中 this 和 super 的用法概述及異同Java
- Java中"與"、"或"、"非"、"異或"Java
- 異或線性基
- php面試題之五——MySQL資料庫(基礎部分)PHP面試題MySql資料庫
- Java記憶體模型深度解析:基礎部分Java記憶體模型
- 聊聊Java中的異常(基礎篇)Java
- Java基礎異常整理(持續更新)Java
- Java零基礎之異常(新手必看)Java
- 虛擬機器、容器與沙箱三者的相同與異同虛擬機
- dependencies 和 devDependencies 的異同dev
- PHP 基礎PHP
- PHP基礎PHP
- Java基礎| 類和物件Java物件
- 【Java基礎】類和介面Java
- workman 和swoole 區別 和異同
- 異或線性基小記
- 掌握Java9模組化系統-基礎部分Java
- Java面試八股文01-基礎部分Java面試