Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

java chuong 1_2

CAC BAC THICH LAP TRINH JAVA DOC XONG CHO VOTE NHA

Game Lập trình Java 1.4 

Andrew Mulholland và Glenn Murphy

Thư viện Quốc hội biên mục-trong-Xuất bản dữ liệu

Mulholland, Andrew. 

Trò chơi lập trình Java 1.4 / Andrew Mulholland và Glenn Murphy. 

p. cm. 

ISBN 1-55622-963-1

1. Java (máy tính chương trình ngôn ngữ) 2. Computer-Lập trình trò chơi. 

I. Murphy, Glenn, 1908 - II. Tiêu đề. 

QA76.73.J38 M849 2003

794,8 '152762-dc21 2002155485 

CIP

© 2003, Wordware Publishing, Inc

Tất cả các quyền 

2320 Đại lộ Los Rios 

Plano, Texas 75074

Không có một phần của cuốn sách này có thể được sao chép dưới mọi hình thức hoặc bằng bất kỳ phương tiện mà không cần sự cho phép bằng văn bản từ Wordware Publishing, Inc

ISBN 1-55622-963-1

10 9 8 7 6 5 4 3 2 1 

0301

Java là một nhãn hiệu của Sun Microsystems, Inc 

Tất cả các tên thương hiệu và những sản phẩm được đề cập trong cuốn sách này là thương hiệu hay nhãn hiệu dịch vụ của công ty tương ứng. Bất kỳ thiếu sót hoặc sử dụng sai (của bất kỳ loại) của các nhãn hiệu dịch vụ hoặc nhãn hiệu không nên được coi là ý định xâm phạm tài sản của người khác. Nhà xuất bản công nhận và tôn trọng tất cả các nhãn được sử dụng bởi các công ty, nhà sản xuất, và phát triển như một phương tiện để phân biệt sản phẩm của họ.

Tất cả các yêu cầu cho việc mua bán khối lượng của cuốn sách này phải được gửi đến Wordware Publishing, Inc, tại địa chỉ trên. Điện thoại có thể yêu cầu được thực hiện bằng cách gọi:

(972) 423-0090

Giới thiệu về tác giả

Điều này đối với tôi có lẽ là phần dễ nhất của cuốn sách để viết. Tôi thực sự có một ý thích để viết về bản thân mình như tôi luôn luôn cảm thấy âm thanh nó sẽ khoe khoang và tự phụ, mà tôi.

Vâng, tôi bắt đầu cuộc sống như một đứa trẻ và tôi sợ đó là nơi mà tất cả bắt đầu. Tôi bắt đầu lập trình vào khoảng 16 tuổi trong khi học đại học tại quê hương của tôi về Manchester, Anh. Tôi sử dụng thuật ngữ "tham dự" lỏng lẻo, tuy nhiên, bởi vì ngay sau khi chương trình bắt đầu, tôi đã được nối, và cúi ra khỏi bài giảng nhiều để tạo ra một loạt các trò chơi, mặc dù nhân vật trên một độ phân giải 80x25 ASCII và gotoxy a hữu ích (x , y) phương pháp. Trong năm thứ hai đại học, một người bạn thân bạn và lập trình, Nick Kitson, và tôi cùng viết một trò chơi 16.000 dòng quản lý bóng đá trong Pascal gọi là bóng đá châu Âu ESM Manager, nơi bạn có thể thực sự xem các trận đấu trong một cái nhìn trên không. Làm việc này đã dạy tôi nhiều hơn bất cứ điều gì về lập trình. Lời khuyên của tôi, chọn một mục tiêu và đi cho nó.

Sau khi học đại học, tôi đã làm cho nó vào chương trình máy tính Công nghệ Games tại Đại học Abertay Dundee và bây giờ nữa đường thông qua năm thứ 4 (danh dự). Trong khi "tham dự" đại học tôi đã đẩy mạnh kiến thức của tôi từ Pascal đến C / C + + và sau đó vào Java. Khả năng để làm cho trò chơi web có thể chơi trong một trình duyệt (applet) được những gì ban đầu được làm bằng Java nên hấp dẫn với tôi, và đã là một bí ẩn đối với tôi cho đủ dài. Có bắt đầu giới thiệu của tôi để Java. Trước khi Java, tôi đã được chủ yếu là một lập trình thủ tục, và cũng không phải là điều chỉnh để trình hướng đối tượng (OOP). Những điều tốt về Java, trong ý nghĩa này, là nó là hoàn toàn OOP, vì vậy không có sự lựa chọn nhưng để chương trình theo phong cách này. Đối với điều này tôi nghĩ rằng việc học Java là hướng dẫn tốt nhất để bạn có thể nhận được OOP. Và sau đó đến cuốn sách.

Sau khi làm việc trên một trò chơi Java vào mùa hè năm 2000, tôi đã hợp tác với giờ của tôi đồng tác giả Andrew, người đã được flatmate và người bạn của tôi kể từ năm đầu tiên của trường đại học. Phân bổ ngẫu nhiên chỗ ở của trường đại học cho freshers có thể lấy tín dụng cho chúng ta hội họp tại hội trường của học sinh. Chúng tôi bắt đầu làm việc trên cuốn sách cuối năm 2001, trong khi cả hai tung hứng các khóa học bằng danh dự của chúng tôi cùng một lúc. Bên cạnh việc mất trinh tiết của tôi và cố gắng để hoàn thành Jet Set Willy, cuốn sách này đã được trải nghiệm khắc nghiệt nhất trong cuộc đời của tôi, nhưng nó đã được tất cả các giá trị nó cuối cùng. (Tôi hy vọng điều này câu cuối cùng làm cho nó để xuất bản.)

Hy vọng chính của tôi cho cuốn sách này là nó làm cho tôi càng nhiều tiền càng tốt. Hy vọng thứ hai của tôi, bên cạnh việc lập trình trò chơi trong Java, là cuốn sách chỉ ra những khó khăn mà chúng tôi đi qua khi nghiên cứu lập trình Java cho các trò chơi một cách rõ ràng, đặc biệt là những chủ đề xung quanh, đầu vào, và đồ họa mà chúng ta đặt rất nhiều công việc vào. Tôi nghĩ rằng để trở thành một lập trình tốt bạn phải tận hưởng nó, nếu không nó ít sử dụng. Hầu hết các thú vị tôi tìm thấy là trong hiển thị ra những gì tôi đã làm, mà không có hại trong bây giờ và một lần nữa (và một lần nữa và một lần nữa J). Một điều tôi biết là trong thực tế đầy thách thức chính mình làm điều gì đó, và tin rằng bạn có thể làm điều đó, có vẻ là một yếu tố sợ hãi nơi bạn thường thậm chí không cố gắng để cái gì đó mã, bởi vì bạn chưa bao giờ thực hiện nó trước. Trong mua cuốn sách này, bạn đã thực hiện một bước đi vững chắc trong sự sợ hãi xâm chiếm này.

Lợi ích của tôi chủ yếu xoay quanh hồ bơi chơi, xem phim, và đôi khi lập trình suốt đêm, và vẫn không có cảm giác tốt hơn so với "7-balling" một ai đó trong một câu lạc bộ đông đúc. Tôi cũng thu thập Star Wars và mặc trang phục chúng ra club thường xuyên.

Như một lời cuối cùng, tôi hy vọng cuốn sách này là như hữu ích cho bạn như nó đã cho tôi bằng văn bản, và chúc bạn may mắn trong việc tìm kiếm của bạn kiến thức.

Glenn Murphy 

[email protected]

Điều này đối với tôi có lẽ là một trong những phần khó nhất của cuốn sách để viết. Tôi thực sự có một không thích để viết về bản thân mình như tôi luôn luôn cảm thấy âm thanh nó sẽ khoe khoang hay kiêu ngạo. Tuy nhiên, ở đây đi ...

Vâng, Tôi hiện 21 tuổi và nửa năm của tôi (danh dự) thứ 4 của trường đại học nghiên cứu BSc (Hons) Máy Tính Công nghệ tại Đại học Abertay ở Dundee, Scotland. Tôi có thể nói tôi đã được mã hóa cho khoảng sáu năm nay và đã thu được khá một loạt các kỹ năng trong thời gian này.

First đâm thật của tôi ở chương trình trò chơi được khoảng một năm rưỡi trước khi tôi rời nhà để đi học đại học khi tôi tải về các trình biên dịch DJGPP DOS (http://www.delorie.com/djgpp) và thư viện trò chơi Allegro (http: / / www.talula.demon.co.uk / allegro) ban đầu được bắt đầu bởi Shawn Hargreaves. Sau khi bắt đầu và không bao giờ hoàn thành một vài dự án, các bước tiếp theo hợp lý là để chuyển sang nhìn vào OpenGL và DirectX. Cũng như nhìn vào bên 3D của trò chơi lập trình tuy nhiên, tôi cũng đã đầu tư thời gian học tập Perl và MySQL, mặc dù tôi gần đây đã chuyển sang sử dụng PHP4 vì nó là sooo đẹp hơn nhiều so với Perl. ;)

Từ đó, tôi sau đó tiến vào Java và phải trung thực nó có lẽ là điều tốt nhất tôi đã từng làm. Java thực sự là một ngôn ngữ tuyệt vời. Đừng làm cho tôi sai, nó có một số vấn đề, nhưng cấu trúc của ngôn ngữ và cũng là tài liệu thực sự tuyệt vời (bao giờ cố gắng sử dụng MSDN? Urgh.).

Một điều mà tôi bị lừa dối, tuy nhiên, khi tôi bắt đầu sử dụng Java là sự đơn giản. Khi bạn bắt đầu tìm kiếm vào Java đúng cách, bạn nghĩ-ah tuyệt vời, tất cả các thư viện đã được viết cho tôi. Tuy nhiên, bạn sẽ thấy khi bạn tiến bộ thông qua cuốn sách, các thư viện này là tuyệt vời cho phát triển ứng dụng kinh doanh, nhưng có một số cạm bẫy và các vấn đề nghiêm trọng cần xem xét khi nhìn vào ngôn ngữ và thư viện (gói) từ một điểm phát triển trò chơi xem.

Có lẽ giờ là thời điểm tốt cho cắm một. Trước đây để cuốn sách này, tôi đồng tác giả của phát triển Hướng dẫn để chơi Multiplayer, trong đó tập trung chi tiết về việc sử dụng socket trong C / C + + để tạo ra khách hàng-máy chủ trò chơi. Đó là cuốn sách có một phần lớn hướng dẫn sẽ đưa bạn qua quá trình viết một thư viện tái sử dụng mạng và một trò chơi nhiều, mà cũng bao gồm một đăng ký / đăng nhập và hệ thống vận động hành lang. Điều gì cuốn sách này không bao gồm, tuy nhiên, như chúng ta vẫn DirectPlay nền tảng độc lập trong suốt cuốn sách, vì vậy máy chủ trò chơi của bạn sẽ biên dịch một cách dễ dàng trên nền tảng Linux như nó sẽ trên nền tảng Windows. Nếu bạn quan tâm, bạn có thể tìm hiểu thêm thông tin (và mua nó J) tại liên kết Amazon.com sau: http://www.amazon.com/exec/obidos/tg/detail/-/1556228686

Trên một lưu ý cuối cùng, tôi hy vọng bạn thích đọc cuốn sách này và tìm thấy những thông tin bên trong nó hữu ích. Nếu bạn có thắc mắc hoặc vấn đề với bất cứ điều gì trong cuốn sách, không ngần ngại e-mail hoặc bản thân mình hoặc Glenn và chúng tôi sẽ cố gắng giúp bạn là tốt nhất chúng tôi có thể!

Andrew Mulholland

Chương 1: Giới thiệu về Java 1.4 

"Ở khắp mọi nơi có thể đi bộ nếu bạn có thời gian." 

-Steven Wright

Giới thiệu 

Trong chương này chúng tôi sẽ bắt đầu với Java 2 Standard Edition 1,4 nó bằng cách thiết lập và sẵn sàng để bước vào thế giới của lập trình game Java. Chúng tôi cũng sẽ nhìn vào những gì bạn có thể mong đợi từ cuốn sách này và tìm hiểu một chút về Java như một toàn thể.

Giới thiệu về nền tảng Java 

Các nền tảng Java bao gồm các ngôn ngữ Java, Java bytecode, và các máy ảo Java (thường gọi là JVM). Sự tương tự phía sau nền tảng Java là khi bạn biên dịch Java mã của bạn, nó được dịch thành Java bytecode, mà sau đó có thể được giải thích bởi các máy ảo Java. Trên thực tế bạn có thể nhập mã nguồn của bạn thành một file ". Java" (ngôn ngữ Java), mà sau đó sẽ được biên dịch vào một tập tin ". Class" (các bytecode Java). Các tập tin lớp học có thể được chạy trên máy ảo Java, chạy trên máy tính của bạn. Điều này có nghĩa là lập duy nhất của bạn sẽ chạy trên nhiều nền tảng, ít nhất trong lý thuyết, như từng có phiên bản riêng của JVM giải thích bytecode trên nền tảng cụ thể. Có rất nhiều hiện thực của JVM trên các hệ điều hành khác nhau, như Windows, Mac OS, Solaris, Linux, vv

Ngoài việc có nền tảng độc lập, Java nghiêm trọng có thể giảm thời gian mã hóa bởi vì nó là một ngôn ngữ rất tốt có cấu trúc. Nếu bạn không hiểu lập trình hướng đối tượng, đừng lo lắng về điều này cho bây giờ, như chúng ta sẽ giải thích OOP trong các chương sau.

Lưu ý Tất cả các bộ phận riêng lẻ của Java, chẳng hạn như ngôn ngữ Java, Java Virtual Machine, và bytecode Java, được biết chung như là nền tảng Java. 

Một yếu tố quan trọng để Java là khả năng tạo ra các chương trình nhỏ gọi là applet chạy trong các trình duyệt web, chạy độc lập bằng phương tiện của các máy ảo Java (có, web trò chơi mà chạy bên trong trình duyệt). Hơn nữa, nó rất dễ dàng để bao gồm một applet trong một trang web bằng cách sử dụng thẻ <APPLET> (chúng tôi sẽ tìm hiểu về điều này trong Chương 8, "Ứng dụng và Applet"). Ngoài ra còn có ít sự khác biệt giữa việc tạo ra như các trò chơi truyền thống ứng dụng độc lập hoặc như applet, như chúng ta sẽ thấy sau này trong cuốn sách.

Giới thiệu về Java Standard Edition 2 1,4 

Các Java 2 Standard Edition đã có những động thái tích cực để tạo trò chơi chuyên nghiệp với việc phát hành của J2SE 1.4. Khả năng của toàn màn hình độc quyền có nghĩa là bây giờ bạn có thể làm cho toàn màn hình trò chơi, trong khi ở phiên bản trước đó các lập trình viên buộc phải chế độ toàn màn hình giả. Điều này chỉ đơn giản là loại bỏ các đồ trang trí kéo theo một cửa sổ và kích thước nó vào kích thước của màn hình. Kỹ thuật này rõ ràng là chưa có các lợi thế thực sự của toàn màn hình độc quyền. Với chế độ toàn màn hình mới, bạn có thể tận dụng những thứ như lật trang và chuyển đổi chế độ hiển thị, giống như DirectX có thể làm. Một tính năng mới quan trọng để J2SE 1.4 là phần cứng tăng tốc đồ họa, làm cho xử lý đồ họa của bạn chạy ở tốc độ lớn. Cũng có một sự cải tiến về phía mạng của sự vật với việc giới thiệu NIO (New IO), như được thảo luận trong Chương 18 (trong một thiên hà xa, rất xa).

Điều quan trọng cần lưu ý rằng trong suốt cuộc đời của chuẩn Java Edition, các khía cạnh của tính tương thích ngược được duy trì để đảm bảo rằng các chương trình biên soạn bằng cách sử dụng phiên bản cũ của Java (ví dụ, 1.1, 1.2, 1.3) sẽ vẫn chạy trên JVM mới nhất. Tuy nhiên, việc triển khai nội bộ có thể thay đổi, trở nên không còn tồn tại, và được cho là bị phản đối, có nghĩa là họ vẫn còn tồn tại để hỗ trợ mã cũ nhưng không được sử dụng vì lý do gì, nói chung họ đã được tìm thấy là không an toàn. Đừng lo lắng mặc dù, khi biên dịch mã của bạn, bạn sẽ được cảnh báo nếu bạn đang sử dụng cái gì đó là phản đối.

Giữ những gì tương lai 

Tương lai của ngôn ngữ Java cho lập trình trò chơi chuyên nghiệp có tiềm năng lớn với sự độc lập nền tảng của nó và dễ sử dụng. Trong trường hợp tốt nhất, tương lai có thể thấy phiên bản của máy ảo Java chạy trên các máy chơi game mới nhất, với mã được biên dịch để làm việc trên mỗi máy tính di động với các vấn đề ít hoặc không có chính liên quan. Điều này có thể thấy lợi thế phát triển chuyển sang Java như ngôn ngữ của họ được lựa chọn cho lập trình game trong tương lai.

Điều gì cuốn sách này Covers 

Mục đích của cuốn sách này là lần đầu tiên giới thiệu bạn đến các ngôn ngữ lập trình Java và sau đó xây dựng dựa trên kiến thức bằng cách nhìn vào các yếu tố chính cần thiết để làm cho trò chơi, chẳng hạn như đồ họa, đầu vào, âm thanh, và mạng. Cuốn sách này thảo luận ba chủ đề sau:

Giới thiệu về ngôn ngữ Java cung cấp một cuốn sách hướng dẫn đầy đủ để bắt đầu sử dụng Java 2 Standard Edition 1.4 và nhìn vào tất cả các yếu tố chính tạo nên ngôn ngữ. Không có kiến thức về lập trình Java hay nói chung là cần thiết, khi chúng tôi bắt đầu từ đầu. Một trò chơi đơn giản dựa trên văn bản của tic-tac-toe thể hiện những khái niệm này.

Trò chơi lập trình Java-Chúng tôi nhìn vào các lĩnh vực chính liên quan đến lập trình game trong Java. Trong cuốn này, bạn sẽ tìm thấy tất cả các thông tin kỹ thuật quan trọng cho việc tạo ra các trò chơi trong Java, bao gồm các tính năng mới nhất của Java 1.4, chẳng hạn như chế độ toàn màn hình độc quyền. Sự phát triển của một khuôn khổ trò chơi kết hợp tất cả các kiến thức vào một cơ sở mạnh mẽ tái sử dụng, để làm cho trò chơi của riêng bạn trong Java.

Lập trình trò chơi mạng trong Java-Chúng tôi thảo luận về lập trình trò chơi nối mạng trong Java, bao gồm các chủ đề như máy chủ-khách hàng và kết nối cơ sở dữ liệu (đối với số điểm cao và danh sách lưu trữ dữ liệu trên một máy chủ trực tuyến) trong Java. Cuốn sách này cũng bao gồm các "mới để J2SE 1.4" mạng gói NIO (New I / O). Các yếu tố chính đang xây dựng một khung mạng vững chắc và mạng lưới mẫu một trò chơi ("trò chơi" sử dụng một cách lỏng lẻo ở đây:)).

Sách này là ai cho? 

