http://vietjack.com/java/index.jsp Copyright © vietjack.com Package Java Một package Java nhóm kiểu lớp, Interface package tương tự Package Java phân loại thành: Package xây dựng sẵn package người dùng định nghĩa Có nhiều package xây dựng sẵn java, lang, awt, javax, swing, net, io, util, sql, … Chương tìm hiểu cách tạo sử dụng package người dùng tự định nghĩa Gói (package) sử dụng Java để ngăn cản việc xung đột đặt tên, điều khiên truy cập, giúp việc tìm kiếm/lưu trữ sử dụng lớp, interface, enumeration, annotation dễ dàng Một package định nghĩa nhóm kiểu có liên quan đến (lớp, interface, enumeration annotation) cung cấp việc bảo vệ truy cập quản lý tên Một vài package có sẵn Java như: java.lang - Các lớp java.io - Các lớp input output Lập trình viên định nghĩa gói riêng để bao bọc nhóm class/interface Trong thực tế, việc nhóm class liên quan đến giúp cho lập trình viên dễ dàng xác định class, interface, enumeration, annotation liên quan đến Từ việc gói tạo khơng gian tên package khác tránh việc xung đột đặt chung tên gói khác Với việc sử dụng package, dễ dàng cung cấp khả truy cập dễ dàng để chứa class liên quan đến Tạo package Java Khi tạo package Java, bạn nên chọn tên cho package đặt câu lệnh khai báopackage source file Lệnh package nên đặt dòng code Bạn khai báo lệnh package lần source file, áp dụng tới tất kiểu file Nếu lệnh khai báo package không sử dụng, kiểu class, interface, enumerations annotation đặt vào package mặc định khơng có tên http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/java/index.jsp Copyright © vietjack.com Ví dụ: Cùng xem ví dụ việc tạo package tên animals Trong thực tế lập trình, việc sử dụng package thường lấy tên viết thường để tránh xung đột với tên class tên interface Đặt interface package animals: /* Ten File : Animal.java */ package animals; interface Animal { public void eat(); public void travel(); } Lợi package Java Java package sử dụng để phân loại lớp interface chúng trì dễ dàng Java package cung cấp bảo vệ truy cập Java package xóa bỏ xung đột đặt tên Ví dụ khác package Java Từ khóa package sử dụng để tạo package Java //Luu duoi dang Simple.java package mypack; public class Simple{ public static void main(String args[]){ System.out.println("Chao mung ban den voi package Java"); } } Cách biên dịch Java package Nếu bạn không sử dụng IDE nào, bạn cần theo cú pháp sau: http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/java/index.jsp Copyright © vietjack.com javac -d thu_muc ten_javafile Ví dụ: javac -d Simple.java Tùy chọn –d xác định đích, nơi để đặt class file tạo Bạn sử dụng tên thư mục /home (với Linux), d:/abc (với Windows), … Nếu bạn muốn giữ package bên thư mục, bạn sử dụng dấu chấm (.) Cách chạy chương trình Java package Bạn cần sử dụng tên đầy đủ (ví dụ mypack.Simple) để chạy lớp Để biên dịch: javac -d Simple.java Để chạy: java mypack.Simple –d switch mà nói cho trình biên dịch Compiler nơi để đặt class file (nó biểu diễn đích đến) Dấu chấm (.) biểu diễn folder Từ khóa import Java Nếu class sử dụng class khác package, tên package không cần sử dụng Lớp package tìm thấy mà khơng cần cú pháp đặc biệt Ví dụ: Tại đây, lớp Boss thêm vào package payroll chứa Employee Lớp Boss ám đến lớp Employee mà không cần sử dụng tiền tố payroll, minh họa sau lớp Boss package payroll; public class Boss { public void payEmployee(Employee e) { e.mailCheck(); } http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/java/index.jsp Copyright © vietjack.com } Nếu xảy trường hợp Boss không nằm payroll package, lớp Boss phải sử dụng kỹ thuật sau để tham chiếu đến class thuộc package khác Sử dụng tên đầy đủ class sử dụng Ví dụ: payroll.Employee Package nhập sử dụng từ khóa import wild card (*) Ví dụ: import payroll.*; Một class import với từ khóa import Ví dụ: import payroll.Employee; Ghi chú: Một class file chứa số lệnh import Lệnh import phải xuất sau lệnh khai báo package trước từ khóa khai báo lớp Cách truy cập package từ package khác? Có nhiều cách để truy cập package từ package bên ngoài, là: Sử dụng tenpackage.* Nếu bạn sử dụng package.*, tất lớp interface package truy cập, khơng với package Từ khóa import sử dụng để làm cho lớp interface package khác truy cập tới package Ví dụ: //Luu duoi dang A.java package pack; public class A{ public void msg(){System.out.println("Hello");} } //Luu duoi dang B.java package mypack; import pack.*; http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/java/index.jsp Copyright © vietjack.com class B{ public static void main(String args[]){ A obj = new A(); obj.msg(); } } Sử dụng tenpackage.tenlop Nếu bạn import tenpackage.tenlop, có lớp khai báo package truy cập Ví dụ: //Luu duoi dang A.java package pack; public class A{ public void msg(){System.out.println("Hello");} } //Luu duoi dang B.java package mypack; import pack.A; class B{ public static void main(String args[]){ A obj = new A(); obj.msg(); } } Sử dụng tên đầy đủ Nếu bạn sử dụng tên đầy đủ, có lớp khai báo package truy cập Bây bạn không cần import Nhưng bạn cần sử dụng tên đầy đủ bạn truy cập lớp interface Nói chung, sử dụng hai package có tên lớp, ví dụ: hai package java.util java.sql chứa lớp Date Ví dụ: http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/java/index.jsp Copyright © vietjack.com //Luu duoi dang A.java package pack; public class A{ public void msg(){System.out.println("Hello");} } //Luu duoi dang B.java package mypack; class B{ public static void main(String args[]){ pack.A obj = new pack.A();//Su dung ten day du obj.msg(); } } Ghi chú: Nếu bạn import package, package không import Nếu bạn import package, tất lớp interface package import ngoại trừ lớp interface package Vì thế, bạn cần import package Package Java Package mà bên package khác gọi package (subpackage) Ví dụ: Sun Microsystem định nghĩa package có tên java chứa nhiều lớp System, String, Reader, Writer, Socket, … Những lớp biểu diễn nhóm cụ thể, ví dụ lớp Reader Writer cho hoạt động I/O, lớp Socket ServerSocket cho lập trình mạng, … Vì thế, Sun lại phân loại java package thành subpackage lang, net, io, … đặt lớp liên quan tới IO vào io package, … Ví dụ subpackage package com.vietjack.core; class Simple{ public static void main(String args[]){ System.out.println("Hello subpackage"); } http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/java/index.jsp Copyright © vietjack.com } Để biên dịch: javac -d Simple.java Để chạy: java com.vietjack.core.Simple Cách gửi class file tới thư mục drive khác? Giả sử tình huống, bạn muốn đặt class file A.java source file thư mục classes c: drive Ví dụ: //Luu duoi dang Simple.java package mypack; public class Simple{ public static void main(String args[]){ System.out.println("Chao mung den voi package"); } } Để biên dịch: e:\sources> javac -d c:\classes Simple.java Để chạy: Để chạy chương trình từ thư mục e:\source, bạn cần thiết lập classpath thư mục, nơi mà class file e:\sources> set classpath=c:\classes;.; e:\sources> java mypack.Simple Cách khác với -classpath switch Bạn sử dụng –class switch với javac java tool Để chạy chương trình từ thư mục e:\source, bạn sử dụng –class switch java mà nói cho biết nơi để tìm class file Ví dụ: e:\sources> java -classpath c:\classes mypack.Simple Cách để tải class file jar file Cách để tải class file jar file: Tạm thời: thiết lập classpath command prompt –classpath switch http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/java/index.jsp Copyright © vietjack.com Vĩnh viễn: thiết lập classpath biến môi trường tạo jar file, chứa tất class file, chép jar file thư mục jre/lib/ext Qui tắc: Chỉ có lớp public java source file phải lưu trữ tên lớp public //Luu duoi dang C.java neu khong se gay Compilte Time Error class A{} class B{} public class C{} Cách đặt hai lớp public package? Nếu bạn muốn đặt hai lớp public package, bạn có hai java source file chứa lớp public giữ tên package giống Ví dụ: //Luu duoi dang A.java package vietjack; public class A{} //Luu duoi dang B.java package vietjack; public class B{} Thiết lập biến hệ thống CLASSPATH Java Để hiển thị biến CLASSPATH tại, bạn sử dụng lệnh sau Windows UNIX (Bourne shell): Trong Windows -> C:\> set CLASSPATH Trong UNIX -> % echo $CLASSPATH Để xóa nội dung biến CLASSPATH, bạn sử dụng: Trong Windows -> C:\> set CLASSPATH= Trong UNIX -> % unset CLASSPATH; export CLASSPATH http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/java/index.jsp Copyright © vietjack.com Để thiết lập biến CLASSPATH: Trong Windows -> set CLASSPATH=C:\users\jack\java\classes Trong UNIX -> % CLASSPATH=/home/jack/java/classes; export CLASSPATH http://vietjack.com/ Trang chia sẻ học online miễn phí Page ... dễ dàng Java package cung cấp bảo vệ truy cập Java package xóa bỏ xung đột đặt tên Ví dụ khác package Java Từ khóa package sử dụng để tạo package Java //Luu duoi dang Simple .java package mypack;... import package, package khơng import Nếu bạn import package, tất lớp interface package import ngoại trừ lớp interface package Vì thế, bạn cần import package Package Java Package mà bên package. .. System.out.println("Hello subpackage"); } http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com /java/ index.jsp Copyright © vietjack.com } Để biên dịch: javac -d Simple .java Để chạy: java com.vietjack.core.Simple