static members in Class


Diễn đàn chia sẻ kiến thức, kinh nghiệm về IT và cuộc sống!
 
Trang ChínhGalleryTìm kiếmLatest imagesĐăng kýĐăng Nhập
Top posters
Sakura (1124)
static members in Class Vote_lcapstatic members in Class Voting_barstatic members in Class Vote_rcap 
hotboy (705)
static members in Class Vote_lcapstatic members in Class Voting_barstatic members in Class Vote_rcap 
Già Làng (373)
static members in Class Vote_lcapstatic members in Class Voting_barstatic members in Class Vote_rcap 
con_ca_nho90 (289)
static members in Class Vote_lcapstatic members in Class Voting_barstatic members in Class Vote_rcap 
that_true (154)
static members in Class Vote_lcapstatic members in Class Voting_barstatic members in Class Vote_rcap 
theanhkkt (143)
static members in Class Vote_lcapstatic members in Class Voting_barstatic members in Class Vote_rcap 
phamay (137)
static members in Class Vote_lcapstatic members in Class Voting_barstatic members in Class Vote_rcap 
lovelonelyman (134)
static members in Class Vote_lcapstatic members in Class Voting_barstatic members in Class Vote_rcap 
o0ovioletstaro0o (128)
static members in Class Vote_lcapstatic members in Class Voting_barstatic members in Class Vote_rcap 
stevenhung (122)
static members in Class Vote_lcapstatic members in Class Voting_barstatic members in Class Vote_rcap 
Âm - Dương lịch
Clock
Logo
11TH02 Pro!
Liên kết
Tin tức 60s
Tin công nghệ
Thời sự 24h
Game Moblie

Share
 

 static members in Class

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
Sakura

static members in Class Stars7
Sakura

Thú CƯng : static members in Class I-hate-Cats-icon
Nam Scorpio

Số bài viết : 1124
Điểm : 1688
Được cảm ơn : 35
Ngày sinh : 03/11/1990
Tham gia ngày : 16/03/2010
Tuổi : 33
Đến từ : Bình Dương
Ngề nghiệp : IT Student

static members in Class Empty
Bài gửiTiêu đề: static members in Class   static members in Class I_icon_minitime19/9/2010, 08:57

Vấn đề này không khó, nhưng rất ít khi các bạn gặp khi làm các bài tập trong lớp, chỉ có khi đụng chạm đến thực tế thì các bạn mới có thể hiểu hơn và áp dụng trơn tru đc.
Mình chỉ giải thik đoạn code hôm bữa thực hành, vì sao lại có cái dòng:
Code:
static int TinhTien(int sophut)

Đây là nguyên bài, mình xin post lại:
Code:
/**
 * @(#)DIENTHOAI.java
 *
 * DIENTHOAI application
 *
 * @Edward
 * @version 1.00 2010/9/16
 */
 
 import java.util.Scanner;
 
class DIENTHOAI {
   
    public static void main(String[] args) {
       
       int sophut;
       System.out.print("Nhap Vao So Phut: ");
       Scanner in = new Scanner(System.in);
       sophut = in.nextInt();
       int tien = TinhTien(sophut);
       System.out.print("Tong Tien = " + tien + " VND");
    }
   
    static int TinhTien(int sophut)
    {
       int tong = 27000;
       if(sophut > 200)
       {
          sophut -= 200;
          tong += 200 * 120;
          if(sophut > 200)
          {
             sophut -= 200;
             tong += 200 * 80;
             tong += sophut * 40;
          }
          else
          {
             tong += sophut * 80;
          }
       }
       else
       {
          tong += sophut * 120;
       }
       return tong;
    }
}


Chúng ta thấy trong phương thức main và phương thức TinhTien nằm trong cùng 1 class. và trong main, ta lại gọi TinhTien.
Chú ý rằng, đây không phải lập trình cấu trúc, và Java nó là thuần hướng đối tượng, nên sẽ không có chuyện bạn làm gì ngoài các class, ví dụ khai báo 1 biến, hay viết 1 phương thức mà ko có cái vỏ bọc của class.
Và tiếp theo, mọi member (gồm thuộc tính và phương thức) không tính static members, thì đều được truy xuất thông qua 1 thể hiện (Instance) của 1 class.
Ví dụ ta có 1 class sau:
Code:
class A
{
      public void S()
      {
              //Do something...
      }
}