Cuốn sách này là nhằm vào những người mới đến lập trình và cũng lập trình mới với ngôn ngữ Java như một toàn bộ những người muốn tìm hiểu làm thế nào để làm cho trò chơi bằng cách sử dụng Java 1.4. Mục đích của cuốn sách này là để dạy bạn những khía cạnh kỹ thuật của trò chơi lập trình sử dụng Java 1.4. Mặc dù chúng tôi bao gồm những điều cơ bản của lý thuyết lập trình game trong cuốn sách này, chúng tôi không đi sâu vào lý thuyết ở mức độ tiên tiến, như cuốn sách này được thiết kế để dạy cho trò chơi lập trình sử dụng Java 1.4 và không cụ thể chung lập trình trò chơi lý thuyết. Ví dụ, chúng ta nhìn vào những điều cơ bản của phát hiện va chạm, chẳng hạn như hình cầu và bounding hộp va chạm, nhưng không đi sâu vào các kỹ thuật tiên tiến như thử nghiệm va chạm điểm ảnh hoàn hảo. Tuy nhiên, chúng tôi nhìn vào các tính năng kỹ thuật quan trọng của Java cho lập trình trò chơi, chẳng hạn như chế độ toàn màn hình, các vấn đề đồng bộ hóa thread, và sử dụng JNI (Java Native Interface) để thực hiện một bộ đếm thời gian độ phân giải cao trong Java, để đặt tên nhưng một số ít . Đừng lo lắng, tất cả điều này sẽ được giải thích như bạn tiến bộ thông qua cuốn sách ...

if (purchasedBook == false) 

