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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

unity创建和销毁对象_如何创建和销毁对象

發布時間:2023/12/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity创建和销毁对象_如何创建和销毁对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

unity創建和銷毀對象

本文是我們名為“ 高級Java ”的學院課程的一部分。

本課程旨在幫助您最有效地使用Java。 它討論了高級主題,包括對象創建,并發,序列化,反射等。 它將指導您完成Java掌握的旅程! 在這里查看 !

目錄

1.簡介 2.實例構建
2.1。 隱式(生成)構造函數 2.2。 沒有參數的構造函數 2.3。 帶參數的構造函數 2.4。 初始化塊 2.5。 施工保證 2.6。 能見度 2.7。 垃圾收集 2.8。 終結者
3.靜態初始化 4.施工模式
4.1。 辛格爾頓 4.2。 實用程序/助手類 4.3。 廠 4.4。 依賴注入
5.下載源代碼 6.接下來

1.簡介

根據TIOBE編程社區索引 ,Java編程語言起源于Sun Microsystems,于1995年發布,是世界上使用最廣泛的編程語言之一。 Java是一種通用編程語言。 它對軟件開發人員的吸引力主要歸功于其強大的庫和運行時,簡單的語法,豐富的受支持平臺集(一次編寫,隨時隨地運行– WORA)和強大的社區。

在本教程中,我們將介紹高級Java概念,并假設我們的讀者已經對該語言有所了解。 它絕不是完整的參考,而是將Java技能提升到更高水平的詳細指南。

在整個過程中,將有很多代碼片段需要研究。 在有意義的地方,將使用Java 7語法和Java 8 one來提供相同的示例。

2.實例構建

Java是面向對象的語言,因此,創建新的類實例(對象)可能是其最重要的概念。 構造函數在新類實例初始化中起著核心作用,而Java提供了一些定義它們的方法。

隱式(生成)構造函數

Java允許定義一個沒有任何構造函數的類,但這并不意味著該類將沒有任何構造函數。 例如,讓我們考慮這個類:

package com.javacodegeeks.advanced.construction;public class NoConstructor { }

該類沒有構造函數,但是Java編譯器將隱式生成一個構造函數,并且可以使用new關鍵字創建新的類實例。

final NoConstructor noConstructorInstance = new NoConstructor();

沒有參數的構造函數

沒有參數的構造函數(或no-arg構造函數)是顯式完成Java編譯器工作的最簡單方法。

