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 com\fox\lanmp;
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 packageName\classFile;
多个引用 use packageName{classFile,classFile2};
php中没有包引用

namespace com\fox\lanmp;
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{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

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页