System.out.println ("bạn nên chọn để mua nó, 

xin vui lòng và cảm ơn bạn ").

Trong phần này chúng tôi sẽ xem xét cài đặt J2SE 1.4 cho Microsoft Windows là một ví dụ, tuy nhiên, quá trình cài đặt sẽ tương tự như trên các nền tảng khác, như các khái niệm vẫn như cũ.

Để cài đặt Java 2 Standard Edition, bạn có thể sử dụng đồng hành CD-ROM đi kèm với cuốn sách này hoặc tải về từ các Microsystems Sun, trang web Inc. Đây là liên kết trực tiếp để tải về Java 1.4 SDK cho tất cả các nền tảng áp dụng: http://java.sun.com/j2se/1.4.1/index.html.

Đối với Microsoft Windows, một khi bạn đã thu được những tập tin (mà sẽ được gọi là J2SDK-1_4_1_01-windows-i586.exe) bạn có thể sau đó chỉ cần kích đúp vào nó để bắt đầu quá trình cài đặt.

Một khi bạn đã chấp nhận thỏa thuận cấp phép phần mềm Java, bạn sẽ được yêu cầu, trong đó thư mục cần cài đặt. Chúng tôi sẽ cho rằng bạn đã cài đặt vào thư mục mặc định. Sau khi nhấn Next, bạn sẽ được trình bày với một danh sách các tùy chọn và, như với các thư mục, chúng tôi khuyên bạn nên để lại các tùy chọn như họ đứng.

Nếu bạn sau đó tiếp tục bằng cách nhấn vào Tiếp theo, bạn sẽ được yêu cầu mà các trình duyệt mà bạn muốn làm cho các plug-in Java mặc định. Các trình duyệt phổ biến nhất cho các plug-in là Microsoft Internet Explorer, tuy nhiên, nếu bạn cũng muốn sử dụng plug-in với Netscape, kiểm tra hộp cũng Netscape 6. Lưu ý rằng các tùy chọn này chỉ cho sử dụng Java applet trong trình duyệt, không cho các ứng dụng Java (xem Chương 8, "Ứng dụng và Applet" để biết chi tiết hơn về sự khác biệt).

Sau khi nhấp Next, SDK sẽ cài đặt Java, và bạn sẽ được sẵn sàng để bắt đầu làm ra đơn giản đầu tiên ứng dụng Java và các applet của bạn.

Lưu ý Mặc dù là một nhà phát triển bạn cần khá lớn Java SDK để tạo ra các ứng dụng Java và applet, người dùng chỉ cần JRE 1,4 (Java Runtime Environment). Nếu điều này là cần thiết, có lẽ bạn đời của bạn để có thể chơi trò chơi Applet mới nhất của bạn trên trang web, Java Runtime Environment 1,4 có sẵn trên đĩa CD và đồng hành từ Sun Microsystems, Inc trang web (http://java. sun.com). 

Bạn nên biết rằng các công cụ, chẳng hạn như các trình biên dịch Java javac.exe và java.exe các thông dịch viên, được chứa trong các thùng / thư mục của thư mục cài đặt SDK. Chúng tôi sẽ xem xét sử dụng các tính năng này trong chương kế tiếp khi chúng ta bắt đầu lập trình.

Một Word trên môi trường phát triển tích hợp (IDE) 

Mặc dù nó có thể biên dịch các ứng dụng Java và các applet từ dòng lệnh (đó là phương pháp chúng tôi đã chọn cho cuốn sách này), đó là một ý tưởng tốt để sử dụng một môi trường phát triển tích hợp (IDE). Lý do chính của việc này là nó cung cấp cho bạn tất cả mọi thứ ở một nơi (ví dụ, một trình soạn thảo văn bản, trình biên dịch / thông dịch viên liên kết, hệ thống trợ giúp, và đôi khi thậm chí nhiều tính năng hữu ích như mã tự động hoàn tất).

Công cụ phát triển của chúng tôi được lựa chọn là JCreator, vì nó cung cấp một IDE hợp lý đơn giản mà vẫn duy trì một số tính năng tuyệt vời. Các phiên bản phần mềm miễn phí có sẵn trên đĩa CD đồng, tuy nhiên, chúng tôi khuyên bạn nên nâng cấp lên phiên bản chuyên nghiệp. Thông tin thêm có thể được tìm thấy trên http://www.jcreator.com trang web.

Lưu ý rằng kỹ thuật thích IDE Mika biên tập của chúng tôi là IntelliJ IDE. Nó là khá dễ sử dụng và có nhiều tính năng rất mạnh mẽ trong nó: http://www.intellij.com/idea/. 

Lưu ý (từ kỹ thuật biên tập viên Joel) Nếu bạn có thêm vài MB RAM, chắc chắn Eclipse cung cấp cho một thử. Điều này trình biên tập mã nguồn mở miễn phí Java được xây dựng bởi IBM là tốt hơn so với nhiều cấp độ chuyên nghiệp và IDE là được một cộng đồng người sử dụng đóng góp lớn, cũng như hỗ trợ ngành công nghiệp (bao gồm Borland, Rational, Togethersoft, và Webgain). Nó cho phép để điều hướng sạch đơn giản, và gỡ lỗi tiên tiến của mã, với các công cụ và trình thuật sĩ để xây dựng và cấu trúc lại mã của bạn. Gia tăng biên soạn cho phép bạn chỉnh sửa chương trình của bạn trong khi nó đang chạy. Nó rất hữu ích để viết trò chơi cho một máy chủ mạng: http://www.eclipse.org.

Trang web hữu ích 

http://java.sun.com-This trang web là nhà của nền tảng Java và cung cấp tất cả các tin tức mới nhất và cập nhật về Java. Trong số lượng lớn các tính năng của nó, trang web này bao gồm các phiên bản mới nhất của J2SDK cho tải về, cộng đồng của một nhà phát triển lớn (mà bạn có thể đăng ký vào), và hướng dẫn hữu ích trực tuyến nhiều người.

http://www.javagaming.org-This trang web được hỗ trợ bởi Sun Microsystems và được thiết kế để hỗ trợ việc tạo ra các trò chơi sử dụng công nghệ Java cho bất kỳ phạm vi của lập trình viên. Trang web này bao gồm hướng dẫn và duy trì một cộng đồng lớn của các diễn đàn đầy đủ các kinh nghiệm lập trình Java, những người sẽ trả lời câu hỏi của bạn trong thời gian không. Năm nói rằng, các diễn đàn hiện nay rất rộng lớn mà họ phải bao gồm rất nhiều câu hỏi của bạn rồi. (Chúng tôi sẽ không cung cấp cho bạn tên người dùng của chúng tôi trên trang này để cứu chúng ta khỏi bối rối, trong trường hợp bạn tình cờ nhận thấy một số câu hỏi mà chúng ta có thể đã được đưa lên Hội đồng.)

http://www.javaworld.com-This trang web bao gồm nhiều hướng dẫn và cột bao gồm một loạt các chủ đề với sự đóng góp của các lập trình viên trên toàn thế giới, nó cũng chứa nhiều diễn đàn để bạn có thể gửi câu hỏi. Bạn có một ngày có thể đăng một cột hữu ích trên trang web này, nếu bạn trở nên đủ tốt.

http://www.mysql.com-This là trang web nhà cho các cơ sở dữ liệu nguồn mở MySQL. Trang web này bao gồm các tải quan trọng là chúng ta sẽ thảo luận trong Chương 15 khi chúng ta nhìn vào cách sử dụng cơ sở dữ liệu để lưu trữ thông tin trực tuyến và kết nối đến nó thông qua JDBC (Java Database Connectivity).

Tóm tắt 

Trong chương này, chúng tôi phát hiện ra về Java và sau đó theo sau đó bằng cách thiết lập SDK Java. Trong chương tiếp theo chúng ta sẽ đi xem một vấn đề cơ bản của lập trình Java. Bây giờ Java đã trở thành trò chơi nhiều hơn định hướng, chúng tôi chỉ có thể cho rằng nó sẽ nhận được tốt hơn và tốt hơn. Như nhà phát triển hơn sử dụng nó, sẽ có nhiều nhu cầu cho các tính năng mới, sẽ tăng cường ngôn ngữ này đã lớn hơn trong tương lai.

CHUONG II

Chương 2: Khái niệm cơ bản của lập trình Java 

"Tất cả thế giới sẽ là kẻ thù của bạn, hoàng tử của một ngàn kẻ thù." 

-Watership Xuống

Giới thiệu 

Hy vọng rằng bạn là tất cả các thiết lập bây giờ và sẵn sàng để thực hiện một số mã của riêng bạn. Trong chương này bạn sẽ học về cấu trúc của ngôn ngữ Java với một loạt các chương trình giao diện điều khiển đơn giản. Một chương trình giao diện điều khiển là một chương trình là dựa trên văn bản và trông tương tự như văn bản đã nhập trong một cửa sổ lệnh. Các chương trình ví dụ trong các chương đầu của cuốn sách này là các chương trình giao diện điều khiển và không trực quan hấp dẫn các ứng dụng cửa sổ hoặc applet. Chúng tôi sẽ giữ nó đơn giản để bắt đầu với cho đến khi bạn hiểu được các loại hạt và chốt của ngôn ngữ Java

Giới thiệu về lập trình hướng đối tượng (OOP) 

Việc chuyển đổi từ một ngôn ngữ lập trình thủ tục (không OOP) với một ngôn ngữ lập trình hướng đối tượng là một bước tiến lớn cho nhiều người lập trình. Đúng là cả hai phương pháp của chương trình cuối cùng có thể đạt được các mục tiêu như nhau, nhưng bạn sẽ tìm thấy OOP là gọn gàng và cách nhanh hơn để chương trình, nó là phù hợp hơn cho làm việc theo nhóm, và chương trình này thường dễ dàng hơn để thiết kế bằng cách sử dụng cách tiếp cận hướng đối tượng. Với OOP trong Java, bạn sẽ thấy rằng lập trình là khó khăn để bắt đầu, nhưng rất dễ và rất bổ ích một khi bạn chủ nó.

Một đối tượng là gì? 

Đối tượng là những khối xây dựng tạo nên một chương trình. Thật khó để giải thích chính xác những gì một đối tượng là bởi vì một đối tượng có thể được bất cứ điều gì bạn muốn. Ví dụ, bạn có thể tạo ra một đối tượng đại diện cho một người nước ngoài có thể chứa tất cả các thông tin liên quan đến người ngoài hành tinh và cũng có chức năng liên kết với nó. Bạn có thể bao gồm dữ liệu như số lượng cuộc sống người ngoài hành tinh và cũng có các chức năng ảnh hưởng đến các dữ liệu như mã để giết người ngoài hành tinh, có thể loại bỏ một trong cuộc sống.

Các yếu tố thiết yếu tạo nên một đối tượng là các biến và phương pháp. Các biến được thành viên dữ liệu, hoặc các thuộc tính, có chứa dữ liệu liên quan đến đối tượng, chẳng hạn như là một chuỗi văn bản hoặc giá trị số. Phương pháp cung cấp các chức năng của đối tượng và có thể được sử dụng để tương tác với các thuộc tính. Phương pháp còn được gọi là chức năng hoặc thủ tục khác nhau trong ngôn ngữ lập trình khác.

Lập trình hướng đối tượng trong Java 

Ngôn ngữ Java là hoàn toàn hướng đối tượng. Điều này có nghĩa rằng không có báo cáo toàn cầu nào (mặc dù các thành viên tĩnh có thể được quan niệm như là hơi toàn cầu, chúng tôi sẽ thảo luận về các thành viên tĩnh sau này). Bất kỳ thuộc tính hoặc các phương pháp phải được định nghĩa như là một phần của một lớp hoặc giao diện. Chúng tôi sẽ thảo luận về giao diện trong chương 4, "Nhiều lớp học", do đó, không lo lắng về chúng trong thời gian tới.

Một lớp trong Java được sử dụng để xác định cấu trúc của một đối tượng. Một lớp có thể được chia thành ba phần chính: nhà xây dựng, thuộc tính (thuộc tính), và phương pháp.

Bây giờ hãy nhìn vào một ví dụ về một cấu trúc lớp học rất đơn giản có chứa ba phần trước khi chúng tôi đi thêm nữa. Một ví dụ của một lớp có thể là một người, mà có thể mô tả các thuộc tính và phương pháp mà một người có thể có liên kết với chúng. Một đối tượng sau đó có thể được tạo ra từ lớp người, như bạn hay tôi, hoặc thậm chí đối tác của bạn (nếu bạn không có một đối tác, sau đó cũng được thực hiện, bạn là một lập trình đúng).

Để tạo một đối tượng, trước tiên chúng ta phải tạo một lớp. Đừng lo lắng về việc biên dịch bất kỳ của mã này ngay bây giờ, chỉ cần ngồi lại, lấy một cà phê, và cố gắng hiểu một số điều cơ bản.

Đây là sự khởi đầu của "người" của chúng tôi class: 

class Person 

Bây giờ, tại thời điểm này, chúng tôi có mã đề cương cho một lớp người. Đầu tiên chúng ta nên thêm một số thuộc tính. Hãy thêm một thuộc tính số để lớp để lưu trữ các độ tuổi của một người. 

class Person 

int age; 

Các từ khóa int là viết tắt của số nguyên, đại diện cho một loại dữ liệu số, đó là giải thích chi tiết hơn trong phần sau của chương. Tại thời điểm này, các lớp người là tất cả các thuộc tính và chức năng không có (nêu rõ một sự nghiệp chính trị). Chúng tôi có thể thêm một phương pháp để lớp học như sau, có thể được sử dụng để thay đổi giá trị trong độ tuổi: 

class Person 

public void setAge(int newAge) 

// set the age to the value stored in newAge 

age = newAge; 

int age; 

Bây giờ chúng ta có một lớp người được gọi là, có một phương pháp gọi là setAge và thuộc tính được gọi là one tuổi. Các setAge phương pháp có thể được sử dụng để gán một giá trị mới vào tuổi của người. Một lần nữa, đừng lo lắng quá nhiều về phương pháp làm việc như thế nào trong thời gian tới; cà phê của bạn chỉ nên mát mẻ, đủ để uống khoảng bây giờ.

Để tạo một đối tượng (hoặc một thể, vì nó còn được gọi) từ lớp người, một nhà xây dựng phải được gọi. Tất cả các lớp có một constructor mặc định, mà không làm gì và có thể được xây dựng quá tải với nhiều loại, như chúng ta sẽ nhìn thấy.

Các nhà xây dựng 

Xây dựng được một phương pháp được gọi khi đối tượng được tạo ra và sử dụng để khởi tạo các trạng thái của đối tượng. Xây dựng phải được khai báo với tên giống như các lớp học, trong đó nó được chứa và không thể có một giá trị trả về (chúng tôi sẽ xem xét giá trị trả lại trong phần "Phương pháp" vào cuối chương này). Bây giờ chúng ta sẽ thêm hai nhà xây dựng cho lớp người:

class Person 

public Person() 

// basic constructor age is set to 0 by default 

public Person(int newAge) 

// contructor that sets the age to a specified value 

setAge(newAge); 

public void setAge(int newAge) 

// set the age to the value stored in newAge 

age = newAge; 

int age; 

Bạn có thể khai báo một tham chiếu đến một đối tượng Person như sau: 

Person billyGate; 

Tại thời điểm này, bạn có một tham chiếu đến một đối tượng của loại người, mà hiện tại không tham khảo bất kỳ đối tượng. Các thành viên của đối tượng không thể được truy cập, như tuổi thuộc tính, bởi vì không có đối tượng đã được tạo ra. Lưu ý rằng billyGate tham chiếu biến thực sự là bằng vô giá trị tại thời điểm này, các từ khóa vô giá trị được thảo luận trong chương kế tiếp.

Một cuộc gọi đến một nhà xây dựng phải được thực hiện để tạo ra một đối tượng mới của nhân loại, giao billyGate biến để tham chiếu đối tượng mới.

Nếu không có nhà xây dựng được khai báo cho một lớp, một constructor mặc định là có sẵn mà không có các thông số và chỉ cần tạo một đối tượng mặc định của lớp khi gọi. Trong đoạn mã của chúng tôi, chúng tôi đã tạo riêng của người xây dựng mặc định (chúng tôi), trong đó có không có mã, và một nhà xây dựng thứ hai cũng được gọi là người (int Newage), trong đó có chứa mã mà bộ tuổi giá trị trong đối tượng người đến một độ tuổi mới theo quy định của một giá trị tham số. Chúng tôi sẽ xem xét các thông số trong phần "Phương pháp" gần cuối chương này, do đó, không lo lắng nếu bạn không hiểu đầy đủ về chúng.

Lưu ý Đã có chúng tôi chỉ tuyên bố xây dựng thứ hai và bỏ qua xây dựng đầu tiên, sẽ không còn có được một constructor mặc định có sẵn mà không có các thông số, như các constructor mặc định chỉ tồn tại nếu lớp không chứa bất kỳ nhà xây dựng người dùng định nghĩa. 

Để tạo một đối tượng từ lớp Person, chúng ta có thể sử dụng dòng mã sau đây: 

// using second constructor, set age value to 21 

Person billyGate = new Person(21); 

Điều này dòng mã tuyên bố một định danh gọi là billyGate của Người và tạo ra một loại đối tượng người "mới" bằng cách sử dụng constructor thứ hai trong lớp người để khởi tạo đối tượng, thiết lập giá trị tuổi trong đối tượng người mới lên 21.

Chúng tôi cũng có thể sử dụng đoạn mã sau thay vào đó, thời gian này bằng cách sử dụng xây dựng (mặc định) đầu tiên khởi tạo đối tượng và sau đó thiết lập giá trị của độ tuổi sử dụng phương pháp setAge, mà là một thành viên của các đối tượng mới được tạo ra. 

// use first constructor 

Person billyGate = new Person(); 

// use setAge member to set age to 21 

billyGate.setAge(21); // set the value of age to 21 

We can also access the age variable and set its value directly, as follows:  

billyGate.age = 21; 

Chú ý: Bạn không thể có hai nhà xây dựng có chữ ký giống nhau. Chúng ta sẽ thấy về phương pháp chữ ký trong phần "Phương pháp" vào cuối chương này. 

Cho đến nay chúng ta đã thấy instantiation, mà là thuật ngữ dùng để mô tả việc tạo ra một đối tượng hoặc thể hiện của một lớp. Sơ đồ dưới đây hy vọng sẽ giúp bạn hiểu điều này tốt hơn một chút, vì nó cho thấy mối quan hệ giữa các lớp người và các đối tượng tạo ra từ nó.

Hinh anh .... 

Loại thành viên và đối tượng thành viên-Từ khoá tĩnh 

Tôi hứa rằng đây là bit cuối cùng trước khi chúng tôi bắt đầu làm cho một số mã mà chúng tôi thực sự có thể chạy, nhưng nó không cần giải thích. Một thành viên đối tượng là một thành viên được tạo ra khi đối tượng được tạo ra. Điều này có nghĩa nó chỉ có thể được truy cập một lần đối tượng đã được tạo ra bởi vì nếu không nó không tồn tại. Ví dụ chúng ta đã thấy được tạo ra một thể hiện của lớp người được tham chiếu bởi billyGate. Chúng ta có thể cũng đã tạo ra nhiều trường hợp nhiều lớp người. Giả sử chúng ta nói rằng đối tượng billyGate là người duy nhất mà chúng ta sẽ bao giờ cần hoặc muốn tạo, sau đó chúng ta có thể phế liệu các lớp người hoàn toàn và chỉ đơn giản là tạo một lớp mới gọi là BillyGate thay thế. 

class BillyGate 

public static void setAge(int newAge) 

// set the age to the value stored in newAge 

age = newAge; 

int static age; 

Chú ý rằng chúng tôi đã loại bỏ các nhà xây dựng và bổ sung thêm các từ khóa tĩnh để hai thành viên được xác định. Điều này là do chúng ta không còn cần phải tạo ra một thể hiện của lớp này. Chúng tôi chỉ có thể truy cập các thành viên tĩnh bằng cách sử dụng tên lớp. Ví dụ: 

BillyGate.setAge(21); 

Các thành viên tĩnh được gọi là thành viên lớp, trong khi trước khi chúng tôi có các thành viên đối tượng.

Các ví dụ mà chúng ta đã sử dụng cho đến nay chỉ chứa các thành viên đối tượng hoặc các thành viên lớp, bạn tất nhiên có thể sử dụng cả hai. Chúng ta hãy quay trở lại lớp người của chúng tôi bây giờ và thêm một thuộc tính tĩnh. Thuộc tính tĩnh phải được cái gì đó là có được giống nhau cho tất cả các đối tượng người mà chúng ta tạo ra. Vì vậy, chúng ta có thể thêm vào một biến số nguyên goi la daysInAYear.  

class Person 

// code as before 

static int daysInAYear; 

Chúng tôi có thể truy cập daysInAYear thuộc tính trước khi chúng tôi tạo ra bất kỳ đối tượng từ lớp Person. Ví dụ:

Person.daysInAYear = 365; 

Nếu chúng ta tạo ra các trường hợp mới của Người, sau đó họ cũng có thể truy cập các biến tĩnh 

daysInAYear.  

Person glennMurphy = new Person(21); 

Person andrewMulholland = new Person(20); 

glennMurphy.daysInAYear = 366; // it is a leap year 

System.out.println(andrewMullholland.daysInAYear); 

Mã này sẽ tạo ra hai trường hợp mới của Người, tham chiếu bởi glennMurphy và andrewMulholland. Các đối tượng glennMurphy sau đó đặt daysInAYear tĩnh biến để 366, và các đối tượng andrewMulholland sẽ truy cập daysInAYear, in giá trị của nó vào cửa sổ giao diện điều khiển (in ấn mã này sẽ được giải thích sau này trong chương). Các con số đó sẽ được in vào cửa sổ giao diện điều khiển là 366, có nghĩa là daysInAYear không thuộc về bất kỳ của các đối tượng một mình, nó thuộc về tất cả chúng, và thay đổi từ một ảnh hưởng đến việc khác. Chỉ có một phần bộ nhớ chứa giá trị 366 mà tất cả họ đều tham khảo. Tóm lại, đó là cùng một thuộc tính tuy nhiên nó được truy cập. Hình 2-2 minh họa mối quan hệ giữa các thành viên lớp lớp người có chứa đối tượng và các thành viên và các đối tượng tạo ra từ nó.

Hinh ..... 

Hình 2-2: 

Tài liệu tham khảo 

Để truy cập các đối tượng (nên nhớ họ là trường hợp của các lớp học) trong Java, chúng ta sử dụng những gì được gọi là tài liệu tham khảo. Chúng tôi đã sử dụng ba tài liệu tham khảo cho đến nay trong các ví dụ mã của chúng tôi: billyGate, glennMurphy, và andrewMulholland. Đây không phải là các đối tượng thực tế mà chúng tôi tạo ra mà chỉ là tài liệu tham khảo (còn gọi là xử lý) cho các đối tượng tạo ra. Lấy ví dụ mã sau đây: 

andrewMulholland = glennMurphy; / / anh sẽ không bao giờ bằng của tôi 

Mã này chỉ đơn giản là làm cho andrewMulholland tham chiếu cùng một đối tượng tham chiếu glennMurphy, vì vậy sau đó bạn có thể truy cập cùng một đối tượng sử dụng một trong hai tài liệu tham khảo. Điều này là tốt nhất minh họa trong hình 2-3 bằng cách nhìn thấy những gì Hình 2-2 sẽ như thế nào sau khi các mã trên được thực hiện. 

hinh.... 

Hình 2-3: 

Các đối tượng có độ tuổi bằng 20 mà andrewMulholland một lần tham chiếu bây giờ bị mất, nhưng đừng lo lắng về giải phóng bộ nhớ, đây là được chăm sóc bằng cách thu gom rác của Java (xem "Bộ sưu tập rác và Tạo đối tượng" trong Chương 12 để biết thêm chi tiết).

Bây giờ chúng ta có được một cái gì đó biên soạn, cuối cùng!

HelloJavaWorld-Một chương trình điều khiển đơn giản 

Vâng, bạn đã hoàn thành mà nên tách cà phê bây giờ, vì vậy chúng ta hãy nứt với chương trình ví dụ đầu tiên của chúng tôi, HelloJavaWorld.java. Trước tiên, bạn phải tạo một tập tin nguồn được gọi là HelloJavaWorld.java và sau đó nhập mã nguồn sau đây vào đó:

public class HelloJavaWorld 

public static void main (args String []) 

System.out.println ("Hello Java Thế giới"); 

Bây giờ biên dịch mã nguồn của bạn bằng cách vào dấu nhắc lệnh và nhập lệnh sau đây (đảm bảo rằng bạn đang ở trong cùng thư mục với mã của bạn):

C: \ j2sdk1.4.0 \ bin \ javac HelloJavaWorld.java 

Lưu ý rằng bạn có thể cần phải thay đổi C: \ j2sdk1.4.0 \ bin phần nếu bạn đã cài đặt Java vào một thư mục khác với mặc định đề nghị.

Một khi bạn đã biên soạn mã nguồn mà không có bất kỳ lỗi nào, bạn sẽ thấy rằng một tập tin mới gọi là HelloJavaWorld.class đã được tạo ra trong thư mục nguồn. File này là file chương trình được sử dụng với các thông dịch java.exe để chạy chương trình của bạn. Đây là lệnh mà bạn cần để thực hiện các tập tin lớp học đã được tạo ra.

C: \ j2sdk1.4.0 \ bin \ java HelloJavaWorld 

Khi bạn chạy chương trình này, dòng chữ "Xin chào thế giới Java" sẽ được hiển thị trong một cửa sổ giao diện điều khiển. Điều này có thể được nhìn thấy trong ảnh chụp màn hình sau đây:

Hình 2-4: 

Tất cả các chương trình ứng dụng Java bắt đầu thực thi mã trong phương pháp này gọi là chính, như trong ví dụ HelloJavaWorld. Bên trong phương pháp chính là một dòng mã in văn bản của chúng tôi chọn để màn hình. Chương trình này về cơ bản là một lớp có chứa một phương pháp, chính, đó là tĩnh và có một dòng mã để in một số văn bản vào cửa sổ giao diện điều khiển. Để có một khối mã, bạn chỉ cần sử dụng dấu ngoặc nhọn để bắt đầu và kết thúc khối. Trong ví dụ này, lần đầu tiên mở ra khung xoăn và cuối cùng đóng khung xoăn định cụ thể việc phân đoạn mã cho HelloJavaWorld lớp, trong khi giữa hai dấu ngoặc nhọn xác định đoạn mã cho phương pháp chính. Hầu hết các bạn biết cụm từ "những gì phải đi lên đi xuống"; ". Xoăn cho mỗi khung mở ra, thì phải có đóng khung xoăn" cũng còn có một cụm từ, đó không phải là quá phổ biến, mà đi

Đừng lo lắng về công chúng từ khóa trong thời gian này, từ khóa này liên quan đến việc kiểm soát các thuộc tính và phương pháp tiếp cận, được giải thích chi tiết hơn trong chương 4, "Nhiều lớp học", nơi mà việc sử dụng của nó trở nên chuyên đề cùng với các tư nhân và bảo vệ từ khóa và truy cập mức khoán.

Chúng tôi sẽ dần dần tìm hiểu về tất cả các bit của mã mà đi vào làm ví dụ đơn giản như cuốn sách tiến bộ. Điều quan trọng là nhận ra rằng tất cả các khía cạnh của mã này là có một lý do, và tất cả những lý do này sẽ được giải thích một bước tại một thời điểm.

In ấn văn bản về màn hình điều khiển 

Trong ví dụ đầu tiên của chúng tôi, HelloJavaWorld.java, chúng tôi sử dụng một dòng mã để in một chuỗi văn bản vào cửa sổ giao diện điều khiển.

System.out.println ("Một số văn bản ở đây"); 

Các chuỗi văn bản được nhập vào giữa các ký tự ngoặc kép. Phương pháp thực tế mà được gọi là println, mà là một thành viên của một đối tượng tĩnh gọi, do đó là một thành viên của Hệ thống lớp học. Các lớp hệ thống cung cấp cơ sở cho tiêu chuẩn đầu vào và đầu ra, trong số những thứ khác, và được bao gồm theo mặc định trong tất cả các chương trình của bạn như là một phần của gói java.lang. Chúng tôi sẽ quan sát chi tiết gói trong Chương 5.

Bất cứ khi nào chúng tôi yêu cầu đầu ra cửa sổ giao diện điều khiển, chúng tôi sẽ sử dụng lệnh này mà chúng ta cũng có thể in giá trị của các biến. Trong chương này, bạn sẽ thường xuyên nhìn thấy giá trị biến quy định với một chuỗi văn bản cách nhau bằng toán tử "+" như sau:

System.out.println ("Giá trị =" + giá trị); 

Cũng như là một nhà điều hành số học, mà chúng tôi sẽ xem xét rất sớm, các nhà điều hành + cũng được sử dụng trong Java cho nối chuỗi (gia nhập một chuỗi vào cuối của một số khác). Giá trị của các giá trị biến, trong trường hợp của các dòng trước mã, được chuyển đổi bằng Java thành một chuỗi giá trị và gắn vào phần cuối của chuỗi quy định. Đừng quan tâm mình với quá nhiều trong thời gian, chúng ta sẽ thảo luận chi tiết hơn trong chương tiếp theo khi chúng tôi bắt đầu sử dụng dây.

Bình luận 

Bổ sung thêm ý kiến để mã của bạn là rất quan trọng. Bình luận cho phép bạn thêm câu trong mã của bạn sẽ được bỏ qua bởi trình biên dịch. Điều này quan trọng bằng nhiều cách, như cho việc thiết lập nhắc nhở, báo cáo sai lỗi, và mô tả những gì đang thực sự làm. Bạn có thể thêm ý kiến để mã của bạn sử dụng hai phương pháp cơ bản: theo dòng hoặc khối. Sau đây là một ví dụ về một bình luận trong một dòng mã:

/ / Không có mã của tôi là làm việc, ARRRGGHH! 

Bất kỳ văn bản đã nhập vào một dòng mã sau khi hai dấu gạch chéo phía trước (/ /) là một bình luận và sẽ không can thiệp với các chức năng của chương trình của bạn. Bạn cũng có thể sử dụng phương pháp này trên cùng một dòng mà bạn đã mã, nhưng loại hình này bình luận phải được nhập về phía bên phải của mã bất kỳ.

Do một số mã; / / này là ở phía bên tay phải

Các phương pháp khác để thêm ý kiến để mã của bạn là chỉ định một khu vực khối. Điều này được thực hiện bằng cách xác định đầu và cuối của bình luận, sử dụng / * để bắt đầu chặn và * / kết thúc nó. Sau đây là những ví dụ của việc sử dụng các khối bình luận:

/ * Bạn có thể nhập thông tin văn bản ở đây * / 

/ * 

Đây là một số văn bản để mô tả những gì chương trình của tôi không. 

Bạn có thể sử dụng các dòng như nhiều như các báo cáo gửi kèm theo. 

* / 

Một số mã / * chúng có thể được thêm vào giữa mã * / More luật; 

/ / Mặc dù điều này làm cho mã của bạn lộn xộn / ít có thể đọc được

Các loại dữ liệu nguyên thủy 

Java hỗ trợ nhiều loại dữ liệu nguyên thủy các loại, từ số để nhân vật trên. Những loại dữ liệu cho phép lưu trữ dữ liệu dưới nhiều hình thức khác nhau mà sử dụng số tiền khác nhau của bộ nhớ. Bạn sẽ sử dụng các loại dữ liệu khác nhau để lưu trữ nhiều giá trị khác nhau (chẳng hạn như độ tuổi của một ai đó, như chúng ta đã thấy).

Dữ liệu Số Các loại 

Các loại dữ liệu số có thể được chia thành hai khu vực: các số nguyên và dấu chấm động.

Số nguyên 

Số nguyên có giá trị dữ liệu được sử dụng để lưu trữ một cách rõ ràng các số nguyên, chẳng hạn như 3, 7022, hoặc -99. Giá trị 3,14, ví dụ, không phải là một giá trị số nguyên nhưng được biết đến như một giá trị dấu chấm động, như chúng ta sẽ thấy một chút sau này trong chương này. Bảng sau đây cho thấy các biến kiểu số nguyên four có sẵn trong Java, phạm vi của họ, và số lượng bộ nhớ mà họ sử dụng.

Integer Loại 

Phạm vi 

Bộ nhớ (byte) 

byte 

-128 Đến 127 

ngắn 

-32.768-32767 

int 

-2147483648 Đến 2147483647 

dài 

-9223372036854775808 Đến 9223372036854775807 

Lưu ý Không có loại không dấu có sẵn một cách rõ ràng trong Java. Trong ngôn ngữ lập trình khác, việc sử dụng các loại dữ liệu unsigned số cho thấy rằng giá trị được lưu trữ sẽ chỉ được tích cực, có nghĩa là phạm vi giá trị tích cực là tăng gấp đôi. Ví dụ, một byte unsigned sẽ có phạm vi 0-255 thay vì -128 đến 127. 

Để sử dụng một biến, nó phải được khai báo, mà chỉ đơn giản nói rằng bạn đang tạo ra các biến của một kiểu dữ liệu quy định. Có một số cách mà bạn có thể khai báo một biến. Cách đơn giản như sau:

int numberA; 

Đây là cách tiêu chuẩn mà trong đó tất cả các biến được khai báo, bằng cách nhập các loại dữ liệu theo sau là một tên mà bạn phải chỉ định. Java là một ngôn ngữ trường hợp nhạy cảm. Điều này có nghĩa rằng nếu chúng ta vừa tuyên bố numberA biến, cố gắng để truy cập biến này bằng cách gõ NUMBERA sẽ không làm việc. Trong các ngôn ngữ khác, chẳng hạn như Pascal, điều này sẽ được okay.

Lưu ý Tên biến phải bắt đầu bằng một lá thư hay một gạch dưới (_) nhân vật (không phải là số). Ngoài ra, bạn không thể sử dụng bất kỳ các từ khóa dành riêng như tên biến. 

Đoạn mã trên tạo ra một biến kiểu int được gọi là numberA. Nếu bạn muốn khai báo một biến khác, bạn có thể lặp lại mã này, chỉ định một tên khác nhau thay vì numberA, như sau:

int numberA; 

int numberB; 

Thuận tiện, bạn cũng có thể làm điều này trong một dòng bằng cách sử dụng một dấu phẩy (,) để phân cách các biến.

int numberA, numberB; 

Giá trị của một biến cũng có thể được phân công khi biến được khai báo.

numberA int = 128, numberB = -64; 

Bạn không cần phải thiết lập giá trị cho cả hai nếu bạn không muốn.

/ / Thiết lập giá trị của chỉ numberA 

numberA int = 128, numberB; 

/ / Hoặc giá trị thiết lập numberB chỉ 

int numberA, numberB = -64; 

Sau đó, bạn có thể gán các giá trị sau này trong mã bây giờ mà các biến đã được khai báo.

/ / Thiết lập numberA đến 77 

numberA = 77; 

/ / Thiết lập giá trị của numberB với giá trị của numberA. 

numberB = numberA; 

Chúng tôi đã nói trước về các đối tượng và tài liệu tham khảo cho các đối tượng, và các kiểu dữ liệu nguyên thủy không phải là tài liệu tham khảo, nếu bạn thiết lập numberB bằng numberA, giá trị của numberB sẽ được thiết lập bằng với giá trị numberA. Họ sẽ không tham chiếu bộ nhớ như nhau, nên các thay đổi được thực hiện cho một người không sẽ ảnh hưởng đến khác sau này trong mã.

numberA = 77; 

numberB = numberA; 

numberA = 101; 

/ / NumberB vẫn còn bằng 77 

Chuyển đổi giữa dữ liệu Integer loại 

Số nguyên giá trị kiểu int theo mặc định. Đó là, bất kỳ số nào mà bạn cứng-mã, như giá trị 77 mà chúng tôi chỉ giao cho numberA biến, sẽ có phạm vi của kiểu dữ liệu int, như thể hiện trong bảng phạm vi số nguyên trên trang trước. Điều này có nghĩa rằng khi khai báo giá trị cho các biến của loại dài, bạn phải chỉ định trong các mã có số lượng nhập cũng thuộc loại dài và không có kiểu int. Ví dụ, một nỗ lực để thiết lập một biến của loại dài đến một giá trị vượt quá giới hạn của một int (hoặc ít hơn hoặc lớn hơn -2147483648 2147483647) sẽ gây ra một lỗi biên dịch.

lâu myNumber = 3000000000; / / điều này sẽ không biên dịch 

Để cho trình biên dịch mà bạn muốn giá trị 3000000000 (có nghĩa là, 3 với chín số không) để được loại dài, bạn phải thêm chữ cái L (hoặc l unadvisable chữ thường, vì điều này trông giống như số 1) vào cuối của số.

lâu myNumber = 3000000000L; / / này sẽ biên dịch 

Một vấn đề khác là thiết lập các giá trị của một kiểu dữ liệu số nguyên từ giá trị của một loại dữ liệu số nguyên có nghĩa là lớn trong phạm vi. Hãy nói rằng chúng tôi có bốn biến sau:

numberByte byte = 27; 

ngắn numberShort = 2001; 

int numberInt = 55000; 

lâu numberLong = 30000000000L; 

Các báo cáo sau đây sẽ được tốt:

numberShort = numberByte; / / ngắn có phạm vi lớn hơn byte 

numberLong = numberShort; / / dài có phạm vi lớn hơn ngắn 

Các biến được gán một giá trị phải có một kiểu dữ liệu nhỏ hơn hoặc bằng các kiểu dữ liệu của biến mà từ đó nó đang được phân công, nếu không, một phương pháp gọi là typecasting phải được sử dụng để nói với trình biên dịch để chuyển đổi các giá trị được gán cho rằng của một kiểu dữ liệu chấp nhận được. Trong thực tế, khi chúng ta chuyển đổi các kiểu dữ liệu giá trị hợp lệ trước đây, điều này được biết đến như đúc ngầm, nơi mà chúng ta biết rằng các dữ liệu có thể được hợp lệ được giao. Các typecasting thực sự mà chúng tôi tham khảo được biết đến như đúc rõ ràng. Đây là nơi mà các diễn viên phải được xác định trong mã riêng của mình để cảnh báo bạn những nguy hiểm liên quan đến các diễn viên (ví dụ, có thể mất dữ liệu), cho phép bạn để chắc chắn rằng bạn đang chuẩn bị để mất dữ liệu nếu đó là trường hợp.

numberShort = numberLong; / / điều này sẽ không biên dịch 

/ / Sử dụng typecasting 

numberShort = (ngắn) numberLong; / / này sẽ biên dịch 

/ / Byte là chấp nhận được cho một giá trị quá ngắn 

numberShort = (byte) numberLong; / / này sẽ biên dịch cũng 

Để định kiểu một giá trị, chỉ đơn giản là xác định loại kèm theo trong dấu ngoặc đơn, viết nó ở bên trái của giá trị trong câu hỏi.

Điều quan trọng là bạn chọn loại dữ liệu chính xác khi lập trình, nếu không bạn có thể mất giá trị bởi vì kích thước của giá trị có thể quá lớn để được lưu trữ trong các kiểu dữ liệu quy định.

ngắn numberShort = 2001; 

byte numberByte = (byte) numberShort; 

/ / Byte không thể lưu trữ một giá trị số nguyên dương lớn hơn 127 

Mã này typecasts giá trị của numberShort gõ byte, mà sẽ thiết lập giá trị của numberByte một số dường như ngẫu nhiên vì năm 2001 là ra khỏi phạm vi lưu trữ của nó. Giá trị của numberByte thực sự sẽ thiết lập giá trị thấp nhất 8 bit của numberShort. Giá trị của numberShort không bị ảnh hưởng bởi mã typecasting, nó vẫn còn tương đương với năm 2001.

Vì vậy, khi gán một biến từ một biến với một kiểu dữ liệu lớn hơn, hãy chắc chắn rằng giá trị được lưu trữ trong phạm vi được phân công của biến, nếu không, sử dụng một loại dữ liệu lớn hơn ở nơi đầu tiên. Đôi khi nó chỉ đơn giản là thuận tiện hơn để luôn luôn sử dụng các kiểu dữ liệu int và không phải lo lắng về typecasting và mất dữ liệu có thể.

Hãy xem một ví dụ cho bạn để chơi với xung quanh: UsingIntegers.java.

public class UsingIntegers 

public static void main (args String []) 

numberByte byte = 27; 

ngắn numberShort = 2001; 

int numberInt = 50000; 

lâu numberLong = 3000000000L; 

/ / Typecasting không cần thiết như một dài lớn hơn int 

numberLong = numberInt; 

System.out.println ("numberLong phải bằng" + numberLong); 

System.out.println ("numberLong thực sự bằng" + numberLong); 

/ / Định kiểu của giá trị numberShort ngắn để một giá trị byte 

numberByte = (byte) numberShort; 

System.out.println ("numberByte phải bằng" + numberShort); 

System.out.println ("numberByte thực sự bằng" + numberByte); 

Ví dụ này cơ bản làm cho hai nhiệm vụ như các ví dụ về chuyển đổi các giá trị giữa các loại dữ liệu số nguyên. Được giao lần đầu hoạt động tốt, nhưng thứ hai đòi hỏi typecasting. Chạy mã và xem những gì giá trị thực sự được giao từ các chuyển đổi. Kết quả của chương trình trông giống như hình ảnh chụp màn hình này.

Hình 2-5: 

Như bạn thấy, giá trị của 50000 đã được giao thành công từ một kiểu dữ liệu int để một kiểu dữ liệu dài, nhưng giá trị của năm 2001 là không được giao thành công từ một kiểu dữ liệu ngắn để một kiểu dữ liệu byte. Câu trả lời thực tế của -47 đã được giao vì những phương pháp được sử dụng để chuyển đổi giữa các loại dữ liệu, mà trong trường hợp này tham gia bỏ qua thông tin tương đối trên các bit lưu trữ một giá trị byte không thể chứa. Nếu giá trị không phải là năm 2001 nhưng giá trị trong phạm vi mà một byte có thể lưu trữ, phân sẽ có được thành công.

Floating-Point kiểu dữ liệu 

Bây giờ bạn sẽ hiểu làm thế nào để khai báo và gán biến với các dữ liệu quy định các loại. Bây giờ chúng ta có thể xem xét hai kiểu dữ liệu mới, float và double, được biết đến như là điểm nổi các loại dữ liệu. Floating-point kiểu dữ liệu cho phép lưu trữ chính xác hơn các số nguyên và các giá trị lưu trữ với chữ số thập phân (ví dụ, 0,25, 3,99, hoặc -12,55555).

Loại F-điểm 

Phạm vi 

Bộ nhớ (byte) 

phao 

± 3.4E 38 (xấp xỉ 7 con số đáng kể) 

đôi 

± 1.7E 308 (15 con số đáng kể) 

Khai báo biến kiểu dấu chấm động là giống như khai báo biến kiểu số nguyên.

floatNumber nổi; 

đôi doubleNumber; 

Gán giá trị cho các biến dấu chấm động là như nhau cũng được, nhưng giá trị mà bạn chỉ định có thể chứa một điểm thập phân.

đôi Pi = 3,141592653589793; 

Các giá trị được giao không yêu cầu một nơi thập phân, nhưng nếu là số nguyên, đôi khi nó làm cho rõ ràng hơn mã của bạn.

đôi flatPi = 3; / / này sẽ làm việc 

đôi flatPi = 3,0; / / hoặc điều này sẽ làm việc quá 

Như chúng ta đã biết, giá trị mặc định cho một số nguyên là kiểu int. Giá trị mặc định cho một giá trị dấu chấm động là của hai loại, có nghĩa là giá trị số được gán cho biến kiểu float phải được đúc một giá trị float. Điều này có thể được thực hiện hoặc bằng cách thêm chữ F (hoặc ưa thích chữ thường f) đến hết giá trị hoặc bằng cách sử dụng phương pháp typecasting rằng chúng ta đã thấy trước đó.

nổi floatNumber = 3,1415; / / điều này sẽ không biên dịch 

/ / Thêm chữ 'e' để kết thúc số 

nổi floatNumber = 3.1415f; / / này sẽ biên dịch 

/ / Sử dụng typecasting 

nổi floatNumber = (float) 3,1414; / / này sẽ biên dịch cũng 

Chuyển đổi giữa Floating-Point loại dữ liệu 

Bạn cũng có thể sử dụng phương pháp typecasting để chuyển đổi từ một đôi cho một biến float, và không có nguy hiểm của việc chuyển đổi đáng kể như sai với số nguyên khi chuyển đổi từ một đôi để một kiểu dữ liệu float, mặc dù một số tính chính xác của các đôi ban đầu số có thể bị mất khi nó được chuyển đổi thành một giá trị nổi kém chính xác. Không có điểm typecasting một giá trị nổi sẽ tăng gấp đôi bởi vì một đôi có thể lưu trữ bất kỳ giá trị mà thả nổi có thể anyway. Ví dụ sau đây, SliceOfPi.java, minh họa điều này hoàn hảo, tuyên bố và thiết lập giá trị của bigPi, một biến của hai loại, và sau đó khai báo một biến float, smallPi, và gán giá trị của nó với giá trị của Pi, typecasting giá trị cho một nổi.

public class SliceOfPi 

public static void main (args String []) 

đôi bigPi = 3,141592653589793; 

nổi smallPi = (float) bigPi; / / sử dụng typecasting 

System.out.println ("bigPi =" + bigPi); 

System.out.println ("smallPi =" + smallPi); 

Khi bạn biên dịch mã này, bạn sẽ nhận được đầu ra tương tự như ảnh chụp màn hình.

Hình 2-6: 

Như bạn thấy trong hình 2-6, tính chính xác của giá trị bigPi khi chuyển đổi sang một giá trị thả nổi và giao cho smallPi biến nổi là ít hơn đáng kể giá trị của nó tăng gấp đôi ban đầu. Bạn có thể tìm thấy nó tốt hơn để chỉ cần sử dụng các kiểu dữ liệu tăng gấp đôi nếu bạn yêu cầu rất chính xác dấu chấm động lưu trữ dữ liệu và không quá quan tâm đến việc sử dụng bộ nhớ.

Chuyển đổi giữa các số nguyên và Floating-Point kiểu dữ liệu 

Đây không phải là xấu vì nó có thể âm thanh, bạn chỉ cần nhìn vào nó một cách hợp lý. Một số nguyên không thể chứa bất kỳ giá trị sau khi một nơi thập phân, do đó, nó sẽ đại diện cho giá trị 3,14 là 3 và nó cũng sẽ đại diện cho các giá trị 3,9 là 3, làm tròn giá trị xuống đến số nguyên lớn nhất nhỏ hơn hoặc bằng giá trị nổi của mình bằng cách tiêu chuẩn chuyển đổi. Một biến dấu chấm động có thể được gán giá trị của một số nguyên mà không có bất kỳ typecasting yêu cầu.

int intNumber = 50000; 

nổi floatNumber = intNumber; 

Hãy nhớ rằng bạn cần phải thêm chữ "e" để nổi-điểm giá trị để giao cho một biến float. Tuy nhiên, điều này là không cần thiết nếu giá trị bạn chỉ định là một giá trị số nguyên.

/ / Không có 'f' được yêu cầu là số nguyên chuyển đổi thẳng đến dấu chấm động 

nổi floatNumber = 50000; 

Để chuyển đổi từ điểm nổi giá trị cho các giá trị số nguyên, chỉ cần sử dụng typecasting.

nổi floatNumber = 50000.6f; 

/ / Sử dụng typecasting 

int intNumber = (int) floatNumber; 

Giá trị của intNumber biến sẽ được thiết lập để 50.000, và 0,6 sẽ được cắt nhỏ ra, giá trị ban đầu vẫn còn lưu trữ trong floatNumber biến dấu chấm động trong khóa học.

Các nhà khai thác số học đơn giản 

Bây giờ chúng ta biết cách khai báo và gán giá trị cho các loại dữ liệu số nguyên và dấu chấm động, chúng ta có thể đi xem một thao tác những giá trị này bằng cách sử dụng các nhà khai thác số. Các nhà khai thác số tiêu chuẩn được trình bày trong bảng dưới đây, cùng với một mô tả.

Nhà điều hành 

Mô tả 

Phép nhân 

Phòng 

Ngoài ra 

Trừ 

Một ví dụ đơn giản của một số biểu hiện là một nhà điều hành, giống như những người trong bảng điều hành ở trên, với một toán hạng ở hai bên của người điều khiển (ví dụ, 5 + 2).

Giá trị của một biến có thể được chỉ định một số biểu hiện sử dụng phương pháp phân công cùng mà chúng ta đã thấy chỉ đơn giản bằng cách sử dụng "=" nhà điều hành chuyển nhượng.

int singleNumber = 4; 

int doubleNumber = 4 + 4; 

int trebleNumber = 4 + 4 + 4; 

Các doubleNumber trebleNumber biến và cũng có thể được giao sử dụng singleNumber đã khai báo biến với các nhà điều hành nhân.

int singleNumber = 4; 

int doubleNumber = singleNumber * 2; / / 4 * 2 = 8 

int trebleNumber = singleNumber * 3 / / 4 * 3 = 12 

Bạn thậm chí có thể xác định giá trị của trebleNumber sử dụng singleNumber biến và doubleNumber với các nhà điều hành bổ sung.

int trebleNumber = singleNumber + doubleNumber; / / 4 + 8 = 12 

Trừ là giống như ngoài.

int positiveNumber = 7; 

negativeNumber int = 0 - 7; / / hoặc chỉ sử dụng = -7 

Hoặc, bạn có thể làm negativeNumber giá trị tiêu cực của giá trị được lưu trữ trong positiveNumber biến.

int âm = dương tính; / / cũng tương đương với -7 

Chia hai giá trị nguyên sẽ cung cấp cho câu trả lời như là một giá trị số nguyên (có nghĩa là, giá trị thực tế được làm tròn xuống đến số nguyên lớn nhất nhỏ hơn hoặc bằng với giá trị thực tế về cơ bản cắt bất cứ điều gì sau khi ra số thập phân).

int số = 9 / 2 / / bằng 4, nó không bằng 4,5 

Floating-point biến sử dụng các nhà khai thác trong cách chính xác giống như số nguyên.

đôi doubleNumber = 9,0 / 2,0 / / tương đương với 4,5 

nổi floatNumber = 9.0f / 2.0f; / / tương đương với 4,5

Nếu bạn chỉ định giá trị từ một tính toán số nguyên cho một biến dấu chấm động, bạn phải định kiểu tính toán số nguyên để tính toán dấu chấm động. Ví dụ, dòng mã sau đây sẽ thiết lập các doubleNumber biến đến 4 khi câu trả lời thực tế nên được 4.5, nhưng tính là một tính toán số nguyên.

đôi doubleNumber = 9 / 2; số nguyên tính bằng 4 

Ba dòng mã sau đây tất cả các gán một giá trị là 4,5 đến doubleNumber biến.

/ * Chia hai giá trị gấp đôi * / 

đôi doubleNumber = 9,0 / 2,0; 

/ * Chia hai giá trị số nguyên đúc các giá trị số nguyên 9 đến một 

tăng gấp đôi, sau đó chia đôi bởi giá trị số nguyên 2 đưa ra một 

Câu trả lời của các loại tăng gấp đôi * / 

đôi doubleNumber = (double) 9 / 2; 

/ * Chia hai giá trị số nguyên đúc trong 2 giá trị số nguyên cho một đôi, 

sau đó phân chia các số nguyên 9 bởi giá trị này tăng gấp đôi cho câu trả lời 

kiểu * đôi / 

đôi doubleNumber = 9 / (double) 2; 

Dấu ngoặc đơn có thể được dùng để xác định thứ tự mà các giá trị của một biểu thức sẽ được tính toán, điều này chủ yếu là hữu ích khi bạn có một số biểu hiện rằng có nhiều hơn một nhà điều hành (ví dụ, 3 + 4 * 6) cho phép bạn lựa chọn thứ tự mà các tính toán xảy ra. Bây giờ hãy đi xem nhanh tại nhà điều hành ưu tiên.

Operator Precedence 

Nhà điều hành ưu tiên giải mã thứ tự mà tính toán trong một biểu thức xảy ra. Nhìn vào các ví dụ tính toán 3 + 4 * 6, câu trả lời có thể được tính bằng cách thêm 3 và 4, trong đó cung cấp 7, và sau đó nhân 7 bằng 6, đưa ra câu trả lời của 42. Tuy nhiên, chúng tôi cũng có thể nhân lên 4 và 6 đầu tiên, đó cung cấp cho 24, và sau đó thêm vào 3, cho đáp số là 27. Nhà điều hành phép nhân (*) thực sự có một ưu tiên cao hơn so với các nhà điều hành Ngoài ra (+). Điều này có nghĩa rằng biểu thức số 3 + 4 * 6 thực sự sẽ cung cấp cho câu trả lời không phải 27 và 42, thực hiện các phép nhân đầu tiên và sau đó bổ sung. Để xác định thứ tự mà tính toán xảy ra bạn chỉ có thể sử dụng dấu ngoặc đơn. Nếu chúng ta muốn tính toán bổ sung được thực hiện trước khi nhân, chúng tôi có thể gửi kèm theo các tính toán bổ sung trong dấu ngoặc đơn (ví dụ, (3 + 4) * 6, mà sẽ cho chúng ta câu trả lời 42). Khi nghi ngờ, đó là khuyến cáo mà bạn sử dụng dấu ngoặc đơn để xác định thứ tự của các hoạt động. Nó thường được tốt nhất để sử dụng dấu ngoặc đơn anyway để làm cho mã của bạn dễ hiểu hơn.

Bảng dưới đây cho thấy một nhà điều hành có chứa danh sách các nhà khai thác với một ưu tiên cao hơn ở đầu và thoses với một ưu tiên thấp hơn ở phía dưới. Bảng này cũng cho thấy associativity của các nhà khai thác của nhóm lại được bình đẳng ưu tiên. Associativity Các giải mã trình tự điều khiển bằng ưu tiên. Ví dụ, bộ phận có một associativity "trái", mà bạn có thể nhìn nhận như là trái sang phải. Điều này có nghĩa rằng biểu thức 24 / 4 / 2 sẽ được giống như (24 / 4) / 2, bằng 3, và sẽ không giống như biểu thức 24 / (4 / 2), trong đó cung cấp một kết quả của 12. Dưới đây là bảng điều hành ưu tiên và associativity của người điều khiển bằng ưu tiên.

Nhóm điều hành 

Associativity 

(), [],, Postfix + +, postfix. - 

Còn lại 

+ Nhất nguyên, - nhất nguyên, tiền tố + +, - tiền tố, ~,! 

Bên phải 

mới, (diễn viên) 

Còn lại 

*, /,% 

Còn lại 

+, - 

Còn lại 

<<,>>,>>> 

Còn lại 

<, <=,>,> =, Instanceof 

Còn lại 

==,! = 

Còn lại 

Còn lại 

Còn lại 

Còn lại 

& & 

Còn lại 

| | 

Còn lại 

?: 

Còn lại 

=, *=, / =,% =, + =, -=, <<=,>> =, >>>=, & =, | =, ^ = 

Bên phải 

Suy nghĩ trở lại hai ví dụ mà chúng ta đã xem xét cho đến nay, trước tiên chúng ta có thể thấy rằng các nhà điều hành nhân là cao hơn bàn hơn so với nhà điều hành Ngoài ra, có nghĩa là nó có một ưu tiên cao hơn. Chúng tôi cũng có thể thấy rằng các nhà điều hành bộ phận có một associativity (trái sang phải) bên trái, như chúng ta thảo luận trước đó.

Đừng lo lắng về điều này tích lũy của các nhà khai thác, chúng ta sẽ bao gồm tất cả chúng trong suốt cuốn sách.

Nhất nguyên, nhị phân, và ternary Các nhà khai thác 

Rất đơn giản, một nhà điều hành nhất nguyên là một trong đó là được sử dụng với một toán hạng. Ví dụ, trong bảng điều hành ưu tiên chúng ta thấy hàng thứ hai chứa + và - nhất nguyên khai thác, có thể, cho các nhà điều hành âm nhất nguyên, được sử dụng như sau:

int a = 10; 

int b =-a; 

Do đó, các dấu trừ trước một biến trong dòng thứ hai là một nhà điều hành nhất nguyên, được sử dụng với một nhà điều hành, các biến a.

Nhà điều hành nhị phân được sử dụng để thực hiện một hoạt động trên hai toán hạng, chẳng hạn như các nhà điều hành * cho nhân hai số với nhau.

Chỉ có một nhà điều hành ternary, đó là: có điều kiện điều hành có sử dụng ba toán hạng và được nói ở phần sau trong chương này

Oh Không, nhà khai thác khác! 

Có có nhiều nhà khai thác nhiều hơn, nhưng họ là tất cả rất hữu ích. Đây là một bảng của ba nhà khai thác.

Nhà điều hành 

Mô tả 

+ + 

Tăng điều hành 

Toán tử giảm 

Modulus - Đây là phần còn lại từ một tính toán phân chia 

Các nhà khai thác tăng và lượng giảm sẽ thêm hoặc trừ đi một giá trị của một từ một biến của một kiểu dữ liệu số. Chúng có thể được sử dụng với cả hai số nguyên và dấu chấm động biến.

Các nhà khai thác tăng và lượng giảm chỉ đơn giản là việc triển khai neater của các mã sau đây:

int truy cập = 0; 

truy cập = truy cập + 1; 

int đếm ngược = 10,0; 

đếm ngược đếm ngược = - 1; 

Thay vào đó, chúng ta có thể sử dụng mã này:

int truy cập = 0; 

truy cập + +; 

đếm ngược đôi = 10,0; 

đếm ngược -; 

Phương pháp này sử dụng các toán tử này là phương pháp postfix, có nghĩa là chúng được nhập vào ở phía bên phải của toán hạng của họ liên quan. Bạn có thể sử dụng thặng dư và các nhà khai thác lượng giảm trong một hình thức postfix hoặc tiền tố, cho kết quả khác nhau mỗi lần.

Đi theo đoạn mã sau đây là một ví dụ:

numberA int = 10; 

int numberB = numberA + +; 

Mã này gán giá trị hiện tại trong numberA để numberB và sau đó tăng dần giá trị của numberA sau đó. Vì vậy, kết quả của mã này lá numberA bằng 11 và numberB bằng 10.

Nếu chúng ta muốn mã tăng để thực hiện đầu tiên và sau đó phân công của numberB sau đó, chúng tôi sẽ sử dụng toán tử tăng tiền tố thay thế. Mã bây giờ sẽ là như sau:

numberA int = 10; 

int numberB = + + numberA; 

Như bạn thấy, thặng dư (+ +) điều hành hiện nay bước vào phía bên tay trái của toán hạng liên quan của nó. Điều này gia số mã đầu tiên giá trị của numberA bằng 1 và sau đó gán giá trị mới của numberA để numberB. Kết quả là cả hai biến là bằng 11.

Các module% nhà điều hành được sử dụng để tính giá trị còn lại của một tính toán phân chia. Chúng ta có thể thấy việc sử dụng các nhà điều hành module trong ví dụ sau: Eggsample.java.

public class Eggsample 

public static void main (args String []) 

totalEggs int = 15; 

int eggsPerBox = 6; 

int filledBoxes = totalEggs / eggsPerBox; 

int remainingEggs = totalEggs eggsPerBox%; 

System.out.println ("Số Trứng =" + totalEggs); 

System.out.println ("trứng mỗi Box =" + eggsPerBox); 

System.out.println ("Đầy Hộp =" + filledBoxes); 

System.out.println ("trứng còn lại =" + remainingEggs); 

Khi bạn biên dịch và chạy Eggsample.java, bạn sẽ nhận được đầu ra tương tự như các ảnh chụp màn hình sau đây.

Hình 2-7: 

Như bạn thấy từ đầu ra giao diện điều khiển, có hai hộp chứa đầy trứng, tính bằng phân chia số nguyên, mà sẽ bỏ qua bất kỳ giá trị còn lại. Số lượng trứng còn lại được cho sử dụng các nhà điều hành module

Chuyển nhượng nhà khai thác số học 

Các nhà khai thác chuyển nhượng sau đây tương tự như các nhà khai thác tăng và lượng giảm mà chúng ta đã nhìn thấy. Chúng được sử dụng để bạn không cần phải nhập vào biến nguồn hai lần khi gán giá trị cho một biến dựa trên giá trị hiện tại của nó. Bảng sau đây cho thấy một danh sách các nhà khai thác chuyển nhượng số học cho các nhà khai thác số học mà chúng tôi đã được sử dụng cho đến nay trong chương này.

Nhà điều hành 

Mô tả 

*= 

Phép nhân phân 

/ = 

Bộ phận chuyển nhượng 

+ = 

Ngoài ra phân 

-= 

Phép trừ phân 

% = 

Phần còn lại phân công 

Vì vậy, chúng ta có thể đặt một giá trị cho một biến và sau đó tăng gấp đôi giá trị hiện tại của nó như sau:

số int = 22; 

số *= 2; / / tất cả bốn chân, 44 

Trong thực tế, nó có thể gán giá trị cho biến bằng cách sử dụng bất cứ nơi nào các nhà khai thác phân loại giá trị là hợp lệ, ngay cả trong mã giữa, vậy để nói chuyện.

numberA int = 30; 

int numberB = 7; 

numberA / = numberB -= 4; 

Dòng cuối cùng của mã đầu tiên trừ đi 4 từ numberB, thiết lập nó với giá trị của 3. Sau đó numberA, bằng với 30, được chia giá trị mới của numberB, mà bây giờ tương đương với 3, cho numberA giá trị của 10, đó là kết quả của 30 chia cho 3. Điều này phù hợp với bảng điều hành ưu tiên thể hiện trước đó.

Các dữ liệu boolean Loại 

Một biến của boolean loại có thể chứa một trong hai giá trị, đúng hay sai. Những giá trị này cũng thường được biết đến như 1 và 0, với 1 đại diện cho sự thật và 0 đại diện sai. Tuy nhiên, trong Java giá trị của một biến kiểu boolean hoặc là chỉ đúng hay sai, họ không phải là số và do đó không thể được chỉ định từ các giá trị số. Giá trị mặc định cho một biến kiểu boolean là sai. Các từ khóa đúng và sai có thể được sử dụng để gán giá trị cho biến kiểu boolean. Ví dụ:

bookIsOnFire boolean = false; / / hy vọng 

boolean thisBookIsGreat = true; / / hy vọng bạn đồng ý

Các nhà khai thác bit 

Bảng dưới đây cho thấy các nhà khai thác Bitwise tiêu chuẩn trong Java và mô tả của họ.

Nhà điều hành 

Mô tả 

Bit và 

Bit bao gồm-OR (thường được gọi là OR) 

Bit riêng OR (thường được gọi là XOR) 

Bit KHÔNG 

Để minh họa các chức năng của các nhà khai thác Bitwise, chúng ta có thể sử dụng hai giá trị byte, A và B, mà trong java có thể được đại diện bởi một biến kiểu byte. Bảng sau đây cho thấy các ký hiệu nhị phân của A và B (như có 8 bit trong một byte).

Byte 

Giá trị nhị phân 

Một 

01101010 

11110000 

Các AND (&) kiểm tra nhà điều hành hai bit và bit kết quả trả về đúng nếu cả hai bit kiểm tra là đúng sự thật, nếu không, các bit trở lại là sai. Bảng sau đây cho thấy kết quả của A và B.

Byte 

Bits 

Một 

A và B 

Các OR (|) kiểm tra nhà điều hành hai bit và bit kết quả trả về đúng nếu bất kỳ hoặc cả hai của các bit kiểm tra là đúng sự thật; nếu cả hai sai lầm, các bit trở lại cũng là sai. Bảng sau đây cho thấy kết quả của A hoặc B.

Byte 

Bits 

Một 

A và B 

Các XOR (^) nhà điều hành kiểm tra hai bit và bit kết quả trả về đúng nếu một, và chỉ có một, của các bit là đúng, nếu không, nếu hai giá trị bằng nhau, các bit trở lại là sai. Bảng sau đây cho thấy kết quả của A B. XOR

Byte 

Bits 

Một 

A và B 

Các KHÔNG (~) điều hành sẽ đảo ngược tất cả các bit, nơi mà những người trở thành số không và số không trở thành những người thân, và do đó một nhà điều hành nhất nguyên sử dụng với chỉ có một toán hạng, trong khi các nhà khai thác Bitwise khác chúng ta vừa thấy đã được thử nghiệm đối với hai toán hạng (nhị phân các nhà khai thác), A và B. Bảng dưới đây cho thấy kết quả của một hoạt động không trên byte A.

Byte 

Bits 

Một 

KHÔNG PHẢI 

Các bitwise AND, OR, XOR và các nhà khai thác cũng có thể được sử dụng với các biểu thức boolean, như các giá trị Boolean hiệu quả chỉ chứa một chút hoặc là có đúng hay sai. Điều này có thể được thực hiện trong Java như sau:

boolean musicOn = true; 

boolean televisionOn = true; 

boolean areBothOn = musicOn & televisionOn; / / true 

boolean areAnyOn = musicOn | televisionOn; / / true 

boolean isOnlyOneOn = musicOn ^ televisionOn; / / sai

Ngoài ra còn có nhà khai thác chuyển nhượng cho ba nhà khai thác Bitwise, như trong bảng sau.

Nhà điều hành 

Mô tả 

& = 

Bit và chuyển nhượng 

| = 

Bit bao gồm-OR chuyển nhượng 

^ = 

XOR bit riêng phân công 

Các nhà khai thác chuyển nhượng có thể được sử dụng trong cùng một cách mà chúng tôi sử dụng các thiết lập trước đó của các nhà khai thác chuyển nhượng.

Bit Manipulation 

Để hiểu làm thế nào để thao tác bit, trước tiên bạn phải hiểu làm thế nào số lượng các ký hiệu thập phân, những con số mà chúng ta đang sử dụng để sử dụng, được lưu trữ trong các ký hiệu nhị phân. Bảng dưới đây cho thấy một danh sách các số thập phân và các đại diện nhị phân của họ.

Thập phân 

Binary 

10 

11 

100 

101 

11 

1011 

15 

1111 

212 

11010100 

Số thập phân là 10 cơ sở số lượng, trong khi số nhị phân là cơ sở 2. Nếu chúng ta xem làm thế nào chúng ta nhận thức giá trị của một số thập phân, chúng ta có thể hiểu làm thế nào để chuyển đổi những con số này để ký hiệu nhị phân của họ. Vì vậy, hãy tưởng tượng các số sau: 574. Chúng tôi biết những gì con số này là bởi vì nó là quen thuộc với chúng ta, nhưng chúng tôi cũng có thể nhìn vào giá trị của nó theo cách sau.

Cơ sở 10n 

102 

101 

100 

Giá trị 

100 

10 

Lưu ý rằng chỉ trong trường hợp bạn không hiểu các thuật ngữ 102, nó dịch là 10 * 10, bằng 100. Vì vậy, ví dụ, 105 sẽ là 10 * 10 * 10 * 10 * 10, bằng 100.000, và 43 sẽ là 4 * 4 * 4, bằng 64.

Sau đó chúng tôi có thể nhìn vào giá trị của 574 theo cách sau như một ký hiệu số thập phân:

(102 * 5) + (101 * 7) + (100 * 4) = 500 + 70 + 4 = 574 

Đây là một chút vô nghĩa nhưng chỉ vì nhận thức của chúng ta về giá trị trong ký hiệu thập phân là ngay lập tức hiểu được. Bây giờ có bảng sau:

Cơ sở 2n 

22 

21 

20 

Giá trị 

Bây giờ các cơ sở nhị phân là 2 và các cơ sở thập phân là 10. Điều này có nghĩa rằng phạm vi giá trị thập phân từ 0 đến 9 và phạm vi giá trị nhị phân 0-1. Vì vậy, giá trị nhị phân 101 có thể được làm ra theo cách sau, tương tự như cách chúng ta nhìn vào các ký hiệu số thập phân:

(22 * 1) + (21 * 0) + (20 * 1) = 4 + 0 + 1 = 5 

Nếu chúng ta nhìn lại những thập phân / bảng nhị phân trên trang trước, chúng ta có thể làm việc ra giá trị lớn hơn của bit 11010100 như sau:

(27 * 1) + (26 * 1) + (25 * 0) + (24 * 1) + (23 * 0) + (22 * 1) + 

(21 * 0) + (20 * 0) = 

128 + 64 + 0 + 16 + 0 + 4 + 0 + 0 = 

212

Chuyển bit 

Bit chuyển đổi cho phép bạn thay đổi các bit của một số nguyên sang trái hoặc phải. Sau đây là một bảng của các nhà khai thác dịch chuyển bit và mô tả về những gì họ làm.

Nhà điều hành 

Mô tả 

<< 

Thay đổi bit bên trái, cách thêm số không từ bên phải 

>> 

Thay đổi các bit bên phải, sao chép các bit dấu (ngoài cùng bên trái bit) từ bên trái 

>>> 

Chuyển bit sang phải, thêm số không từ bên trái 

Các nhà khai thác đang nhị phân và có hai toán hạng. Các toán hạng bên trái là giá trị số nguyên mà trên đó để thực hiện các thay đổi, và các toán hạng phải là số bit để chuyển đổi. Còn lại-chuyển bằng quyền hạn của hai sẽ thực hiện một sự phân chia số nguyên, và phải thay đổi bởi quyền hạn của hai sẽ nhân giá trị. Ví dụ, hãy nói rằng chúng tôi đã có giá trị thập phân 2, đó sẽ là đại diện trong nhị phân với giá trị 00.000.010 trong một byte. Một thay thế trực tiếp cách nhân giá trị này bởi 8 bit sẽ là sự thay đổi giá trị ba nơi bên trái.

số byte = 2; / / nhị phân 00000010 

Chúng ta có thể sau đó còn lại ca ba vị trí bit, như sau:

số = số <<3; 

Khi dịch chuyển các bit ba nơi bên trái và điền vào số không từ bên phải, ký hiệu nhị phân của chúng ta sẽ được 00010000, đó là giá trị thập phân là 24, bằng 16. Điều này tương tự như nhân 2 bằng 23.

Lưu ý Mã trước đó của bit thay đổi giá trị của các biến số có thể cũng đã được thực hiện bằng việc giao trái ca vận hành, như sau:

số <<= 3;

Bit cờ 

Có thể lưu trữ nhiều tiểu bang boolean trong một giá trị số nguyên và kiểm tra các giá trị nhanh chóng sử dụng thử nghiệm bit. Ví dụ, chúng ta có thể có một biến kiểu byte, mà sau đó có thể được sử dụng để đại diện cho tám bang trong tám bit nó chứa. Trước hết, chúng ta có thể khai báo giá trị mặt nạ eight của chúng tôi. Chúng tôi đầu tiên sẽ cần phải xác định các giá trị cho mặt nạ để đại diện cho vị trí của các bit mà chúng tôi muốn thử nghiệm.

byte tên lửa = 1; 

byte laser = 2; 

Shields byte = 4; 

bất khả chiến bại byte = 8; 

AUTO_PILOT byte = 16; 

AIR_CONDITIONING byte = 32; 

TRACTOR_BEAM byte = 64; 

WINDOW_WIPERS_ON byte = 128; 

Các giá trị được tất cả các quyền hạn của hai đại diện cho mỗi bit trong giá trị 8-bit. Ví dụ, mặt nạ AUTO_PILOT có giá trị 16, mà trong hình thức nhị phân là giá trị 10000, mà sau đó chúng tôi có thể kiểm tra bit thứ năm trong biến nhà nước của chúng tôi để xem liệu nó có đúng hay sai và cũng thiết lập giá trị này. Vì vậy, ví dụ, giả sử chúng ta có một biến, tiểu bang, và chúng tôi muốn khởi tạo giá trị này để đại diện cho dữ liệu chỉ ra rằng các tàu tên lửa đang ở trên, lá chắn đang hoạt động, và điều hòa không khí là quá, vì nó có thể nhận được hết sức nóng trong đó. Chúng ta có thể thiết lập các cờ như sau:

byte trạng thái = tên lửa | lá chắn | AIR_CONDITIONING; 

Như bạn thấy đó là một-to-đọc hệ thống gọn gàng và dễ dàng, tiết kiệm bộ nhớ, và nhanh chóng quá. Ở đây chúng ta có hiệu quả thiết lập các nhà nước biến với giá trị nhị phân 00100101. Bạn có thể thấy rằng các bit tương ứng với các mặt nạ mà chúng ta đã sử dụng. Sau đó chúng tôi có thể muốn tắt điều hòa không khí, mà chúng ta sẽ thực hiện như sau:

nhà nước & = ~ AIR_CONDITIONING; 

Bạn có thể thiết lập nhà nước, nói, của không thể chinh phục của tàu để đúng / ngày, như sau:

nhà nước | = bất khả chiến bại; 

Bạn có thể kiểm tra từng tiểu bang như sau:

if ((tiểu bang & tên lửa)> 0) 

System.out.println ("cháy khi đã sẵn sàng"); 

Bạn cũng có thể kết hợp mặt nạ và tạo mặt nạ mới cho các kịch bản cho trước. Ví dụ, chúng ta có thể nói rằng nếu chúng ta có tên lửa và cần gạt nước trên cửa sổ cùng một lúc, chúng tôi cạnh tranh nhất. Sau đó chúng tôi sẽ tạo ra một mặt nạ mới cho kịch bản cạnh tranh nhất.

byte bất khả chiến bại = tên lửa | WINDOW_WIPERS_ON; 

if ((tiểu bang & cạnh tranh nhất)> 0) 

System.out.println ("Chúng tôi có thể nhìn thấy sự nguy hiểm, chanh tươi"); 

Vâng, đó là đủ chơi với bit của tôi, như mẹ tôi thường nói.

Các dữ liệu char Loại 

Các kiểu dữ liệu char được sử dụng để đại diện cho một nhân vật duy nhất. Trong Java, các ký tự được lưu trữ bằng cách sử dụng 2 byte của bộ nhớ. Lý do cho việc này là Java cho phép lưu trữ của nhiều nhân vật nhiều hơn là chỉ các bộ ký tự ASCII, mà chỉ chứa 256 ký tự riêng lẻ. Java sử dụng một nhân vật 16-bit thiết lập được gọi là Unicode, mà là nhân vật tiêu chuẩn mã hóa trên toàn thế giới. Lý tưởng nhất, các byte thấp thứ tự của các đại diện Unicode có thể được sử dụng để lưu trữ các đại diện của các ký tự ASCII, có nghĩa là một nhân vật với một giá trị 0-255 sẽ là một ký tự ASCII. Các dòng mã sau đây cho thấy việc kê khai của các biến char.

char firstLowercaseLetter = 'a'; 

char firstUppercaseLetter = 'A'; 

char = ký hiệu "&"; 

Như bạn thấy, nhân vật phải được xác định giữa các nhân vật báo giá duy nhất. Char là có hiệu quả giống như một đoạn ngắn trong đó nó là cùng kích thước và có thể được gán giá trị của nó về số lượng, mà sau đó có thể được thay đổi với một biểu thức số học. Ví dụ, giá trị số ASCII của chữ "A" là 65, có nghĩa là các dòng mã sau đây cũng sẽ chỉ định các giá trị ký tự "A" cho một biến char và sau đó tăng giá trị của một trong, tạo cho các biến giá trị của 66, đó là giá trị của thư ký tự "B".

char thư = 65; / / giá trị bằng 'A' 

thư + + / / tiếp theo là giá trị 'B' 

Trình tự thoát nhân vật 

Trình tự thoát nhân vật cho phép một nhân vật phải được giải thích khác biệt so với giá trị theo nghĩa đen của nó. Trình tự thoát nhân vật được xác định bằng cách sử dụng dấu gạch chéo ngược (\) nhân vật, tiếp theo là mã trình tự thoát. Bảng sau đây cho thấy một danh sách các trình tự thoát nhân vật với một mô tả về những gì họ làm.

Trình tự thoát nhân vật 

Mô tả 

\ b 

Backspace 

\ f 

Mẫu thức ăn chăn nuôi 

\ n 

New dòng 

\ r 

vận chuyển trở lại 

\ t 

tab 

\ u} {hex 

Thoát khỏi chuỗi Unicode (xem phần tiếp theo để biết chi tiết) 

\ \ 

Dấu gạch chéo ngược ký tự. Đây là cách dấu gạch chéo ngược có thể được đối xử như chỉ là một nhân vật dấu chéo ngược thực tế. 

\ ' 

Đơn giá. Xác định một nhân vật giá duy nhất nên nó không được điều trị như một dấu phân cách ký tự. 

\ " 

Nháy kép. Xác định một nhân vật báo giá gấp đôi do đó nó không được điều trị như một dấu phân cách chuỗi. 

Các trình tự thoát nói trên được sử dụng với ký hiệu chuỗi và sẽ được thảo luận chi tiết hơn trong phần "Strings" của Chương 3.

Xác định ký tự Unicode 

Các ký tự Unicode có thể được định nghĩa bằng cách sử dụng "\ u" dãy thoát nhân vật, tiếp theo là ký hiệu thập lục phân của nhân vật đó. Ví dụ, các ký hiệu thập lục phân cho số 65 là 0041, đó là (4 * 16) + 1. Vì vậy, các mã sau đây sẽ chỉ định các chữ A để biến các thư ký tự.

char thư = '\ u0041';

hằng số 

Hằng số là các giá trị được khai báo với giá trị ban đầu và không thể được thay đổi sau đó. Các tiêu chuẩn quy ước đặt tên cho các hằng số là tên biến được tất cả bằng chữ in hoa với nhiều từ khi tách ra bởi một ký tự gạch dưới (_). Khai báo hằng số là rất đơn giản. Ở đây chúng ta sử dụng một từ khóa mới, cuối cùng, để tạo ra một biến đổi.

byte cuối cùng tĩnh MAX_DAILY_HOURS = 24; 

Các từ khóa tĩnh được sử dụng với từ khóa cuối cùng bởi vì bạn không thể đòi hỏi nhiều trường hợp của một biến đổi khi bạn tạo nhiều đối tượng của lớp mà không đổi thuộc tính thuộc về, vì họ sẽ chỉ chia sẻ cùng một giá trị không thể thay đổi nào. Tuy nhiên, bạn có thể khai báo một hằng số với từ khóa cuối cùng một mình (bỏ qua các từ khóa tĩnh). Lợi thế của việc này không nằm trong quy định cụ thể giá trị của các hằng số ngay lập tức.

MAX_DAILY_HOURS byte cuối cùng; 

Giá trị của MAX_DAILY_HOURS bây giờ phải được chỉ định một giá trị trong mọi xây dựng mà được định nghĩa trong lớp mà nó thuộc về, giá trị phải được giao một lần và chỉ một lần và sau đó sẽ ở lại và không thể thay đổi từ đó. Điều này là hữu ích nếu bạn muốn mỗi đối tượng phải có bản sao riêng của mình của một biến đổi, với mỗi liên tục được thiết lập để giá trị độc đáo riêng của mình trong xây dựng (s).

Lưu ý Một giá trị cuối cùng không thể được khởi tạo trong bất kỳ phương pháp khác, nó phải được khởi tạo hoặc tại các điểm khai báo hoặc trong tất cả các nhà xây dựng của lớp mà nó thuộc về. Nó phải được thực hiện trong tất cả các nhà xây dựng bởi vì bất kỳ một, nhưng chỉ có một, trong số họ có thể được sử dụng khi tạo các đối tượng, nơi thường xuyên phải được khởi tạo.

Báo cáo có điều kiện và vòng lặp 

Cho đến nay, chúng ta đã được lưu trữ giá trị trong chương trình của chúng tôi, đó không phải là điều thú vị nhất trên thế giới. Bây giờ chúng ta sẽ xem làm thế nào để thao tác dữ liệu sử dụng câu điều kiện và vòng lặp, các thành phần quan trọng để bổ sung thêm chức năng cho trò chơi của bạn và spicing chúng lên một chút. Báo cáo có điều kiện được sử dụng để kiểm tra giá trị và thực hiện các phần khác nhau của mã dựa trên kết quả của thử nghiệm. Vòng lặp được sử dụng để liên tục thực hiện một phần của mã, có nghĩa là bạn có thể sử dụng cùng một mảnh mã để thực hiện một nhiệm vụ nhiều lần, một thực hiện cần thiết cho nhiều trường hợp.

Báo cáo điều kiện 

Các khả năng lựa chọn con đường mà chương trình của bạn có, dựa trên bất kỳ dữ liệu nào đó, là chìa khóa để tất cả các chức năng trong lập trình. Để tạo báo cáo có điều kiện, chúng ta phải tìm hiểu về các toán tử quan hệ mà chúng ta sẽ sử dụng với các báo cáo này. Bảng sau đây là danh sách các nhà khai thác quan hệ trong Java.

Nhà điều hành 

Trả về true nếu ... 

Toán hạng còn lại nhỏ hơn toán hạng bên phải 

<= 

Toán hạng còn lại là ít hơn hoặc bằng toán hạng bên phải 

== 

Phép toán bằng nhau 

> = 

Trái toán hạng lớn hơn hoặc bằng toán hạng bên phải 

Trái toán hạng lớn hơn toán hạng bên phải 

! = 

Phép toán không bằng nhau 

Các nhà điều hành bình đẳng (==) là khác nhau từ các nhà khai thác quan hệ khác ở chỗ nó có thể được sử dụng để kiểm tra giá trị của bất kỳ loại dữ liệu tương tự, chẳng hạn như hai biểu thức số nguyên, hai biểu thức Boolean, hoặc thậm chí hai đối tượng.

Chú ý: Khi kiểm tra giá trị của hai đối tượng, chúng tôi không thực sự kiểm tra dữ liệu trong các đối tượng, mà là chúng tôi đang thử nghiệm để xem nếu cả hai tài liệu tham khảo tham khảo cùng một đối tượng. Ví dụ, hãy nhớ lại khi chúng tôi tạo ra hai đối tượng người tham chiếu bởi glennMurphy và andrewMulholland. Một thử nghiệm giữa hai tài liệu tham khảo sử dụng các nhà điều hành bình đẳng (==) chỉ đơn giản là sẽ trở lại đúng nếu cả hai đều gọi cùng một đối tượng, giống như họ làm trong hình 2-3 nhưng không trong hình 2-2. Chúng tôi sẽ xem xét so sánh các đối tượng chi tiết hơn sau này trong cuốn sách. 

Đơn giản nếu cáo 

Một tuyên bố nếu là khá tự giải thích, nó có chứa một biểu thức Boolean và được theo sau bởi một dòng hoặc khối mã rằng nó sẽ thực hiện nếu biểu thức Boolean trả về đúng sự thật. Các mã sau đây cho thấy một ví dụ về một tuyên bố nếu có một dòng rằng nó sẽ thực hiện nếu biểu thức Boolean trả về true.

boolean televisionOn = true; 

if (televisionOn == true) 

System.out.println ("truyền hình là vào");

Điều này nếu tuyên bố sẽ thực hiện một dòng mã được ngay lập tức sau khi nó, miễn trả lại biểu thức Boolean đúng sự thật. Nếu có một tuyên bố sau khi mã in ấn màn hình, nó sẽ thực thi bất kể kết quả của tuyên bố nếu. Bạn phải chỉ định một khối mã cho các tuyên bố nếu nếu bạn muốn có nhiều hơn một dòng mã thực hiện khi thử nghiệm của nó là sự thật.

if (televisionOn) 

System.out.println ("truyền hình là vào"); 

System.out.println ("Turn nó đi và trở lại làm việc"); 

Chú ý rằng các biểu thức Boolean chỉ quy định các kiểu dữ liệu boolean televisionOn ngày của riêng mình. Đây là một cách khác để kiểm tra nếu giá trị Boolean là đúng chỉ mà không có "== true" một phần, mà là một cách gọn gàng để làm điều đó, mặc dù nó cũng có thể đọc được ít hơn và ít giống như giả. Bạn có thể thực hiện xét nghiệm này trong bất cứ cách nào bạn cảm thấy thoải mái nhất. Tương tự, bạn cũng có thể viết các kiểm tra như thế này:

/ / Không sai cũng giống như bằng đúng 

if (televisionOn = sai!) 

System.out.println ("tôi nói tắt nó đi!"); 

Sử dụng toán tử quan hệ khác cũng giống như cách sử dụng == và = nhà khai thác!, Mặc dù bạn không thể sử dụng chúng với các biểu thức Boolean, như bạn không thể nói rằng một trong những giá trị Boolean, ví dụ, lớn hơn hoặc bằng khác. Các nhà khai thác quan hệ khác phải được sử dụng với giá trị tương đương với phạm vi thử nghiệm vượt quá chỉ bình đẳng, chẳng hạn như giá trị số.

int numberOfLions = 5; 

int numberOfWildebeest = 2; 

if (numberOfLions> numberOfWildebeest) 

numberOfWildebeest -; 

Những wildebeest nghèo; họ có một heck của một thời gian! Bạn cũng có thể có nếu báo cáo lồng vào bên trong nhau khá đơn giản.

if (numberOfLions> numberOfWildebeest) 

numberOfWildebeest -; 

if (numberOfWildebeest == 1) 

System.out.println ("Ồ không, chỉ có một trái"); 

Mã này đầu tiên sẽ kiểm tra xem nếu có một số lượng lớn hơn của con sư tử hơn so với linh dương đầu bò. Nếu điều này là sai, không có mã lồng nhau sẽ được thực hiện ở tất cả. Nếu nó là đúng, giá trị của numberOfWildebeest được giảm đi một và tiếp theo là một câu lệnh if, mà các bài kiểm tra để xem nếu có chỉ là một wildebeest trái. Nếu điều này là đúng, một số văn bản được in vào màn hình giao diện điều khiển rõ thực tế này không may.

Nếu với cáo khác 

Giả sử chúng ta muốn thực hiện một số mã cho một trong hai kết quả có thể của một biểu thức Boolean, đúng hay sai. Chúng tôi có thể thực hiện nhiệm vụ này một cách dễ dàng bằng cách sử dụng một tuyên bố khác cùng với một nếu tuyên bố, về cơ bản cho các tùy chọn thực hiện một nhiệm vụ nếu thử nghiệm một là hài lòng hoặc người nào khác thực hiện các công việc khác.

personsAge int = 21; 

if (personsAge == 0) 

System.out.println ("Hãy cho tôi một trong những thay đổi tính cánh cửa mát mẻ"); 

khác 

System.out.println ("Old đủ để bắt đầu lập trình :)"); 

Mã này chỉ đơn giản nói rằng nếu giá trị của biến personsAge bằng 0, sau đó thực hiện nhiệm vụ đầu tiên, nếu không, nếu điều này là sai, thực hiện các nhiệm vụ khác. Vấn đề với mã này, và trong nhiều tình huống khác, là chúng ta có thể cần phải kiểm tra nhiều hơn là chỉ hai kết cục có thể. Trong đoạn mã này, chúng tôi không kiểm tra xem giá trị của personsAge ít hơn không, giả sử rằng bất kỳ giá trị khác hơn không là một số nguyên dương. Để kiểm tra nhiều hơn hai kết quả khác nhau, chúng ta có thể sử dụng một khác nếu tuyên bố. Một người nào khác nếu cần tuyên bố ban đầu xuất hiện sau khi một tuyên bố nếu và sau đó có thể được theo sau bởi hơn nếu báo cáo khác, mỗi thực hiện trong cùng một cách như thể báo cáo với kiểm tra Boolean.

if (personsAge == 0) 

System.out.println ("Hãy cho tôi một trong những thay đổi tính cánh cửa mát mẻ"); 

khác nếu (personsAge> 0) 

System.out.println ("Old đủ để bắt đầu lập trình :)"); 

khác / / phải được tiêu cực 

System.out.println ("Trên đường đi, có lẽ"); 

Bạn có thể có như nhiều ngành khác nếu sau khi tuyên bố ban đầu nếu như bạn yêu cầu nhưng chỉ có một tuyên bố khác ở cuối. Lưu ý các báo cáo khác là tùy chọn và không cần thiết sau khi sử dụng nếu báo cáo khác.

Các nhà khai thác hợp lý 

Khai thác hợp lý được sử dụng để kiểm tra biểu thức Boolean, tương tự như các nhà khai thác bit-khôn ngoan mà chúng ta đã thấy trước đó. Bảng dưới đây cho thấy danh sách đầy đủ của các nhà khai thác hợp lý:

Nhà điều hành 

Mô tả 

Hợp lý không (còn gọi là phủ định, hợp lý) 

& & 

Logic và 

| | 

Logical OR 

Các nhà khai thác có thể được sử dụng kết hợp với nếu báo cáo để thêm các xét nghiệm phức tạp hơn.

if (houseOnFire & haveNoWater) 

System.out.println ("Hãy gọi cho sở cứu hỏa");

Các nhà khai thác không chỉ được sử dụng với báo cáo có điều kiện. Chúng có thể được sử dụng bất cứ nơi nào một biểu thức Boolean là cần thiết, chẳng hạn như gán giá trị cho một biến Boolean hoặc chỉ định một điều kiện để chấm dứt một vòng lặp, mà chúng ta sẽ thấy sau này trong chương này.

Các nhà điều hành có điều kiện 

Nhà điều hành có điều kiện được sử dụng để quay trở lại một trong hai giá trị có thể, dựa trên một thử nghiệm Boolean, sử dụng dấu hỏi và dấu hai chấm (?) (:) Ký tự. Như chúng ta đã đề cập trước đó, đây là một nhà điều hành ternary liên quan đến ba đối số toán hạng. Sau đây cho thấy các nhà điều hành có điều kiện trong hành động:

int số = 4; 

boolean isEven = (số% 2 == 0)? đúng: sai; 

Tuyên bố này sẽ trả về giá trị đúng với isEven biến bởi vì phần còn lại của số lượng, mà là bằng 4, từ 2 là 0. Nếu biểu thức Boolean trước dấu hỏi là đúng, giá trị đầu tiên sau khi dấu hỏi được trả về, nếu không giá trị quy định sau khi các nhân vật dấu hai chấm được trả về để thay thế. Bạn có thể trả lại bất kỳ giá trị trong tuyên bố này, không chỉ giá trị Boolean, và thậm chí bạn có thể trở lại tham chiếu đối tượng. Chúng tôi sẽ quan sát chi tiết các đối tượng trong hai chương tiếp theo.

Các mã mà chúng ta vừa thấy sẽ được thực hiện tương tự bằng cách sử dụng nếu báo cáo theo cách sau:

int số = 4; 

isEven boolean = false; 

nếu (số% 2 == 0) 

isEven = true; 

Như bạn thấy, báo cáo có điều kiện có thể làm cho neater mã của bạn, nhưng một tuyên bố nếu làm cho nó rõ ràng hơn như những gì mã nào.

Chuyển cáo 

Nếu bạn có một giá trị mà bạn cần phải kiểm tra cho bình đẳng với một loạt các kết quả khác nhau (được gọi là trường hợp), bạn có thể sử dụng một tuyên bố chuyển đổi. Một tuyên bố chuyển đổi đưa chúng ta đến bốn từ khoá mới: chuyển đổi, trường hợp, phá vỡ, và mặc định. Một tuyên bố chuyển đổi cơ bản sẽ giống như sau:

số int = 1; 

chuyển đổi (số) 

trường hợp 0: 

System.out.println ("Số là số không"); 

phá vỡ; 

Trường hợp 1: 

System.out.println ("Số là một trong những"); 

phá vỡ; 

mặc định: 

System.out.println ("Số không tìm thấy"); 

phá vỡ; 

}

Giá trị mà bạn đang thử nghiệm có kèm theo trong dấu ngoặc đơn sau từ khóa chuyển đổi được nhập vào. Để xác định một tuyên bố trường hợp, bạn phải nhập các từ khóa trường hợp tiếp theo là một giá trị không đổi mà nó sẽ được so sánh với, tiếp theo là một nhân vật dấu hai chấm (:). Từ đây, bất kỳ dòng mã sau dấu hai chấm sẽ được thực hiện cho đến khi một lệnh break được đạt tới, mà sau đó sẽ thoát ra khỏi khối toàn bộ tuyên bố chuyển đổi.

Các từ khóa mặc định là dùng để xác định diện tích mã có thể được thực thi nếu không có giá trị trường hợp phù hợp với giá trị chuyển đổi tuyên bố thử nghiệm. Một tuyên bố mặc định không cần phải được bao gồm trong một tuyên bố chuyển đổi nếu nó không cần thiết, nhưng nó rất hữu ích để gỡ lỗi.

Lưu ý Bạn chỉ có thể sử dụng các giá trị tương thích với các kiểu dữ liệu int như các kiểm tra và các giá trị cho báo cáo trường hợp chuyển đổi, đó là, trình biên dịch sẽ tìm kiếm một giá trị int. Điều này có nghĩa rằng bạn có thể kiểm tra ký tự, như họ cũng giá trị số. Cuối cùng, các giá trị trường hợp phải có giá trị không đổi, như trong số mã hóa cứng (ví dụ, 17, 2288, vv) hoặc giá trị biến đổi. 

Các DaysOfTheMonth.java ví dụ sử dụng một tuyên bố chuyển giao số ngày cho một biến dựa trên các tháng hiện tại và năm. Dưới đây là mã:

public class DaysOfTheMonth 

public static void main (args String []) 

int tháng = 7; 

int năm = 2002; 

totalDays int = 0; 

chuyển đổi (tháng) 

Trường hợp 1: Trường hợp 3: Trường hợp 5: Trường hợp 7: 

Trường hợp 8: Trường hợp 10: Trường hợp 12: / / 31 ngày 

totalDays = 31; 

phá vỡ; 

Trường hợp 4: Trường hợp 6: Trường hợp 9: trường hợp 11: / / 30 ngày 

totalDays = 30; 

phá vỡ; 

Trường hợp 2: / / 28 hoặc 29 ngày 

if (năm 4% = 0!) 

totalDays = 28; 

khác nếu (năm 400% == 0) 

totalDays = 29; 

khác nếu (năm 100% == 0) 

totalDays = 28; 

khác 

totalDays = 29; 

mặc định: 

System.out.println ("Lỗi, không hợp lệ tháng chỉ số = 

"+ Tháng); 

phá vỡ; 

if (totalDays = 0!) 

System.out.println ("Tháng =" + tháng); 

System.out.println ("Năm =" + năm); 

System.out.println ("Có" + totalDays + " 

ngày trong tháng này "); 

}

Khi bạn chạy chương trình này, bạn sẽ nhận được đầu ra tương tự như ảnh chụp màn hình giao diện điều khiển:

Hình 2-8: 

Ví dụ này cho chúng ta thấy một tính năng mới của việc sử dụng báo cáo trường hợp bên trong các tuyên bố chuyển đổi, được sử dụng nhiều trường hợp báo cáo rằng tất cả các dẫn đến phân khúc cùng một mã. Ví dụ này là lý tưởng cho thấy tính năng này bởi vì có nhiều tháng mà chia sẻ cùng một số lượng ngày. Vì vậy, ví dụ, những tháng của tháng tư, tháng sáu, tháng chín, tháng mười một và tất cả có 30 ngày và được biểu diễn trong ví dụ DaysOfTheMonth.java như số tháng 4, 6, 9, và 11, tương ứng. Các báo cáo trường hợp và do đó giá trị có thể chỉ đơn giản được viết cái khác, cách nhau bằng một dấu chấm sau mỗi giá trị. Đây là chức năng giống như các mã sau đây.

if (tháng == 4 | | tháng == 6 | | tháng == 9 | | tháng == 11) 

totalDays = 30; 

Trường hợp 2: tuyên bố đại diện cho tháng của tháng hai. Ở đây chúng ta cần phải kiểm tra nếu nó là một năm nhuận hay không để xác định số ngày trong tháng tháng hai. Các định nghĩa của một năm nhuận có thể được làm việc với bốn bước.

Nếu năm không chia hết cho 4 (tức là phần còn lại của năm chia cho 4 là không bằng không, ví dụ như, năm 1997, 2002), sau đó nó chắc chắn là không phải là một năm nhuận. Chỉ định totalDays giá trị của 28. Nếu không đi đến bước 2.

Nếu năm chia hết cho 400 (nghĩa là, phần còn lại của năm chia cho 400 là số không, ví dụ, 1600, 2000), sau đó nó là một năm nhuận. Chỉ định totalDays giá trị của 29. Nếu không đi đến bước 3.

Nếu năm chia hết cho 100 (nghĩa là, phần còn lại của năm chia cho 100 là số không, ví dụ như, năm 1900, 2100), sau đó nó không phải là một năm nhuận. Chỉ định totalDays giá trị của 28. Nếu không, đi đến bước 4.

Nó phải là một năm nhuận, do đó giao totalDays giá trị của 29.

Mã cho bốn bước đơn giản, chúng ta có thể sử dụng các nhà điều hành module (%) để tìm các giá trị còn lại và nếu, nếu người nào khác, và báo cáo khác để kiểm tra các giá trị.

if (năm 4% = 0!) 

totalDays = 28; / / không nhuận năm 

khác nếu (năm 400% == 0) 

totalDays = 29; / / bước nhảy vọt năm 

khác nếu (năm 100% == 0) 

totalDays = 28; / / không nhuận năm 

khác 

totalDays = 29; / / bước nhảy vọt năm 

Lưu ý Đó là một sai lầm phổ biến với các báo cáo chuyển đổi để quên để thêm một lệnh break ở cuối của khối trường hợp của bạn. Nếu đây là bỏ qua, mã đơn giản là sẽ tiếp tục thực hiện dòng tiếp theo của mã. Ví dụ, các mã sau đây sẽ in tất cả ba từ cửa sổ giao diện điều khiển bất kể một thực tế rằng chỉ có trường hợp đầu tiên là sự thật.

chuyển đổi (1) 

Trường hợp 1: 

System.out.println ("Quên"); 

Trường hợp 2: 

System.out.println ("các"); 

Trường hợp 3: 

System.out.println ("phá vỡ"); 

Những tuyên bố trường hợp đầu tiên sẽ được thực hiện bởi vì giá trị thử nghiệm chuyển đổi bằng 1 cũng được, nhưng sau đó báo cáo trường hợp khác cũng sẽ được thực hiện bởi vì không có báo cáo cho biết phá vỡ chương trình của bạn để thoát ra từ các khối chuyển đổi hoàn toàn. Đôi khi, bạn thực sự có thể muốn thực thi mã từ một khối trường hợp và sau đó tiếp tục thực thi mã trong khối trường hợp tiếp theo cũng được, mặc dù điều này có thể dẫn đến sai sót vô hình sau này. 

Loops 

Vòng lặp được sử dụng để thực thi mã nhiều lần, có nghĩa là bạn chỉ cần nhập mã một lần và sau đó thực hiện nó một số quy định của thời gian. Để cho một vòng lặp để dừng lại, ít nhất một điều kiện để chấm dứt nên đi với nó, nếu không, vòng lặp có thể là vô hạn, chạy mãi mãi (có nghĩa là, cho đến khi bạn tìm thấy một số cách để bị rơi ra khỏi nó, giống như cách nhấn Ctrl + Alt + Del hoặc mua một khẩu súng ngắn, nhưng nó sẽ không đến đó).

Hãy nói rằng chúng ta muốn viết giá trị của tất cả các số nguyên dương được ít hơn 10 đến cửa sổ giao diện điều khiển, mà là 0 đến 9. Một vòng lặp có thể được sử dụng để thực hiện nhiệm vụ chỉ trong một vài dòng mã thay vì mã hóa thủ công ten System.out.println ... báo cáo, đó sẽ là một nhiệm vụ quá tẻ nhạt cho một người nào đó trí thông minh của bạn. Các vòng lặp cơ bản là các vòng lặp trong khi, việc làm trong khi vòng lặp, và cho vòng lặp.

Sử dụng các vòng trong khi 

Một vòng lặp trong khi được thực hiện trong cách chính xác giống như một tuyên bố nếu. Nó phải chỉ định một biểu thức Boolean thử nghiệm cho bản thân và được theo sau bởi một dòng hoặc khối mã rằng nó sẽ thực hiện nếu các kiểm tra biểu thức Boolean là sự thật. Ví dụ sau đây, WhileCounter.java, sẽ thực hiện nhiệm vụ in ấn các con số 0-9 vào cửa sổ giao diện điều khiển bằng cách sử dụng một vòng lặp trong khi. Dưới đây là mã:

public class WhileCounter 

public static void main (args String []) 

int truy cập = 0; 

trong khi (cập <10) 

System.out.println ("Value =" + truy cập); 

truy cập + +; 

Sản lượng màn hình trong một cửa sổ giao diện điều khiển nên được tương tự như sau:

Hình 2-9: 

Bên trong khối mã trong vòng lặp trong khi là một dòng mã để tăng giá trị của biến đếm lên 1, cuối cùng gây ra vòng lặp chấm dứt. Khi vòng lặp trong khi bắt đầu, và mỗi khối mã của các vòng lặp trong khi hoàn tất thực hiện của nó sau đó, có một thử nghiệm để xem nếu điều kiện truy cập <10 là đúng. Các vòng lặp trong khi sẽ tiếp tục thực hiện trong khi các kiểm tra tuyên bố có điều kiện trả về đúng sự thật và chấm dứt khi nó trả về false, trong trường hợp này là khi truy cập biến bằng 10.

Sử dụng làm trong khi vòng 

Một làm trong khi vòng lặp là rất giống với một vòng lặp trong khi. Sự khác biệt là một làm trong khi vòng lặp sẽ thực hiện khối mã của nó ít nhất một lần và sau đó kiểm tra chấm dứt, trong khi trong khi kiểm tra vòng lặp chấm dứt ngay từ đầu trước khi vào khối mã của nó.

int truy cập = 11; 

làm 

System.out.println ("Value =" + truy cập); 

truy cập + +; 

} Trong khi (cập <10); 

Ở đây, khối mã của tôi trong khi vòng lặp được nhập vào, trước hết, nơi mà giá trị của truy cập được in vào màn hình giao diện điều khiển và sau đó tăng thêm 1 với giá trị 12. Vòng lặp sau đó được chấm dứt, như 12 là không ít hơn 10. Mã này sẽ chỉ in giá trị của 11 đến giao diện điều khiển, một chương trình viết sai nếu bạn muốn in chỉ số được ít hơn 10 đến màn hình giao diện điều khiển. Vì vậy, phải nhận thức được thực tế rằng không có điều kiện để vào làm trong khi vòng lặp cho lần đầu tiên. Họ là thuận lợi cho các tình huống mà bạn muốn thực thi mã ít nhất một lần và có thể nhiều lần.

Sử dụng vòng cho 

Các vòng lặp cho là thuận tiện nhất của vòng lặp. Việc thực hiện tiêu chuẩn cho một vòng lặp for là chỉ định một giá trị bắt đầu, một điều kiện chấm dứt, và một hành động được thực hiện. Một tiêu chuẩn cho vòng lặp như sau:

for (int counter = 0; truy cập <10; truy cập + +) 

System.out.println ("Value =" + truy cập); 

Điều này sẽ làm tương tự như ví dụ WhileCounter.java trước đó, chỉ có một cách gọn gàng. Đối với vòng lặp cho một truy cập số nguyên được khai báo và khởi tạo là 0. Điều này là thực hiện một lần vào lúc bắt đầu cho vòng lặp. Câu lệnh tiếp theo là điều kiện chấm dứt cho vòng lặp, trong trường hợp này là nếu giá trị của truy cập ít hơn 10. Tuyên bố cuối cùng là một hành động mà sẽ được thực hiện cho mỗi vòng lặp, mà là để tăng truy cập một.

Các MultiTable.java sau ví dụ cho thấy một bảng nhân của các giá trị 1-5 sử dụng hai cho vòng lặp.

public class multitable 

public static void main (args String []) 

cuối cùng int TABLE_SIZE = 5; 

for (int j = 1; j <= TABLE_SIZE; j + +) 

for (int i = 1; i <= TABLE_SIZE; i + +) 

giá trị int = i * j; 

nếu (giá trị <10) 

System.out.println (""); 

System.out.println (giá trị + ""); 

System.out.println (); / / chuyển sang dòng mới 

Đầu ra cho chương trình này sẽ giống như hình chụp màn hình sau đây.

Hình 2-10: 

Ví dụ này chứa hai cho vòng lặp, một lồng vào bên trong khác. Sau khi người đầu tiên cho vòng lặp được nhập vào, thứ hai cho vòng lặp được thực thi ngay. Các khối mã cho phần thứ hai cho vòng lặp là nơi mà các đoạn mã quan trọng được thực hiện, điều này khối mã in một giá trị cho các cửa sổ giao diện điều khiển, đó là phép nhân của các giá trị hiện tại của các biến i và j. Lần đầu tiên các khối mã cho phần thứ hai cho vòng lặp được nhập vào, k bằng 1. Từ đây, giá trị của i sẽ chạy từ 1 đến 5, với j luôn luôn bằng 1. Điều này cho chúng ta những dòng đầu ra đầu tiên là 1, 2, 3, 4, và 5. Đây là những tính toán của (1 * 1), (1 * 2), (1 * 3), (1 * 4), và (1 * 5), trong đó j là các toán hạng đầu tiên (luôn luôn 1) và toán hạng thứ hai là i (tăng thêm mỗi một thời gian). Sau này, có một cuộc gọi đến System.out.println () để di chuyển giao diện điều khiển vị trí carat vào dòng kế tiếp. Thủ tục này sau đó được lặp đi lặp lại với giá trị của k tăng lên mỗi lần cho đến khi nó là bằng 5.

Lưu ý: phương pháp in ấn đã được sử dụng để in các giá trị nhân là System.out.println (). Phương pháp này rời khỏi vị trí con trỏ tại điểm mà ký tự cuối cùng là đầu ra, không di chuyển nó vào dòng tiếp theo, trong khi System.out.println () sẽ di chuyển con trỏ đến đầu dòng kế tiếp. 

Mục đích của TABLE_SIZE biến int cuối cùng là xác định các giới hạn cho vòng lặp truy cập các biến i và j và là một kỹ thuật tốt cho việc sử dụng lại mã. Nó có nghĩa là thay đổi trên giá trị của biến này sau một thời gian sẽ ảnh hưởng đến kết quả của bảng đầy đủ, vì vậy bạn chỉ cần thực hiện thay đổi một lần. Nếu bạn thay đổi giá trị của TABLE_SIZE từ 5 đến giá trị 10, ví dụ, bạn sẽ có được sản lượng tương tự như các ảnh chụp màn hình sau đây:

Hình 2-11: 

Ở đây, kích thước của bảng bây giờ là 10, trong đó giá trị tính toán cuối cùng là 10 nhân với 10, cho giá trị 100 ở góc dưới bên phải của bảng. Bạn có thể xác định chiều rộng và chiều cao của bảng như hai biến riêng biệt, tạo cho bạn một bảng kích thước bất kỳ, chẳng hạn như 5 của 9 hoặc 200 của 310 (mặc dù chiều kích thứ hai sẽ không phù hợp trong cửa sổ giao diện điều khiển đúng cách).

Lưu ý Chú ý rằng khi khai báo các biến hằng TABLE_SIZE, nó chỉ khai báo là cuối cùng và không tĩnh và cuối cùng. Điều này chỉ đơn giản là bởi vì phương pháp chính mà nó thuộc về đã được tĩnh, có nghĩa là biến khai báo bên trong nó là tĩnh cũng có. 

Một Nhìn nâng cao tại vòng cho 

Những tuyên bố đầu tiên trong một vòng lặp for thường được sử dụng để khai báo một biến và gán cho nó một giá trị. Nó cũng có thể khai báo nhiều hơn một biến cùng loại dữ liệu quy định trong tờ khai tương tự. Ví dụ, đoạn mã sau tuyên bố hai biến, i và k:

for (int i = 0, j; i <10; i + +) 

System.out.println ("i =" + i); 

Chúng tôi cũng có thể thêm các hành động nhiều hơn để tuyên bố thứ ba của vòng lặp cho nhau bằng dấu phẩy, như sau.

for (int i = 0, j = 0; i <10; i + +, j = i * i) 

System.out.println ("i =" + i); 

System.out.println ("i bình phương =" + j); 

Mã này sẽ thêm một chu kỳ mỗi vòng lặp biến i và gán cho j biến giá trị của i * i, in, giá trị mỗi lần.

Các báo cáo trong một cho vòng lặp không cần phải được thực hiện nếu không cần thiết phải làm như vậy. Giả sử bạn có một biến trước đó tuyên bố rằng bạn muốn sử dụng như truy cập trong vòng lặp for. Điều này có nghĩa rằng bạn không cần phải thực hiện một tuyên bố khai cho vòng lặp ở tất cả, như bạn muốn sử dụng một biến thay vì tuyên bố trước đó.

int truy cập = 0; 

/ / Sau này trong mã (trong phạm vi truy cập biến) 

cho (; truy cập <10; truy cập + +) 

System.out.println ("Value =" + truy cập); 

Lưu ý rằng bạn vẫn còn phải thêm một dấu chấm phẩy (;), nơi các báo cáo nên được. Bạn vẫn có thể khởi tạo một biến đang tồn tại trong một vòng lặp cho.

int truy cập = 0; 

/ / Sau này trong mã 

/ / Đếm xuống 10-0 

cho (truy cập = 10; truy cập> = 0; truy cập -) 

System.out.println ("Value =" + truy cập); 

Tương tự như loại bỏ các tuyên bố đầu tiên, bạn có thể loại bỏ các tuyên bố mới nhất và chỉ cần thực hiện các mã bên trong các khối mã cho cho vòng lặp, như sau:

int truy cập = 0; 

/ / Sau này trong mã 

cho (; truy cập <10;) 

truy cập + +; 

System.out.println ("Value =" + truy cập); 

Bạn có thể bỏ qua điều kiện thứ hai cũng tuyên bố, mà sẽ để lại cho bạn đoạn mã sau:

cho (;;) 

System.out.println ("Đây vòng lặp vô hạn"); 

Những tuyên bố vòng lặp for (;;) thực hiện cùng một cách như trong khi (đúng) như là một khai báo vòng lặp, vòng lặp liên tục. Bạn có thể thoát ra khỏi một vòng lặp vô hạn (hoặc một vòng lặp mà đã có một điều kiện để chấm dứt sớm) sử dụng câu lệnh break, mà bây giờ chúng ta sẽ thảo luận.

Sử dụng phá vỡ và tiếp tục 

Chúng ta đã thấy các lệnh break, sử dụng nó để thoát ra khỏi báo cáo trường hợp bên trong một tuyên bố chuyển đổi. Tương tự, lệnh break cũng có thể được sử dụng để thoát khỏi vòng lặp, điều này có thể thay thế hoặc bổ sung các điều kiện chấm dứt tồn tại, có nghĩa là bạn có thể có nhiều điều kiện cho các vòng chấm dứt ở các giai đoạn khác nhau trong các khối mã.

số int = 0; 

trong khi (đúng) 

số + +; 

nếu (số> 9) 

phá vỡ; 

Lát của mã này một lần nữa sẽ được tính 0-9, "phá vỡ" ra khỏi vòng lặp trong khi khi giá trị của các biến số lớn hơn 9. Chú ý rằng chúng ta đã thay thế các báo cáo điều kiện với giá trị Boolean của sự thật, điều này chỉ đơn giản là sẽ làm cho vòng lặp lặp lại mãi mãi, có nghĩa là bạn phải thêm mã để nhảy ra khỏi vòng lặp chính mình bằng cách sử dụng lệnh break.

Những tuyên bố tiếp tục là rất hữu ích với các vòng. Nó cho phép bạn nhảy qua khối mã của vòng lặp, về cơ bản nhảy từ vị trí hiện tại và quá khứ phần còn lại của khối mã để bắt đầu giai đoạn vòng lặp tiếp theo. Một ví dụ tốt về điều này được thể hiện trong OddNumbers.java. Ví dụ này sử dụng các tuyên bố tiếp tục nhảy qua các mã còn lại trong khối mã của vòng lặp khi giá trị của bộ đếm vòng lặp được tìm thấy là ngay cả. Kết quả là chỉ số lẻ được in vào màn hình giao diện điều khiển.

public class OddNumbers 

public static void main (args String []) 

for (int counter = 0; truy cập <10; truy cập + +) 

System.out.println ("Giá trị của truy cập =" + truy cập); 

if (truy cập% 2 == 0) / / truy cập thậm chí còn 

System.out.println (", truy cập là ngay cả như vậy tiếp tục"); 

tiếp tục; / / nhảy đến bước lặp tiếp theo 

System.out.println (", số lẻ được tìm thấy, tiếng hoan hô"); 

Khi bạn chạy mã này, sản lượng sẽ tương tự như các ảnh chụp màn hình sau đây.

Hình 2-12: 

Ví dụ trước đây chỉ được cấu trúc để minh họa việc sử dụng các tuyên bố tiếp tục. Để có được một danh sách các số lẻ, các mã sau đây là một thực hiện đơn giản và phù hợp hơn.

for (int counter = 1; truy cập <10; truy cập + = 2) 

System.out.println ("số lẻ =" + truy cập); 

Thay vì thử nghiệm để xem nếu giá trị của truy cập là một số chẵn hoặc lẻ, chúng tôi chỉ đơn giản là có thể đảm bảo rằng tất cả các con số lẻ. Để làm điều này, giá trị của truy cập được khởi tạo tới 1 và được tăng thêm 2 mỗi chu kỳ vòng lặp. Điều này có nghĩa rằng bằng cách liên tục thêm giá trị của 2 trên mỗi chu kỳ vòng lặp, giá trị của truy cập luôn luôn là số lẻ tiếp theo, vì nó bắt đầu như là một số lẻ.

Nhảy đến Nhãn 

Khả năng nhảy đến nhãn có thể là một công cụ rất hữu ích khi sử dụng vòng lặp lồng nhau. Hãy xem xét các phần mã sau đây:

for (int i = 0; i <5; i + +) / / first vòng lặp 

for (int j = 0; j <5; j + +) / / giây / vòng lặp lồng nhau 

phá vỡ; 

Ở đây chúng ta có hai vòng, một trong những lồng nhau bên trong khác. Nếu bạn đang ở trong vòng lặp thứ hai / lồng nhau, không có cách nào nhanh mà bạn có thể thoát ra khỏi cả hai vòng lặp hoàn toàn. Các lệnh break sẽ chỉ "thoát ra khỏi" vòng lặp lồng nhau nhưng tiếp tục thực hiện vòng lặp đầu tiên cho đến khi nó chấm dứt giá trị của tôi là không dưới 5.

Chúng tôi có thể cung cấp cho các vòng đầu tiên một nhãn và sau đó thoát ra khỏi cả hai vòng hoàn toàn bằng cách xác định nhãn với tuyên bố phá vỡ, như sau.

firstLoop: 

for (int i = 0; i <5; i + +) / / first vòng lặp 

for (int j = 0; j <5; j + +) / / giây / vòng lặp lồng nhau 

firstLoop phá vỡ; 

/ / Phá vỡ từ firstLoopLabel sẽ đi đến đây 

Ở đây chúng ta xác định vòng đầu tiên với firstLoop nhãn, theo sau dấu hai chấm. Nó gần giống như cho các vòng đầu tiên một nhận dạng hoặc tên biến để bạn có thể phân biệt giữa nó và vòng lặp lồng nhau từ bên trong vòng lặp lồng nhau. Sau đó bạn có thể chỉ định một trong những vòng lặp mà bạn muốn các lệnh break để ảnh hưởng đến bằng cách thêm các nhãn sau từ khóa phá vỡ.

Bây giờ chúng ta có thể chọn vòng lặp mà chúng ta muốn tuyên bố phá vỡ để "phá vỡ", chúng ta có thể xem xét sử dụng câu lệnh tiếp tục trong cách chính xác như nhau.

Các mã ví dụ sau đây minh họa việc sử dụng phá vỡ và tiếp tục báo cáo sử dụng nhãn với hai vòng, một trong những lồng vào bên trong khác. Chúng được chế tác từ bên trong vòng lặp thứ hai / lồng nhau.

firstLoop: 

for (int i = 0; i <10; i + +) 

for (int j = 0; j <10; j + +) 

if (= 7 I!) 

tiếp tục firstLoop; / / hoặc chỉ phá vỡ vòng lặp này 

khác nếu (= 7 J!) 

tiếp tục; / / tiếp tục vòng lặp này 

/ / Nếu điều này đạt được cả hai i và j bằng 7 

System.out.println ("i =" + i); 

System.out.println ("j =" + j); 

phá vỡ firstLoop; / / này sẽ thoát cả hai vòng 

Mã này chỉ in để giao diện điều khiển các giá trị của các biến i và j khi họ là cả hai bằng 7, sử dụng firstLoop nhãn để thao tác các vòng đầu tiên từ bên trong vòng lặp thứ hai / lồng nhau.

Phương pháp 

Phương pháp được sử dụng như các khối xây dựng chương trình của bạn, thực hiện nhiệm vụ có thể được gọi một lần nữa và một lần nữa và sử dụng mã tương tự để thực hiện nhiệm vụ mỗi lần. Các phần cơ bản nhưng cơ bản của việc kê khai của một phương pháp có tên của nó, kiểu nó trở lại, chữ ký tham số, và khung đoạn xoăn. Các dòng mã sau đây là một ví dụ về một phương pháp kê khai.

static void doSomething () 

/ / Thêm mã ở đây 

Phương pháp này được gọi là doSomething và có một kiểu trả về hư vô, mà chỉ đơn giản chỉ ra rằng phương pháp không trả lại một giá trị. Chúng tôi đã thấy những khoảng trống từ khóa đã có, đó là kiểu trả về của phương pháp chính. Nếu doSomething phương pháp đã được thêm vào lớp học chương trình chính của bạn, sau đó trong phương pháp chính của lớp bạn sẽ gọi doSomething phương pháp bằng cách nhập mã sau đây:

doSomething (); 

Lưu ý doSomething phương pháp cần phải được tĩnh vào lúc này bởi vì phương pháp chính, từ đó chúng ta đang giả định doSomething phương pháp là có được gọi, cũng là tĩnh. Các phương pháp doSomething sẽ không cần phải là tĩnh nếu chúng ta tạo ra một thể hiện của lớp mà doSomething sẽ thuộc về. Chúng tôi sẽ xem xét điều này chi tiết hơn trong chương 4, "Nhiều lớp học." 

Nếu bạn muốn có một phương thức trả về một giá trị, bạn phải chỉ định kiểu trả về của phương pháp, và sau đó bạn phải sử dụng trở lại từ khóa trong các khối mã phương pháp xác định giá trị trả lại.

getFiveDoubled tĩnh int () 

trả lại 10; 

Phương pháp đơn giản sau đây sẽ trả về giá trị từ 10 đến bất cứ nơi nào nó được gọi là từ. Các dòng mã sau đây có thể được thêm vào, ví dụ, trong phương pháp chính của bạn để gán giá trị cho một biến:

int myNumber = getFiveDoubled (); 

Điều này dòng mã sẽ chỉ định giá trị của 10 đến các myNumber biến.

Lưu ý Chỉ vì phương pháp getFiveDoubled bây giờ có một kiểu trả về, nó không có nghĩa là nó không thể được gọi là ngày của riêng mình.

getFiveDoubled (); 

Phương pháp này về cơ bản sẽ không làm gì cả, nhưng bạn có thể có một phương pháp mà thực hiện một nhiệm vụ cần thiết và sau đó trả về giá trị, mà bạn muốn bỏ qua. 

Một phương pháp mà có một giá trị trả về (không void) phải có một tuyên bố trở lại tại mỗi điểm có thể thoát ra từ phương pháp này. Trình biên dịch sẽ nhận nếu một con đường mà không có một giá trị trả về là có thể. Mặt khác, nếu bạn có một phương pháp có hiệu lực kiểu trả về và sau đó muốn thoát ra khỏi phương pháp đầu, bạn có thể sử dụng trở lại từ khóa của riêng mình. Ví dụ, có đoạn mã sau:

public void doSomething () 

if (leaveEarly == true) 

trở lại; 

/ / Khác tiếp tục với phần còn lại của mã 

}