package com.javacodegeeks.advanced.construction;public class NoArgConstructor {public NoArgConstructor() {// Constructor body here} }

使用new關鍵字創建類的新實例后,將調用此構造函數。

final NoArgConstructor noArgConstructor = new NoArgConstructor();

帶參數的構造函數

帶參數的構造函數是參數化新類實例創建的最有趣,最有用的方法。 下面的示例定義一個帶有兩個參數的構造函數。

package com.javacodegeeks.advanced.construction;public class ConstructorWithArguments {public ConstructorWithArguments(final String arg1,final String arg2) {// Constructor body here} }

在這種情況下,當使用new關鍵字創建類實例時,應同時提供兩個構造函數參數。

final ConstructorWithArguments constructorWithArguments = new ConstructorWithArguments( "arg1", "arg2" );

有趣的是,構造函數可以使用特殊的this關鍵字相互調用。 鏈式構造函數被認為是一種好習慣,因為它可以減少代碼重復并基本上導致具有單個初始化入口點。 例如,讓我們添加另一個僅帶有一個參數的構造函數。

public ConstructorWithArguments(final String arg1) {this(arg1, null); }

初始化塊

Java還有另一種使用初始化塊提供初始化邏輯的方法。 很少使用此功能,但最好知道它的存在。

package com.javacodegeeks.advanced.construction;public class InitializationBlock {{// initialization code here} }

以某種方式,初始化塊可能被視為匿名的無參數構造函數。 特定的類可能具有多個初始化塊,并且它們都將按照在代碼中定義的順序被調用。 例如:

package com.javacodegeeks.advanced.construction;public class InitializationBlocks {{// initialization code here}{// initialization code here}}

初始化塊不能代替構造函數,可以與它們一起使用。 但是要提到的一點很重要,那就是初始化塊總是任何構造函數之前調用。

package com.javacodegeeks.advanced.construction;public class InitializationBlockAndConstructor {{// initialization code here}public InitializationBlockAndConstructor() {} }

施工保證

Java提供了開發人員可能依賴的某些初始化保證。 未初始化的實例和類(靜態)變量將自動初始化為其默認值。

類型 默認值
布爾值
字節 0
0
整型 0
0升
燒焦 \ u0000
浮動 0.0分
0.0天
對象參考 空值

表格1

讓我們確認使用以下類作為簡單示例:

package com.javacodegeeks.advanced.construction;public class InitializationWithDefaults {private boolean booleanMember;private byte byteMember;private short shortMember;private int intMember;private long longMember;private char charMember;private float floatMember;private double doubleMember;private Object referenceMember;public InitializationWithDefaults() { System.out.println( "booleanMember = " + booleanMember );System.out.println( "byteMember = " + byteMember );System.out.println( "shortMember = " + shortMember );System.out.println( "intMember = " + intMember );System.out.println( "longMember = " + longMember );System.out.println( "charMember = " + Character.codePointAt( new char[] { charMember }, 0 ) );System.out.println( "floatMember = " + floatMember );System.out.println( "doubleMember = " + doubleMember );System.out.println( "referenceMember = " + referenceMember );} }

使用new關鍵字實例化后:

final InitializationWithDefaults initializationWithDefaults = new InitializationWithDefaults(),

以下輸出將顯示在控制臺中:

booleanMember = false byteMember = 0 shortMember = 0 intMember = 0 longMember = 0 charMember = 0 floatMember = 0.0 doubleMember = 0.0 referenceMember = null

能見度

構造函數服從Java可見性規則,并且可以具有訪問控制修飾符,該修飾符確定其他類是否可以調用特定的構造函數。

修飾符 子類 其他所有人
上市 無障礙 無障礙 無障礙
受保護的 無障礙 無障礙 無法訪問
<無修飾符> 無障礙 無法訪問 無法訪問
私人的 無法訪問 無法訪問 無法訪問

表2

垃圾收集

Java(尤其是JVM)使用自動垃圾收集。 簡而言之,無論何時創建新對象,都會自動為其分配內存。 因此,只要不再引用這些對象,它們就會被銷毀并回收其內存。

Java垃圾回收是世代相傳的,它基于以下假設:大多數對象都死于年輕對象(它們在創建后不久就不再被引用,因此可以安全地銷毀)。 大多數開發人員過去都認為Java中的對象創建速度很慢,因此應盡可能避免實例化新對象。 實際上,事實并非如此:用Java創建對象既便宜又快速。 不過,昂貴的是不必要地創建了長期存在的對象,這些對象最終可能會填滿舊的對象并導致世界各地的垃圾回收。

終結者

到目前為止,我們已經討論了構造函數和對象初始化,但實際上并沒有提及任何與之對應的東西:對象破壞。 這是因為Java使用垃圾回收來管理對象的生命周期,垃圾回收器負責破壞不必要的對象并回收內存。

但是,Java中有一個特殊的功能稱為終結器 ,該終結器有點類似于析構函數,但具有執行資源清除的不同目的。 終結器被認為是一個危險的功能(這會導致許多副作用和性能問題)。 通常,它們不是必需的,應該避免使用(非常罕見的情況除外,這些情況大多與本機對象有關)。 終結器的更好替代方案Java 7語言構造引入的,稱為try-with-resources和AutoCloseable接口,該接口允許編寫干凈的代碼,如下所示:

try ( final InputStream in = Files.newInputStream( path ) ) {// code here }

3.靜態初始化

到目前為止,我們已經研究了類實例的構造和初始化。 但是Java也支持稱為靜態初始值設定項的類級初始化構造。 除了附加的static關鍵字外,它們與初始化塊非常相似。 請注意,每個類加載器僅執行一次靜態初始化。 例如:

package com.javacodegeeks.advanced.construction;public class StaticInitializationBlock {static {// static initialization code here} }

與初始化塊類似,您可以在類定義中包括任意數量的靜態初始化器塊,它們將按照它們在代碼中出現的順序執行。 例如:

package com.javacodegeeks.advanced.construction;public class StaticInitializationBlocks {static {// static initialization code here}static {// static initialization code here} }

因為可以從多個并行線程觸發靜態初始化塊(當第一次加載該類時),所以Java運行時保證它只能以線程安全的方式執行一次。

4.施工模式

多年來,Java社區中出現了一些易于理解且廣泛適用的構造(或創建)模式。 我們將介紹其中最著名的:單例,助手,工廠和依賴注入(也稱為控制反轉)。

辛格爾頓

Singleton是軟件開發人員社區中最古老且有爭議的模式之一。 基本上,其主要思想是確保在任何給定時間只能創建該類的單個實例。 但是,如此簡單,單例引發了很多有關如何使其正確,尤其是線程安全的討論。 這是樸素的單例類的樣子:

package com.javacodegeeks.advanced.construction.patterns;public class NaiveSingleton {private static NaiveSingleton instance;private NaiveSingleton() { }public static NaiveSingleton getInstance() {if( instance == null ) {instance = new NaiveSingleton();}return instance;} }

此代碼的至少一個問題是,如果由多個線程并發調用,它可能會創建該類的許多實例。 正確設計單例(但以非延遲方式)的一種方法是使用類的static final屬性。

final property of the class. package com.javacodegeeks.advanced.construction.patterns;public class EagerSingleton {private static final EagerSingleton instance = new EagerSingleton();private EagerSingleton() { }public static EagerSingleton getInstance() {return instance;} }

如果您不想浪費資源,并且希望在真正需要時懶惰地創建單身人士,則需要顯式同步,這有可能導致多線程環境中的并發性降低(有關Java并發性的更多詳細信息,請參見本教程的第9部分并發最佳實踐 )。

package com.javacodegeeks.advanced.construction.patterns;public class LazySingleton {private static LazySingleton instance;private LazySingleton() { }public static synchronized LazySingleton getInstance() {if( instance == null ) {instance = new LazySingleton();}return instance;} }

如今,在大多數情況下,單例并不被認為是一個不錯的選擇,主要是因為它們使代碼很難測試。 依賴項注入模式的主導(請參閱下面的“ 依賴項注入”部分)也使單例成為不必要。

實用程序/助手類

實用程序或幫助程序類是許多Java開發人員使用的非常流行的模式。 基本上,它代表了非實例化類(與構造函數聲明為private ),可選聲明為final (有關聲明類的更多詳細信息final將在本教程的第3部分提供, 如何設計類和接口 ),包含static方法只要。 例如:

package com.javacodegeeks.advanced.construction.patterns;public final class HelperClass {private HelperClass() { }public static void helperMethod1() {// Method body here}public static void helperMethod2() {// Method body here} }

從經驗豐富的軟件開發人員的角度來看,此類幫助程序通常成為各種不相關方法的容器,這些方法沒有找到其他放置位置,但應以某種方式共享并由其他類使用。 在大多數情況下,應避免此類設計決策:始終可以找到另一種方法來重用所需的功能,同時保持代碼的簡潔明了。

事實證明,工廠模式在軟件開發人員手中是極其有用的技術。 因此,它具有Java的幾種風格,從工廠方法抽象工廠 。 工廠模式的最簡單示例是static方法,該方法返回特定類的新實例( factory方法 )。 例如:

package com.javacodegeeks.advanced.construction.patterns;public class Book {private Book( final String title) {} public static Book newBook( final String title ) { return new Book( title );} }

有人可能會認為引入newBook 工廠方法沒有多大意義,但使用這種模式通常會使代碼更具可讀性。 工廠模式的另一個變體涉及接口或抽象類( 抽象工廠 )。 例如,讓我們定義一個工廠接口

public interface BookFactory {Book newBook(); }

根據庫類型,有幾種不同的實現:

public class Library implements BookFactory {@Overridepublic Book newBook() {return new PaperBook();} }public class KindleLibrary implements BookFactory {@Overridepublic Book newBook() {return new KindleBook();} }

現在, Book的特定類隱藏在BookFactory接口實現的后面,仍然提供了創建書籍的通用方法。

依賴注入

依賴注入(也稱為控制反轉)被認為是類設計人員的一種好習慣:如果某個類實例依賴于其他類實例,則應通過構造函數(或setter,策略)為其提供(注入)那些依賴。等),但不是由實例本身創建的。 讓我們考慮以下示例:

package com.javacodegeeks.advanced.construction.patterns;import java.text.DateFormat; import java.util.Date;public class Dependant {private final DateFormat format = DateFormat.getDateInstance();public String format( final Date date ) {return format.format( date );} }

Dependant類需要一個DateFormat實例,它只是在構造時通過調用DateFormat.getDateInstance()創建一個實例。 更好的設計是使用構造函數參數執行相同的操作:

package com.javacodegeeks.advanced.construction.patterns;import java.text.DateFormat; import java.util.Date;public class Dependant {private final DateFormat format;public Dependant( final DateFormat format ) {this.format = format;}public String format( final Date date ) {return format.format( date );} }

在這種情況下,該類的所有依賴關系都是從外部提供的,因此更改日期格式并為其編寫測試用例非常容易。

5.下載源代碼

  • 您可以在此處下載源代碼: com.javacodegeeks.advanced.java

6.接下來

在本教程的這一部分中,我們研究了類和類實例的構造和初始化技術,以及涵蓋了幾種廣泛使用的模式的方法。 在下一部分中,我們將剖析Object類及其知名方法的用法: equals , hashCode , toString和clone 。

翻譯自: https://www.javacodegeeks.com/2015/09/how-to-create-and-destroy-objects.html

unity創建和銷毀對象

總結

以上是生活随笔為你收集整理的unity创建和销毁对象_如何创建和销毁对象的全部內容,希望文章能夠幫你解決所遇到的問題。

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