日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java dart 官司_Dart和Java的区别

發布時間:2025/3/21 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java dart 官司_Dart和Java的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019-03-19 _Dart 2.2.1

首先Dart網站的重要的概念應該看一下:

所有能夠使用變量引用的都是對象, 每個對象都是一個類的實例。在 Dart 中 甚至連 數字、方法和 null 都是對象。所有的對象都繼承于 Object 類。

使用靜態類型(例如前面示例中的 num ) 可以更清晰的表明你的意圖,并且可以讓靜態分析工具來分析你的代碼, 但這并不是牽制性的。(在調試代碼的時候你可能注意到 沒有指定類型的變量的類型為 dynamic。)

Dart 在運行之前會先解析你的代碼。你可以通過使用 類型或者編譯時常量來幫助 Dart 去捕獲異常以及 讓代碼運行的更高效。

Dart 支持頂級方法 (例如 main()),同時還支持在類中定義函數。 (靜態函數和實例函數)。 你還可以在方法中定義方法 (嵌套方法或者局部方法)。

同樣,Dart 還支持頂級變量,以及 在類中定義變量(靜態變量和實例變量)。 實例變量有時候被稱之為域(Fields)或者屬性(Properties)。

和 Java 不同的是,Dart 沒有 public、 protected、 和 private 關鍵字。如果一個標識符以 (_) 開頭,則該標識符 在庫內是私有的。詳情請參考: 庫和可見性。

標識符可以以字母或者 _ 下劃線開頭,后面可以是 其他字符和數字的組合。

有時候 表達式 expression 和 語句 statement 是有區別的,所以這種情況我們會分別指明每種情況。

Dart 工具可以指出兩種問題:警告和錯誤。 警告只是說你的代碼可能有問題, 但是并不會阻止你的代碼執行。 錯誤可以是編譯時錯誤也可以是運行時錯誤。遇到編譯時錯誤時,代碼將 無法執行;運行時錯誤將會在運行代碼的時候導致一個 異常。

變量

可以使用 var 聲明變量( java 10也可以 ) var a = 10;

另外對于動態類型 Dart 還有dynamic 關鍵字

Dart 所有變量如果未初始化都為 null ,不像 java int 的默認值是 0, boolean 的默認值是 false

final 表示不可變,const 表示常量,static 表示的意義相同都是可以直接通過類名的方式使用方法和屬性

內建類型

沒有float類型,int和double都是num的子類

String 字符串內部可以使用表達式 ${},(和kotlin的使用方式一致),使用單引號和雙引號包圍,使用三個單引號或雙引號包圍的字符可以換行,支持emoji表情

var s = 'string interpolation';

var s1 = 'Single quotes work well for string literals.';

var s2 = "Double quotes work just as well.";

var s4 = "That deserves all caps. ${s.toUpperCase()} is very handy!";

var s5 = '''

You can create

multi-line strings like this one.

''';

var s6 = """This is also a

multi-line string.""";

var clapping = '\u{1f44f}'; //😆

沒有數組只有列表,List, Set, Map 不是抽象接口,可以直接使用,并且支持泛形

var list = [1, 2, 3]; // 列表

var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'}; // Set

var gifts = {

// Key: Value

'first': 'partridge',

'second': 'turtledoves',

'fifth': 'golden rings'

}; // Map

方法

支持頂級方法,方法也是對象, 支持 lambda 表達式的寫法

如果方法的參數是解構出來的可以通過 @required 注解標注為必填 const Scrollbar({Key key, @required Widget child})

支持可選參數,可選參數寫在最后并且使用[]包圍 String say(String from, String msg, [String device])

支持默認參數 void enableFlags({bool bold = false, bool hidden = false}) {...}

支持匿名方法(參數){方法體}

var list = ['apples', 'bananas', 'oranges'];

list.forEach((item) {

print('${list.indexOf(item)}: $item');

});

支持閉包

Function makeAdder(num addBy) {

return (num i) => addBy + i;

}

void main() {

// Create a function that adds 2.

var add2 = makeAdder(2);

// Create a function that adds 4.

var add4 = makeAdder(4);

assert(add2(3) == 5);

assert(add4(3) == 7);

}

操作符

as , is, is! :as 類似與強制類型轉換, is 類似 instanceof

空替換??: String playerName(String name) => name ?? 'Guest'; 等價于String playerName(String name) => name != null ? name : 'Guest';

級聯符號 (..) 可以代替構建者模式

var button = querySelector('#confirm');

button.text = 'Confirm';

button.classes.add('important');

button.onClick.listen((e) => window.alert('Confirmed!'));

// 使用級聯操作

querySelector('#confirm') // Get an object.

..text = 'Confirm' // Use its members.

..classes.add('important')

..onClick.listen((e) => window.alert('Confirmed!'));

?.操作符當對象不為空時調用后面的屬性或方法: foo?.a 類似于if( foo != null) f.a;

異常

Dart的異常是不用必須捕獲的

try {} catch有點不一樣

try {

breedMoreLlamas();

} on OutOfLlamasException {

// 只捕獲 OutOfLlamasException

buyMoreLlamas();

} on Exception catch (e) {

// 上面不能捕獲的且是Exception的子類

print('Unknown exception: $e');

} catch (e,s) {

// 其余的所有異常,s ==》 stack trace

print('Something really unknown: $e');

rethrow; //不處理,直接拋出去

}