Điều này tương tự như cách các lệnh break được sử dụng để thoát ra khỏi khối mã nhất định, chẳng hạn như trường hợp chuyển đổi và các vòng lặp, như chúng ta đã thấy trước đó. Ví dụ chúng ta vừa thấy là một ví dụ rất cơ bản, nhưng việc sử dụng trở lại từ khóa trong trường hợp này có thể rất hữu ích cho ngay lập tức thoát ra khỏi cụm mã phức tạp trong một phương pháp nhất định.

Truyền Thông số 

Các phương pháp trước đó, getFiveDoubled, là khá vô nghĩa và rất bất tiện vì nó sẽ chỉ trả lại một giá trị, 10. Tuy nhiên, chúng ta có thể tạo ra một phương thức để trong bất kỳ số nào, tăng gấp đôi nó, và sau đó trả về giá trị tăng gấp đôi. Điều này có thể đạt được bằng cách sử dụng truyền thông số. Thông số đi qua cho phép bạn vượt qua giá trị cho một phương pháp mà phương pháp đó có thể thao tác. Các phương pháp sau đây có chứa một tham số, đó là tăng gấp đôi và giá trị mới được trả về.

doubleNumber int (int number) 

số *= 2; 

trả lại số; 

Như bạn thấy, tham số này là một số biến được gọi là kiểu int và được quy định giữa dấu ngoặc đơn theo sau tên của phương pháp. Để gọi phương pháp này, bạn có thể, ví dụ, sử dụng đoạn mã sau:

