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 some
amespace{ClassA, ClassB, ClassC as C};
use function some
amespace{fn_a, fn_b, fn_c};
use const some
amespace{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
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
Container
Container
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
※sleep()到底睡多久,你知道嗎?
※Web服務分層設計模型
TAG:PHP愛好者 |
※部分Apple Watch 4反覆崩潰和重啟
※webpack各部分怎麼編寫
※聯名Look book 公開!Palace x Ralph Lauren部分單品更新
※Apple 確認部分 iPhone X 屏幕有觸控異常
※部分地區Windows Update出故障
※Apple 確認部分 MacBook Pro 電池存在問題
※Oculus Research更名Facebook Reality Labs,宣布OC3預言部分成真
※Xbox One Skip Ahead測試通道向部分Xbox Insider開放
※部分 Google 員工將針對 Project Dragonfly 進行抗議活動
※「圖」部分三星用戶已嘗鮮Samsung Experience 10 Launcher
※蘋果GymKit體驗:讓健身器材成為Apple Watch的一部分
※Facebook Building 8重組,部分成員加入AR/VR部門
※部分Fitbit用戶反應 無法與安卓9 Pie系統進行同步
※《Produce48》參賽陣容部分確定,想pick誰?
※MR Studios將支持Magic Leap和部分VR頭顯
※OVO 成員 Chubbs 再爆 Drake 部分 Air Jordan PE 收藏!
※《In China》Eve Arnold部分作品欣賞
※Champion Clarkson聯名加入!Supreme第十四周部分發售單品已確認
※Simplygon將支持部分CAD格式
※Taste of Scotland:威士忌是蘇格蘭不可分割的一部分