C# Academy · Pelajaran

try/catch/finally, throw new vs lempar ulang

Gunakan try/catch/finally untuk penanganan kesalahan yang dapat diprediksi; pahami throw new dan lempar ulang; buat contoh tetap kecil dan terarah.

Pelajaran 1 dari 38 langkah

try/catch/finally, throw new vs lempar ulang adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 3 pelajaran total.

Ikhtisar pengecualian

Tujuan: Tangani dan teruskan kesalahan dengan aman.

  • try/catch: tangani pengecualian tertentu
  • finally: selalu dijalankan untuk pembersihan
  • throw new vs rethrow
  • Jaga agar penangan tetap singkat; jangan menyembunyikan bug

Penangkapan tertentu

Tangkap pengecualian yang paling spesifik yang Anda harapkan; jaga agar penangan tetap singkat dan jelas.

using System;

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine("Start");
    try
    {
      int x = 10;
      int y = 0; // will cause DivideByZeroException
      Console.WriteLine(x / y);
    }
    catch (DivideByZeroException ex)
    {
      Console.WriteLine("Cannot divide by zero: " + ex.GetType().Name);
    }
    Console.WriteLine("Continue");
  }
}

Urutan penangkapan

Urutan penting: tempatkan penangkapan yang spesifik terlebih dahulu, lalu penangkapan Exception umum terakhir sebagai jaring pengaman.

using System;

public class Program
{
  static int ParseAndDivide(string text, int divisor)
  {
    // Throws FormatException or DivideByZeroException
    int value = int.Parse(text);
    return value / divisor;
  }

  public static void Main(string[] args)
  {
    try
    {
      Console.WriteLine(ParseAndDivide("not-a-number", 2));
    }
    catch (FormatException)
    {
      Console.WriteLine("Bad number format");
    }
    catch (Exception ex)
    {
      // Fallback last
      Console.WriteLine("Other error: " + ex.GetType().Name);
    }
  }
}

finally untuk pembersihan

Tempatkan pembersihan di dalam finally. Bagian ini dijalankan baik terjadi pengecualian maupun tidak.

using System;

public class Program
{
  static bool opened = false;

  static void UseFakeResource()
  {
    try
    {
      opened = true;
      Console.WriteLine("Open");
      throw new InvalidOperationException("boom");
    }
    catch (InvalidOperationException)
    {
      Console.WriteLine("Handled");
    }
    finally
    {
      opened = false; // cleanup path
      Console.WriteLine("Close");
    }
  }

  public static void Main(string[] args)
  {
    UseFakeResource();
    Console.WriteLine("Opened? " + opened);
  }
}

Lakukan rethrow dengan benar

Gunakan throw; untuk melakukan rethrow dan mempertahankan tumpukan asli. throw ex; akan meresetnya. Bungkus dengan pengecualian baru hanya jika Anda menambahkan konteks.

using System;

public class Program
{
  static void BadRethrow()
  {
    try
    {
      Fail();
    }
    catch (Exception ex)
    {
      // Resets stack trace:
      throw ex; // BAD rethrow
    }
  }

  static void GoodRethrow()
  {
    try
    {
      Fail();
    }
    catch
    {
      // Preserves original stack trace:
      throw; // GOOD rethrow
    }
  }

  static void Fail()
  {
    throw new InvalidOperationException("fail");
  }

  public static void Main(string[] args)
  {
    try { BadRethrow(); }
    catch (Exception ex)
    {
      Console.WriteLine("Bad: " + (ex.StackTrace == null ? "no stack" : "stack reset likely"));
    }

    try { GoodRethrow(); }
    catch (Exception ex)
    {
      Console.WriteLine("Good: preserves original stack");
    }
  }
}

Panduan penanganan

Panduan:

  • Tangkap pengecualian jika Anda dapat menanganinya atau menambahkan konteks.
  • Jika tidak, biarkan pengecualian diteruskan ke atas.
  • Jaga agar penangan tetap kecil; hindari menelan pengecualian secara diam-diam.
  • Gunakan finally untuk pembersihan; pembuangan sumber daya dibahas pada pelajaran berikutnya.

Aturan rethrow

Pemeriksaan singkat: Pernyataan mana yang melakukan rethrow pengecualian saat ini dengan benar sambil mempertahankan jejak tumpukan asli?

Ringkasan

Ringkasan: Gunakan try/catch untuk kesalahan tertentu, finally untuk pembersihan, dan utamakan throw; saat melakukan rethrow agar tumpukan asli tetap dipertahankan.

Gratis untuk memulai

Belajar C# dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
93
Pelajaran
346

Pertanyaan yang Sering Diajukan

Apakah pelajaran “try/catch/finally, throw new vs lempar ulang” gratis?

Ya — teks lengkap “try/catch/finally, throw new vs lempar ulang” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “try/catch/finally, throw new vs lempar ulang”?

Gunakan try/catch/finally untuk penanganan kesalahan yang dapat diprediksi; pahami throw new dan lempar ulang; buat contoh tetap kecil dan terarah. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 3.

Berapa lama pelajaran “try/catch/finally, throw new vs lempar ulang” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. try/catch/finally, throw new vs lempar ulang
  2. Pengecualian khusus; perancangan kesalahan
  3. IDisposable, pernyataan using
← Kembali ke C# Academy