khi đó, ta muốn gọi S thì phải thông qua 1 thể hiện của class A, nghĩa là phải tạo ra 1 đối tượng thuộc class A và truy xuất thông qua đối tượng đó.
Code:
A obj1 = new A();
obj1.S();
OK, và tiện đây mình cũng nói luôn về KDL tham trị và KDL tham chiếu trong Java. (lát nói vậy)
Tiếp tục chủ đề chính.
Ta không thể làm thế này với phương thức S():
Code:
A.S();
Sẽ không hợp lệ vì S() cần 1 Instance thuộc lớp A để truy xuất nó.
Và cũng như ở bài code ở trên, giả sử ta viết lại hàm:
Code:
static int TinhTien(int sophut)
thay bằng:
Code:
int TinhTien(int sophut)
thì khi ta gọi chú này trong main, tất nhiên là cũng gặp trường hợp như đã nói nghĩa là TinhTien cần được thực hiện thông qua 1 thể hiện của class.
Nhưng khi ta thêm static thì mọi chuyện lại khác. Khi đó, ta có thể thoải mái gọi nó như thế này.
Nếu trong phạm vi class thì chỉ cần gọi lên và xài thôi. Và ở ngoài lớp thì sẽ là như vầy, chú ý:
Code:
static int TinhTien(int sophut)
các bạn nên thay bằng
Code:
public static int TinhTien(int sophut)
Để có thể truy xuất được ở ngoài, và ở ngoài, chúng ta có thể gọi thông qua tên lớp:
Code:
DIENTHOAI.TinhTien(1234);
Nhưng ta không thể làm
Code:
DIENTHOAI A = new DIENTHOAI();
A.TinhTien();
Không giống bên C++, phương thức static bên C++ có thể được gọi bởi class hay 1 thể hiện nào đó của class, còn Java == C#, nó không cho phép gọi 1 static method thông qua 1 instance của 1 class.
Vậy mục đích của static members là gì?
1. Để làm cái việc như ở trên
2. Khi chúng ta muốn lưu lại dữ liệu đã tính toán bên class này, và sẽ mang qua class kia để tính, đọc trông khó hỉu quá nhỉ?
Mình sẽ làm 1 ví dụ, mình đã từng làm với static với lập trình Winform.
Giả sử mình có 2 form: form2 chọn máy chủ kết nối vào Server, và form2 làm nhiệm vụ đăng nhập vào Server thông qua thông tin bên form1 (gồm tên Server, ID, pass,...). Vậy phải làm sao? Có nhiều cách để truyền dữ liệu giữa các form với nhau, nhưng cách đơn giản và hiệu quả là dùng static members.
Cách làm: khi chúng ta đã gõ đầy đủ thông tin bên form1 rồi, và lưu nó và 1 public static string S. khi đó string S này là static field của form1, và trong form2, nếu chúng ta muốn kết nối vào Server thông qua thông tin đã nhập bên form1 thì chỉ cần tạo 1 chuỗi string D bên form2, và gán: D = form1.S; thế là OK, ta đã có thể dùng được dữ liệu bên form1 rồi.

Mệt rồi, đơn giản vậy thôi. Túm lại 1 câu: static members là thành viên của class, ko là riêng của đối tượng nào, và chúng ta chỉ có thể truy xuất thông qua tên lớp!
Về Đầu Trang Go down
tkhking

Member Năng Động


Member Năng Động
tkhking

Thú CƯng : static members in Class Panda-icon
Nam Pisces

Số bài viết : 114
Điểm : 135
Được cảm ơn : 1
Ngày sinh : 18/03/1990
Tham gia ngày : 01/07/2010
Tuổi : 34
Đến từ : Óc Trâu Lấy Ra
Ngề nghiệp : Student
Chăm ngôn : King

static members in Class Empty
Bài gửiTiêu đề: Re: static members in Class   static members in Class I_icon_minitime22/9/2010, 17:59

bài này hay nè thanks cho ku 1 cái nè...hihihi
Về Đầu Trang Go down
Sakura

static members in Class Stars7
Sakura

Thú CƯng : static members in Class I-hate-Cats-icon
Nam Scorpio

Số bài viết : 1124
Điểm : 1688
Được cảm ơn : 35
Ngày sinh : 03/11/1990
Tham gia ngày : 16/03/2010
Tuổi : 33
Đến từ : Bình Dương
Ngề nghiệp : IT Student

static members in Class Empty
Bài gửiTiêu đề: Re: static members in Class   static members in Class I_icon_minitime22/9/2010, 21:00

Thank đâu? Sao tao ko thấy vậy mày? Phải làm bằng hành động thực tế chút chứ! Kakak!
Về Đầu Trang Go down
Sponsored content




static members in Class Empty
Bài gửiTiêu đề: Re: static members in Class   static members in Class I_icon_minitime

Về Đầu Trang Go down
 

static members in Class

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

 Similar topics

-
» Video học C# [Static, non-static member và Property]
»  [OOP] - Bài Tập Class Point - Các Thao Tác Cơ Bản - Get Set
» [Bài Tập Java] Abstract Class
»  [OOP] - Bài Tập Class Time - Hay - Nhiều Thao Tác
» Phạm Vi Hoạt Động Của Class trong C#

Permissions in this forum:Bạn không có quyền trả lời bài viết
IT World! :: HỌC TẬP :: HỌC KỲ V :: Lập Trình Java-