基础部分对比
1、结束符:Java中需要定义结束符,在每个语句结束后需要加分号(;)隔开,在Swift中则不需要定义结束符。
2、注释:
单行注释:Java和Swift都用//表示
//这是单行注释
多行注释:Java和Swift都用/**/表示
/*
这是多行注释的第一行
这是多行注释的第二行
*/
Java的文档注释可以嵌套单行注释,但不能嵌套多行注释,也不能嵌套文档注释
/*这是文档注释
*文档注释一
*文档注释二
*文档注释三
*/
Swift的多行注释可以嵌套在多行注释中
/*这是一个多行注释
/*这是被嵌套的多行注释第一行
这是被嵌套的多行注释第二行
这是被嵌套的多行注释的结尾*/
这是多行注释的结尾*/
3、变量:Java中用具体数据类型直接声明变量,而Swift中用var声明变量,具体的数据类型可以指定,也可以不指定,不指定时编译器会自行识别,遇到编译器无法判断的情况则需要显式指定。
Int a = 1; //Java中定义一个名为a,类型为Int,初始值为1的变量
var a = 1 //Swift中定义一个名为a,值为1的变量,编译器自动识别数据类型为Int
var a: Int = 1 //显式指定a的数据类型为Int
4、常量:Java中声明常量用final关键字加具体数据类型,Swift中用let声明常量,与变量相似,具体的数据类型可以不指定。
final Int b = 2; //Java中定义一个名为b,类型为Int,值为2的常量
let b = 2 //Swift中定义一个名为b,值为1的常量,编译器自动识别数据类型为Int
let b: Int = 2 //显式指定b的数据类型为Int
类(class)和结构体(struct)对比
定义
Java中以类为主,没有结构体的概念,Swift中类和结构体都有,但结构体是值类型,类是引用类型。
class Dog { //定义一个名为Dog的类
Int age; // Dog类里有类型为Int的age属性
String name; // Dog类里有类型为String的name属性
}
class Car { // 定义一个名为Car的类
var color: String = "black" // 类中有类型为String的color属性,默认值为black
var brand: String = "BMW" // 类中有类型为String的brand属性,默认值为BMW
}
struct Cat { // 定义一个名为Cat的结构体
var age: Int = 1 // 结构体中有类型为Int的age属性,默认值为1
var name: String = "cute" // 结构体中有类型为String的name属性,默认值为cute
}
创建实例
Java中用new关键字来创建类的实例,语法如下:
类名 对象名 = new 类名()
// 创建上述示例中Dog类的实例
Dog myDog = new Dog()
Swift中创建实例不需要new关键字,语法如下:
let myCar = Car() // 创建上述示例中Car类的实例
let myCat = Cat() // 创建上述示例中Cat结构体的实例
optional
Optional 用于表示该对象可能为空的情况,Swift中用?表示该对象是optional,当有值时返回该值,没有值时返回nil。
Java的optional是一个类,且在Java8时才引入,在此之前,如果定义了某个对象,但是后续该对象为空,会出现报错。引入optional后,可以减少很多关于对象是否为空的判断。Java的optional可以保存类型T的值,也可以保存null。
Swift创建optional对象
var a: Int? // 创建一个名为a,类型为Int?的变量,a可以是任何Int类型的值,也可以为空
Java可以调用类方法来创建optional对象
- Optional.ofNullable方法:类似swift中的optional,对象可以有值也可以为空
// 创建一个名为a,类型为String的对象
Optional<String> a = Optional.ofNullable(“value”); // 当a有值时
Optional<String> b = Optional.ofNullable(null); // 当a为空时
- Optional.of方法:返回一个值一定不为null的optional
Optional<String> c = Optional.ofNullable(“value”); // 如果a为null会报错
- Optional.empty方法:返回一个空的optional
Optional<String> d = Optional.ofNullable(null); // 如果a有值会报错
此外,Optional.isPresent 方法可以用来判断上述创建的对象的值是否为空
System.out.println(a.isPresent)
System.out.println(b.isPresent)
System.out.println(c.isPresent)
System.out.println(d.isPresent)
// 输出结果依次为 true,false,true,false
访问控制修饰符
Java访问权限修饰符
- public:对所有类可见,用于修饰类、接口、变量、方法。
- protected:对同一包内的类和所有子类可见,用于修饰对象、变量、方法,不能用于修饰类。
- default:在同一个包内可见,可用于修饰类、接口、变量、方法。(什么都不写的情况下默认修饰符)
- private:在同一类内可见,可用于修饰变量、方法,不能用于修饰类。
Swift访问权限修饰符
- public:可以访问自己模块中源文件里的任何实体,别人也可以通过引入该模块来访问源文件里的所有实体。
- internal:可以访问自己模块中源文件里的任何实体,但是别人不能访问该模块中源文件里的实体。(什么都不写的情况下默认修饰符)
- fileprivate:文件内私有,只能在当前源文件中使用。
- private:只能在类中访问,离开了这个类或者结构体的作用域外面就无法访问。