/ / Đôi của 2 bằng 4 

int myNumber = doubleNumber (2); 

/ / Sau đó tăng gấp đôi số lượng hiện tại của 4 bằng 8 

myNumber = doubleNumber (myNumber); 

/ / Sau đó tăng gấp bốn lần số lượng hiện tại của nó bằng 32 

myNumber = doubleNumber (doubleNumber (myNumber)); 

Dòng cuối cùng của mã sẽ gọi phương pháp doubleNumber hai lần, lần đầu tiên trở về một giá trị tăng gấp đôi giá trị của myNumber, do đó sau đó được thông qua như một tham số để các cuộc gọi thứ hai để doubleNumber mà cuối cùng trả về giá trị cuối cùng của 32, gán cho nó đến myNumber biến.

Để nhắc lại những gì chúng tôi đã đề cập trước, nếu giá trị mà bạn vượt qua như một tham số là một biến kiểu dữ liệu nguyên thủy, biến chính nó là không được truyền cho phương pháp. Một biến mới với giá trị được tạo ra trong phương pháp này và sau đó được sử dụng. Điều này có nghĩa rằng những thay đổi này mang đến giá trị bên trong các phương pháp gọi là không ảnh hưởng đến giá trị của biến ban đầu. (Đây không phải là trường hợp cho các đối tượng, tuy nhiên, cũng có thể được thông qua như là các thông số này được thảo luận trong Chương 4..)