創建對象可以不使用new關鍵字

可以給構造方法命名

class Point {

num x, y;

Point(this.x, this.y);

// Named constructor

Point.origin() {

x = 0;

y = 0;

}

}

調用父類的構造方法(:)

class Person {

String firstName;

Person.fromJson(Map data) {

print('in Person');

}

}

class Employee extends Person {

// Person does not have a default constructor;

// you must call super.fromJson(data).

Employee.fromJson(Map data) : super.fromJson(data) {

print('in Employee');

}

}

在構造方法的方法體調用之前初始化屬性

import 'dart:math';

class Point {

final num x;

final num y;

final num distanceFromOrigin;

Point(x, y)

: x = x,

y = y,

distanceFromOrigin = sqrt(x * x + y * y);

}

常量構造方法,在構造方法之前使用const修飾,屬性必需是final或者const的

class ImmutablePoint {

static final ImmutablePoint origin =

const ImmutablePoint(0, 0);

final num x, y;

const ImmutablePoint(this.x, this.y);

}

const ca = ImmutablePoint(1,1); // const 修飾的變量 必須是const的構造方法

var a = const ImmutablePoint(1, 1);

var b = const ImmutablePoint(1, 1);

assert(identical(a, b)); // true

factory 修飾的構造方法為工廠方法

class Logger {

final String name;

bool mute = false;

// _cache is library-private, thanks to

// the _ in front of its name.

static final Map _cache =

{};

factory Logger(String name) {

if (_cache.containsKey(name)) {

return _cache[name];

} else {

final logger = Logger._internal(name);

_cache[name] = logger;

return logger;

}

}

Logger._internal(this.name);

void log(String msg) {

if (!mute) print(msg);

}

}

runtimeType 關鍵字 獲取變量運行時的類型 print('The type of a is ${a.runtimeType}'); Dart 的泛形是不擦除的

getter 和 setter: 通過這兩個關鍵字可以自定義屬性的值

class Rectangle {

num left, top, width, height;

Rectangle(this.left, this.top, this.width, this.height);

// Define two calculated properties: right and bottom.

num get right => left + width;

set right(num value) => left = value - width;

num get bottom => top + height;

set bottom(num value) => top = value - height;

}

沒有interfaces關鍵字,每個類都是一個接口

支持操作符重載

操作符

支持重寫noSuchMethod()方法,當對象調用不存在的屬性或方法時該方法會被調用

支持混入mixin, 提供by, mixin, mixin ..on 關鍵字

泛形

Java 運行時會擦除泛形,Dart 不會

var names = List();

names.addAll(['Seth', 'Kathy', 'Lars']);

print(names is List); // true

庫和可見性

Dart 使用 URI 來確定一個庫, 可以給庫添加前綴(使用 as 關鍵詞)

import 'package:lib1/lib1.dart';

import 'package:lib2/lib2.dart' as lib2;

// Uses Element from lib1.

Element element1 = Element();

// Uses Element from lib2.

lib2.Element element2 = lib2.Element();

支持導入部分庫(show),或者隱藏部分庫(hide)

// Import only foo.

import 'package:lib1/lib1.dart' show foo;

// Import all names EXCEPT foo.

import 'package:lib2/lib2.dart' hide foo;

支持懶加載 deferred as

import 'package:greetings/hello.dart' deferred as hello;

Future greet() async {

await hello.loadLibrary();

hello.printGreeting();

}

異步

async, await 關鍵字, 聲明耗時操作,返回值必須是 Future 方法名后用 async 標注, 調用耗時操作時需要使用 await 關鍵字,并且在 async標注的方法中

Future lookUpVersion() async => '1.0.0';

Future checkVersion() async {

var version = await lookUpVersion();

// Do something with version

}

Stream 關鍵字使用 await for 或者 listen方法

Future main() async {

// ...

await for (var request in requestServer) {

handleRequest(request);

}

// ...

}

生成器

方法體使用 sync* 標注, 返回值前添加yeild, 返回值 yeild * 來提高性能

// 同步

Iterable naturalsTo(int n) sync* {

int k = 0;

while (k < n) yield k++;

}

// 異步

Stream asynchronousNaturalsTo(int n) async* {

int k = 0;

while (k < n) yield k++;

}

// 返回值為遞歸

Iterable naturalsDownFrom(int n) sync* {

if (n > 0) {

yield n;

yield* naturalsDownFrom(n - 1);

}

}

可運行的類

如果類中實現了 call 方法, 那么這個類就是可執行的

class WannabeFunction {

call(String a, String b, String c) => '$a $b $c!';

}

main() {

var wf = new WannabeFunction();

var out = wf("Hi","there,","gang");

print('$out');

}

Typedefs

使用 typedef 關鍵字 標注方法簽名,可以避免方法簽名的丟失

typedef Compare = int Function(Object a, Object b);

class SortedCollection {

Compare compare;

SortedCollection(this.compare);

}

// Initial, broken implementation.

int sort(Object a, Object b) => 0;

void main() {

SortedCollection coll = SortedCollection(sort);

assert(coll.compare is Function);

assert(coll.compare is Compare);

}

注解

Dart 使用類來聲明注解, Java 使用 @interface; 另外 Dart 貌似沒有地方聲明注解的使用范圍

注釋

Dart 可以使用 ///, /** 編寫文檔注釋

總結

以上是生活随笔為你收集整理的java dart 官司_Dart和Java的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。