Bạn cũng có thể có nhiều hơn một tham số, sử dụng dấu phẩy để tách các thông số liên tiếp. Ví dụ đơn giản sau đây, SpidersEyes.java, chứa các phương pháp nhân, trong đó có hai tham số được cả hai kiểu int và trả về giá trị của hai thông số nhân với nhau. Dưới đây là mã:

public class SpidersEyes 

công nhân tĩnh int (int valueA, int valueB) 

trở lại valueA * valueB; 

public static void main (args String []) 

numberOfSpiders int = 10; 

int eyesPerSpider = 8; 

int totalEyes = nhân (numberOfSpiders, eyesPerSpider); 

System.out.println ("Eyes Tổng =" + totalEyes); 

Khi bạn chạy mã này, đầu ra trông giống như hình ảnh chụp màn hình sau đây.

Hình 2-13: 

Có hai điều cần lưu ý từ ví dụ này. Đầu tiên, chúng tôi đã sử dụng từ khoá static cho các phương pháp nhân. Điều này là do không có sự thể hiện của lớp SpidersEyes hiện đang tạo ra, vì vậy để cho chính, đó là tĩnh, để có thể truy cập vào các phương pháp nhân, nó phải được tĩnh cũng có. (Nếu điều này là khó hiểu, đừng lo lắng về nó trong thời gian này tất cả sẽ trở nên rõ ràng trong Chương 4 khi chúng tôi bắt đầu xem xét sử dụng đầy đủ các lớp học..) Điều thứ hai để thông báo là phương pháp chính cũng có một tham số, trong đó là một mảng của Strings. Chúng tôi sẽ tìm hiểu về những trong chương kế tiếp.

Phương pháp chữ ký 

Có thể có hai phương thức chia sẻ cùng tên. Tuy nhiên, họ phải có chữ ký khác nhau, vì nếu không khi bạn muốn gọi một trong những phương pháp, trình biên dịch không có cách nào phân biệt một từ khác, như các lời gọi của phương pháp này được dựa trên trình biên dịch nhận biết các chữ ký. Có phương pháp cùng tên nhưng có chữ ký khác nhau được gọi là quá tải các phương pháp.

Tên của các phương pháp và chữ ký các tham số của phương pháp xác định chữ ký của một phương pháp. Các kiểu trả về của một phương pháp không ảnh hưởng đến chữ ký của mình. Do đó bạn không thể có hai phương pháp có cùng tên với hai giá trị trả lại khác nhau với cùng một tham số chữ ký.

Trong ví dụ trước, SpidersEyes.java, chúng tôi đã có một phương pháp gọi là nhân, diễn hai giá trị tham số kiểu int, trở về giá trị của các giá trị tham số nhân với nhau. Nếu chúng ta cũng bao gồm một phương pháp mà đã làm điều tương tự nhưng sử dụng các giá trị của hai loại thay vào đó, chúng ta có thể tạo ra một phương pháp khác có cùng tên nhưng với một chữ ký tham số khác nhau.

công nhân tĩnh int (int a, int b) 

trả về một * b; 

công tĩnh nhân đôi (một đôi, gấp đôi b) 

trả về một * b; 

Chữ ký tham số được xác định bởi các kiểu dữ liệu của các tham số và do đó số lượng các thông số cũng có. Hãy nói rằng bây giờ chúng ta thêm vào các phương pháp sau đây cùng với hai phương pháp trước đây:

công tĩnh lâu nhân (int a, int b) 

trở lại (dài) (a * b); 

Chương trình sẽ không còn biên dịch vì phương pháp này và nhân rộng phương pháp ban đầu chia sẻ cùng một chữ ký. Họ có cùng tên và cũng có tham số giống chữ ký cả hai tham số kiểu int. Các giải pháp rõ ràng nhất là thay đổi chữ ký tham số của phương pháp sau để có hai tham số của loại dài.

công nhân tĩnh dài (lâu dài, b) 

trả về một * b; 

Điều này sẽ làm việc bởi vì các chữ ký thông số khác nhau. Nếu bạn không thể thay đổi các tham số chữ ký một cách hợp lý, không bận tâm, chỉ cần cung cấp cho các phương pháp tên gọi khác nhau (ví dụ, multiplyInt, multiplyDouble, multiplyLong, vv).

Phạm vi biến 

Cho đến nay trong chương này chúng ta đã sử dụng các biến ngay khi họ đã được tuyên bố, mà không thực sự gặp phải vấn đề với phạm vi của các biến. Phạm vi của một biến là khu vực mà trong đó một biến thuộc, theo quy định của khu vực mà nó được khai báo. Các mã ví dụ sau đây có chứa hai biến khai báo, một bên trong một khối mã và bên ngoài một trong đó khối mã (tưởng tượng rằng các mã được nhập vào một phương pháp, như chính chẳng hạn).

int bên ngoài = 10; 

int bên trong = 5; 

/ / Bên ngoài là hợp lệ bên trong khối mã 

bên trong = bên ngoài; 

bên ngoài = 5; 

/ / Bên trong không thể truy cập ở đây 

Các biến bên trong không thể truy cập bất cứ nơi nào bên ngoài khối mã, trong đó nó được tuyên bố bởi vì nó được ra khỏi phạm vi của biến. Các biến bên trong chỉ đơn giản là không tồn tại bên ngoài các khối mã. Do đó, điều này là đúng của tất cả các khối mã, giống như những người thuộc trong khi và cho vòng lặp và nếu và báo cáo khác và phương pháp.

Ví dụ, xem xét điều này cho vòng lặp:

for (int counter = 0; truy cập <5; truy cập + +) 

System.out.println ("truy cập =" + truy cập); 

Các truy cập biến được khai báo trong phạm vi của khối mã cho vòng lặp, nó chỉ tồn tại bên trong khối mã và không thể được truy cập sâu hơn về trong mã bên ngoài của khối mã. Nếu bạn muốn truy cập các biến truy cập sau này trong mã, thực hiện mã của bạn như thế này:

int truy cập; 

cho (truy cập = 0; truy cập <5; truy cập + +) 

System.out.println ("truy cập =" + truy cập); 

System.out.println ("truy cập cuối cùng giá trị =" + truy cập); 

Ở đây chúng ta chỉ đơn giản là khai báo các biến trước khi truy cập cho vòng lặp và sau đó sử dụng nó với cho vòng lặp trong cùng một cách nhưng thời gian này chúng ta không khai báo nó ở giai đoạn đầu tiên của vòng lặp for. Sau đó, bên ngoài của khối mã cho vòng lặp, chúng tôi vẫn có thể truy cập truy cập biến bởi vì nó đã được tuyên bố trong phạm vi khu vực này.

Một biến khai báo trong một phương pháp được biết đến như là một biến địa phương để phương pháp đó và không tồn tại bên ngoài của phương pháp. Cho đến nay, chúng ta chỉ có khai báo các biến bên trong phương pháp. Trong chương tiếp theo, chúng tôi sẽ bắt đầu khai báo biến lớp học tuyên bố bên trong khối mã lớp duy nhất và không phải địa phương để phương pháp bất kỳ, có nghĩa là bạn sẽ có thể truy cập và thao tác các biến này từ phương pháp bất kỳ. Chúng ta sẽ thấy điều này đáng chú ý trong Chương 4.

Tóm tắt 

Trong chương này, chúng tôi delved vào những điều cơ bản của lập trình Java. Bây giờ chúng ta có thể tạo ra các ứng dụng giao diện điều khiển đơn giản bằng cách sử dụng dữ liệu nguyên thủy các loại kết hợp với việc ra quyết định hợp lý và vòng lặp. Các khía cạnh này cho chúng ta các nguyên tắc cơ bản để làm một cấu trúc lớp cho các đối tượng xác định, dữ liệu, và chức năng. Vào đầu chương này, chúng tôi một thời gian ngắn đã xem xét các lớp học và các đối tượng. Trong chương tiếp theo, chúng tôi sẽ xem xét các mảng và chuỗi, hai khía cạnh rất quan trọng của ngôn ngữ Java mà sẽ cung cấp cho chúng với một giới thiệu tốt cho các đối tượng để chuẩn bị cho chương 4.

VOTE CAI DIIIIIIIIIIIIIIIIIIIIIII 

CON NHIU CHUONG LAM KHI NAO RANH MINH DANG TIEP NHA HINH NHU DEN CHUONG 12 LUN HA HA HA . DOC CHO LOI MAT LUN

Bạn đang đọc truyện trên: Truyen247.Pro

Tags: #zero