Blog Feed

Strtok Trong C++

I. Strtok Trong C++ Là Gì

Hàm char *strtok(char *str, const char *delim) chia chuỗi str thành 1 dãy những token được phân biệt riêng rẽ bởi dấu tách delim (ví dụ: dấu phảy, …).

II. Khai Báo Hàm Strtok() Trong C++

Dưới đây là phần khai báo cho strtok() trong C:

char *strtok(char *str, const char *delim)

 

Tham số

str — Nội dung của chuỗi này được sửa đổi và được chia thành những chuỗi nhỏ hơn (các token).

delim — Đây là chuỗi chứa Delimiter (chỉ những dấu tách). Chúng có thể vô cùng đa dạng tùy vào từng lời gọi.

Trả về giá trị

Hàm này trả về con trỏ đến token cuối cùng được tìm thấy trong chuỗi. Một con trỏ null được trả về nếu không thu được token nào.

III. Ví Minh Họa Khai Báo Hàm Strtok() Trong C++

#include string.h
#include stdio.h

int main()
{
char str[80] = "Hoc C - co ban va nang cao - tai QTM";
const char s[2] = "-";
char *token;

/* lay token dau tien */
token = strtok(str, s);

/* duyet qua cac token con lai */
while( token != NULL )
{
printf( " %sn", token );

token = strtok(NULL, s);
}

return(0);
}

 

IV. Tách Toàn Bộ Chuỗi Con Từ Chuỗi Trong C

Hướng dẫn cách tách chuỗi chuỗi trong C. Bạn sẽ học được cách tách chuỗi trong C bằng các hàm tách chuỗi strtok(), cũng như các lưu ý khi sử dụng hàm strtok() trong C sau bài học này.

Tách chuỗi trong c | hàm strtok

Hàm strtok() trong C là một hàm có sẵn trong header file string.h, giúp chúng ta tách chuỗi trong chuỗi C bằng ký tự chỉ định.

Để có thể sử dụng được hàm strtok(), chúng ta cần phải viết thêm dòng #include <string.h> để load header file string.h vào trong chuơng trình.

Chúng ta sử dụng hàm strtok() để tách chuỗi trong chuỗi C với cú pháp sau đây:

strtok(str, sep)

Trong đó:

  • str là chuỗi cần tách
  • sep là ký tự phân tách. (sep viết tắt separator)

Hàm strtok() sẽ trả về vị trí đầu chuỗi của chuỗi con đầu tiên được phân tách bằng dấu phân cách từ chuỗi ban đầu dưới dạng con trỏ chuỗi trong C. Trong trường hợp không tìm thấy ký tự phân tách , giá trị NULL sẽ được trả về.

Cơ chế của hàm strtok() là điền ký tự kết thúc chuỗi \0 vào chuỗi ban đầu mỗi khi tìm thấy ký tự phân tách, do đó cần lưu ý là hàm strtok() sẽ làm biến đổi chuỗi ban đầu.

Lại nữa, hàm strtok() chỉ có thể tách một chuỗi con bằng dấu phân tách từ chuỗi ban đầu trong mỗi lần thực thi mà thôi.

Ví dụ cụ thể:

#include <stdio.h>
#include <string.h>

int main(void){
char str[50] = "Ha Noi,Ninh Binh,Nam Dinh,Thanh Hoa";

//Khai báo con trỏ chuỗi để chứa kết quả
char * p;

p = strtok(str, ",");
printf("%s\n", p);
}
//Ha Noi

 

Ở ví dụ này, hàm strtok() sẽ hoạt động với các bước như sau:

  1. Hàm strtok() bắt đầu tìm vị trí ký tự phân tách là dấu , ở bên trong chuỗi str.
  2. Sau khi tìm thấy vị trí dấu phẩy đầu tiên, hàm strtok() sẽ điền ký tự kết thúc chuỗi \0 vào vị trí tìm thấy. Khi đó, chuỗi ban đầu sẽ chuyển thành dạng Ha Noi\0Ninh Binh,Nam Dinh,Thanh Hoa.
  3. Hàm strtok() quay trở về đầu chuỗi ban đầu và trả về vị trí đầu chuỗi này dưới dạng con trỏ chuỗi trong C. Cuối cùng khi in con trỏ chuỗi này, chuỗi sẽ được in ra từ vị trí đầu chuỗi là ký tự H cho đến ký tự thúc chuỗi \0 (Ha Noi\0), do đó chuỗi kết quả Ha Noi sẽ được in ra màn hình.

Tách toàn bộ chuỗi con từ chuỗi trong C | hàm strtok

Ở phần trên chúng ta đã biết hàm strtok() trong C chỉ có thể giúp chúng ta tách một chuỗi con bằng dấu phân tách từ chuỗi ban đầu trong mỗi lần sử dụng mà thôi.

Do đó, để có thể tách toàn bộ chuỗi con từ chuỗi ban đầu trong C thì sau lần tách đầu tiên, chúng ta cần phải tạo ra một vòng lặp để lần lượt tách các chuỗi con con lại từ chuỗi ban đầu bằng hàm strtok().

Và lựa chọn sáng giá ở đây chính là vòng lặp while, khi mà chúng ta vốn không biết rõ số vòng lặp cần dùng là bao nhiêu trong chương trình.

Chúng ta sẽ viết chương trình tách toàn bộ chuỗi con từ chuỗi trong c như sau:

#include <stdio.h>
#include <string.h>

int main(void){
char str[50] = "Ha Noi,Ninh Binh,Nam Dinh,Thanh Hoa";
char * p;

//Tách chuỗi con lần đầu tiên
p = strtok(str, ",");
printf("%s\n", p);

//Tách chuỗi con từ lần thứ 2 trở đi
//Bằng cách sử dụng hàm strok cho tới khi kết quả NULL được trả về.
while(p != NULL) {
//Chỉ dịnh đối số NULL trong hàm strtok để tiếp tục tách chuỗi ban đầu
p = strtok(NULL, ",");

if(p != NULL) {
printf("%s\n", p);
}
}
return 0;
}
//Ha Noi
//Ninh Binh
//Nam Dinh
//Thanh Hoa

 

Ở đây chúng ta cần phải lưu ý rằng:

  1. Lần gọi hàm strtok() đầu tiên và các lần tiếp theo là khác nhau.
  2. Trong lần gọi strtok đầu tiên, chúng ta phải chỉ định đối số của hàm là chuỗi ban đầu để bắt đầu tách chuỗi. Trong các lần gọi tiếp theo, chúng ta phải chỉ định NULL làm đối số của hàm. Đối số này sẽ yêu cầu hàm tiếp tục tách từ chuỗi ban đầu đã truyền vào từ trước đó. Nếu chúng ta chỉ định lại chuỗi ban đầu hoặc một chuỗi khác thì kết quả hàm sẽ không tiếp tục tách nữa mà sẽ bắt đầu xử lý lại từ đầu.
  3. Khi không còn tìm thấy ký tự phân tách từ trong chuỗi ban đầu nữa, kết quả NULL sẽ được trả về, và khi đó thì vòng lặp While sẽ kết thúc.

V. Lưu Ý Khi Tách Chuỗi Trong C Bằng Hàm Strtok

Lưu ý thứ nhất

Giống như Kiyoshi đã phân tích ở trên, thì do cơ chế hàm strtok() sẽ điền thêm ký tự kết thúc chuỗi \0 vào các vị trí tìm thấy ký tự phân tách, nên chuỗi ban đầu sẽ bị thay đổi sau khi chúng ta sử dụng hàm strtok().

Bởi vậy, lưu ý đầu tiên khi sử dụng hàm này đó chính là, chuỗi ban đầu sẽ bị thay đổi. Do đó, bạn cần phải backup chuỗi này bằng cách copy nó chẳng hạn trước khi dùng hàm, và đối với các chuỗi không được thay đổi trong chương trình, thì bạn đừng sử dụng chuỗi với hàm strtok nhé.

Cách copy chuỗi có thể tham khảo tại bài dưới đây:

Lưu ý thứ hai

Chúng ta không nhất thiết chỉ chỉ định một ký tự làm ký tự phân tách, mà có thể chỉ định ký tự phân tách bằng chuỗi ký tự. Ví dụ như chúng ta có thể kết hợp nhiều dấu dấu cách với cụm từ để làm ký tự phân tách ” and ” như sau:

#include <stdio.h>
#include <string.h>

int main(void){
char str[50] = "Tom and Jerry and me";
char * p;

p = strtok(str, " and ");
printf("%s\n", p);

while(p != NULL) {
p = strtok(NULL, " and ");
if(p != NULL) {
printf("%s\n", p);
}
}
return 0;
}
//Tom
//Jerry
//me

 

The post Strtok Trong C++ first appeared on Techacademy.

source https://techacademy.edu.vn/strtok-trong-c/

Các Kiểu Dữ Liệu Trong Java

Bất cứ một ngôn ngữ lập trình nào cũng có một tập các kiểu dữ liệu, kiểu dữ liệu là cơ bản, và nó khá giống nhau với tất cả các ngôn ngữ.

Các ứng dụng luôn xử lý dữ liệu ở đầu vào và xuất dữ liệu kết quả ở đầu ra. Đầu vào, đầu ra và kết quả của các quá trình tính toán đều liên quan đến dữ liệu. Trong môi trường tính toán, dữ liệu được phân lớp theo các tiêu chí khác nhau phụ thuộc vào bản chất của nó.

Ở mỗi tiêu chí, dữ liệu có một tính chất xác định và có một kiểu thể hiện riêng biệt. Java cung cấp một vài kiểu dữ liệu, chúng được hỗ trợ trên tất cả các nền. Ví dụ, dữ liệu loại int (integer) của Java được thể hiện bằng 4 bytes trong bộ nhớ của tất cả các loại máy bất luận ở đâu chạy chương trình Java. Bởi vậy các chương trình Java không cần phải thay đổi khi chạy trên các nền khác nhau

Java có 2 loại kiểu dữ liệu:

  • Các kiểu dữ liệu nguyên thủy (Primitive Data Types)
  • Các kiểu dữ liệu tham chiếu (Reference Types)

I. Kiểu Dữ Liệu Date Trong Java

Java cung cấp lớp Date có sẵn trong java.util package, lớp này tóm lược ngày tháng và thời gian hiện tại.

Lớp Date hỗ trợ 2 constructor. Constructor đầu tiên khởi tạo đối tượng với ngày và thời gian hiện tại.

Date( )

Constructor sau chấp nhận 1 tham số bằng số mili giây đã trôi qua từ nửa đêm ngày 1/1/1970.

Date(long millisec)

1 khi các bạn có 1 đối tượng Date có sẵn, các bạn có thể gọi bất kỳ phương thức hỗ trợ nào để thao tác với ngày tháng này:

STT Phương thức và Miêu tả
1 boolean after(Date date)Trả về true nếu gọi đối tượng Date chứa 1 ngày mà chậm hơn ngày đã xác định, nếu không là false.
2 boolean before(Date date)Trả về true nếu gọi đối tượng Date chứa 1 ngày mà sớm hơn ngày đã xác định, nếu không là false.
3 Object clone( )Sao chép đối tượng Date đang gọi
4 int compareTo(Date date)So sánh giá trị đối tượng đang gọi với giá trị đó của date. Trả về 0 nếu các giá trị này là cân bằng. Trả về 1 giá trị âm nếu đối tượng đang gọi là sớm hơn date. Trả về 1 giá trị dương nếu đối tượng đang gọi chậm hơn date.
5 int compareTo(Object obj)Tiến hành tương tự như compareTo(Date) nếu đối tượng là của lớp Date. Nếu không thì, nó cho một ClassCastException.
6 boolean equals(Object date)Trả về true nếu đối tượng Date đang gọi chứa thời gian và ngày tháng giống như date đã cho, nếu không là false.
7 long getTime( )Trả về số mili giây đã trôi qua từ 1/1/1970
8 int hashCode( )Trả về 1 mã hóa băm (hash code) cho đối tượng đang gọi
9 void setTime(long time)Thiết lập ngày tháng và thời gian như time đã cho, mà biểu diễn một time đã trôi qua (giá trị mili giây) từ nửa đêm 1/1/1970
10 String toString( )Biến đổi đối tượng Date đang gọi thành 1 chuỗi và trả về kết quả

II. Kiểu Dữ Liệu Double Trong Java

Kiểu dữ liệu Double là 1 kiểu thập phân 64-bit có độ chính xác kép.

Phạm vi giá trị của nó là không giới hạn. Kiểu dữ liệu Double thường được dùng cho các giá trị thập phân giống như float.

Kiểu dữ liệu Double cũng không bao giờ nên được dùng cho các giá trị chính xác, ví dụ như tiền tệ. Giá trị mặc định của nó là 0,0d.

Ví dụ:

double d1 = 12.3

III. Kiểu Dữ Liệu String Trong Java

Java hỗ trợ các thao tác với chuỗi thông qua lớp String. Lớp này nằm trong gói java.lang.

Trong quá trình sử dụng, import gói java.lang theo cú pháp sau:

import java.lang.String;

Hoặc:

import java.lang.*;

Lớp String hỗ trợ hơn 50 hàm để thao tác với kiểu chuỗi. Chức năng của một số hàm thông thường:

STT Nguyên mẫu hàm Chức năng
1 public char charAt(int s) Trả về ký tự có chỉ số là i trong chuỗi cần tìm.
2 public String concat(String s2) Trả về chuỗi đã được nối thêm vào chuỗi s2, s2 sẽ được nối vào sau chuỗi gọi hàm.
3 public boolean equals(String s2) Trả về true nếu giá trị của chuỗi s2 bằng giá trị chuỗi đang xét, trả về false nếu ngược lại. Phân biệt chữ hoa và chữ thường trong khi so sánh.
4 public boolean equalsIgnoreCase(String s2) Trả về true nếu giá trị của chuỗi s2 bằng giá trị chuỗi đang xét, trả về false nếu ngược lại. Không phân biệt chữ hoa và chữ thường trong khi so sánh.
5 public int length() Trả về độ dài của chuỗi đang xét.
6 public String replace(char oldChar, char newChar) Thay thế ký tự oldChar bằng ký tự newChar.
7 public String substring(int begin)
public String substring(int begin)
Lấy ra chuỗi con từ vị trí begin đến hết chuỗi, hoặc từ vị trí begin đến vị trí end.
8 public int indexOf(String str) Kiểm tra sự tồn tại của chuỗi str trong chuỗi đang xét. Nếu có, trả về vị trí đầu tiên của sự xuất hiện, nếu không trả về -1.
9 public String toUpperCase() Chuyển tất cả ký tự trong chuỗi đang xét thành ký tự hoa.
10 public String toLowerCase() Chuyển tất cả ký tự trong chuỗi đang xét thành ký tự thường.
11 public String toString() Trả về giá trị của chuỗi đang xét. Trong 1 vài trường hợp, bạn có thể override lại để sử dụng đúng mục đích.
12 public String trim() Trả về chuỗi đã được loại bỏ khoảng trắng.

Dưới đây là một ví dụ về việc sử dụng một số hàm thông thường trong Java. Khi sử dụng, chú ý đến kiểu trả về và đối số truyền vào hàm để có kết quả chính xác.

package TestString;

import java.lang.*;

public class main {
   
   public static void main(String[] args) {
      
      String s = "STDIO";
      
      // Access a single character at specific index
      System.out.println("1. s[3] = " + s.charAt(3));
      
      // Concatenate 2 strings
      System.out.println("2. Concatenate 2 strings: ");
      s = s.concat("-LAPTRINHJAVA");
      System.out.println(s);
      
      // Compare 2 strings
      if(s.equals("Im Michael"))
         System.out.println("3. Equal strings!");
      else
         System.out.println("3. Not equal strings!");
      
      // Get length of string
      System.out.println("4. Length of s: " + s.length());
      
      // Replace characters from string
      System.out.println("5. Replacing - by _ from s: " + s.replace('-', '_'));	
   }
}

IV. Kiểu Dữ Liệu Object Trong Java

Mặc định lớp Object là lớp cha của tất cả các lớp trong java. Nói cách khác nó là 1 lớp cáo nhất trong java.

Sử dụng lớp Object là hữu ích nếu bạn muốn tham chiếu bất kỳ đối tượng nào mà bạn chưa biết kiểu dữ liệu của đối tượng đó. Lưu ý rằng biến tham chiếu của lớp cha có thể tham chiếu đến đối tượng của lớp con được gọi là upcasting.

Ví dụ: giả sử phương thức getObject() trả về một đối tượng nhưng nó có thể là bất kỳ kiểu nào như Employee, Student… các bạn có thể sử dụng biến tham chiếu của lớp Object để tham chiếu tới đối tượng đó.

Object obj = getObject();//Chung ta khong biet doi tuong nao se duoc tra ve tu phuong thuc nay

Lớp Object cung cấp 1 vài cách xử lý chung cho tất cả các đối tượng như đối tượng có thể được so sánh, đối tượng có thể được cloned, đối tượng có thể được notified…

Các phương thức của lớp Object

Lớp Object cung cấp các phương thức như trong bảng sau:

Phương thức Mô tả
public final Class getClass() trả về đối tượng lớp Class của đối tượng hiện tại. Từ lớp Class đó có thể lấy được các thông tin metadata của class hiện tại.
public int hashCode() trả về số hashcode cho đối tượng hiện tại.
public boolean equals(Object obj) so sánh đối tượng đã cho với đối tượng hiện tại.
protected Object clone() throws CloneNotSupportedException tạo và trả về bản sao chép (clone) của đối tượng hiện tại.
public String toString() trả về chuỗi ký tự đại diện của đối tượng hiện tại.
public final void notify() đánh thức một luồng, đợi trình giám sát của đối tượng hiện tại.
public final void notifyAll() đánh thức tất cả các luồng. đợi trình giám sát của đối tượng hiện tại.
public final void wait(long timeout)throws InterruptedException làm cho Thread hiện tại đợi trong khoảng thời gian là số mili giây cụ thể, tới khi Thread khác thông báo (gọi phương thức notify() hoặc notifyAll()).
public final void wait(long timeout,int nanos)throws InterruptedException làm cho Thread hiện tại đợi trong khoảng thời gian là số mili giây và nano giây cụ thể, tới khi Thread khác thông báo (gọi phương thức notify() hoặc notifyAll()).
public final void wait()throws InterruptedException làm Thread hiện tại đợi, tới khi Thread khác thông báo (gọi phương thức notify() hoặc notifyAll()).
protected void finalize()throws Throwable Được gọi bởi Garbage Collector trước khi đối tượng bị dọn rác.

Khai báo Object

1 Object (đối tượng) nó chứa trong đó bao gồm các method (phương thức) và properties (thuộc tính) để tạo ra 1 kiểu dữ liệu hữu ích.

Object xác định hành vi của class. Khi bạn gửi 1 thông điệp vào 1 object, có nghĩa là bạn đang yêu cầu gọi các object hoặc thực hiện 1 trong các phương thức của nó.

Từ 1 quan điểm của lập trình hướng đối tượng, một đối tượng có thể là 1 cấu trúc dữ liệu (data structure), 1 biến (variable) hoặc 1 chức năng (function).

Object được phân bổ vị trí bộ nhớ. Các Object được thiết kế như class phân cấp.

ClassName ReferenceVariable = new ClassName();

V. Kiểu Dữ Liệu Boolean Trong Java

Boolean là 1 trong những kiểu dữ liệu nguyên thủy trong Java, nó chỉ cho phép biến mang 2 giá trị true (ĐÚNG) hoặc false (SAI).

Cùng với kiểu dữ liệu nguyên thủy thì Java cũng đã được phát triển 1 lớp Boolean, nhằm hỗ trợ lập trình viên nhiều hơn.

Boolean khác biệt với hầu hết các kiểu dữ liệu khác vì nó chỉ cho phép 2 giá trị.

Vậy nên nó thường được sử dụng trong những trường hợp chỉ có 2 kết quả ĐÚNG hoặc SAI và đặc biệt thường sẽ được sử dụng làm điều kiện rẽ nhánh.

Để cho dễ hiểu thì mình sẽ liên hệ thực tế và cung cấp 1 ví dụ về kiểu dữ liệu boolean này.

Ví dụ:

  • Bạn muốn lưu giá trị thời tiết vào một thời điểm nhất định
  • Tại thời điểm đó chỉ có 2 trường hợp có thể xảy ra đó là có mưa hoặc không có mưa.
  • Như vậy ta chỉ cần lưu 1 biến troiMua với kiểu boolean, với giá trị true là có mưa còn false là không có mưa.

Định nghĩa về kiểu dữ liệu boolean trong Java thì chỉ có bấy nhiêu, khá là dễ hiểu đúng không nào? Song song với kiểu dữ liệu nguyên thủy thì như hầu hết kiểu dữ liệu nguyên thủy khác, Java đã được phát triển một lớp Boolean với mục đích hỗ trợ nhiều hơn cho lập trình viên.

Bắt đầu với 1 ví dụ đơn giản xem tình trạng thời tiết hiện tại là mưa hay là không mưa.

public class Main
{
   public static void main(String[] args) {
      boolean troiMua = true;
      if (troiMua) {
         System.out.println("Trời đang mưa");
      }
      else
      {
         System.out.println("Trời không mưa");
      }
   }
}

Như bạn thấy, ở thời điểm ban đầu, vừa khai báo vài khởi tạo giá trị ban đầu của biến troiMua.

boolean troiMua = true;

Trong đó, kiểu dữ liệu của biến troiMua là boolean, giá trị khởi tạo là true.

Tiếp đó, trong cấu trúc điều kiện if … else, mình kiểm tra nếu biến troiMua mà đúng thì thông báo “Trời đang mưa”.

Ngược lại thì thông báo “Trời không mưa”.

Bạn cũng có thể làm thế này.

if (troiMua == true)

VI. Kiểu Dữ Liệu Byte Trong Java

Kiểu dữ liệu byte là 1 ví dụ về kiểu dữ liệu nguyên thủy.

Kiểu byte gồm 8-bit. Phạm vi giá trị của nó nằm trong khoảng từ -128 đến 127. Giá trị tối thiểu của nó là -128 và giá trị tối đa là 127. Giá trị mặc định của nó là 0.

Kiểu dữ liệu byte được dùng để lưu bộ nhớ trong các mảng lớn, trong đấy việc tiết kiệm bộ nhớ là bắt buộc nhất. Nó tiết kiệm không gian vì một byte nhỏ hơn 4 lần so với số integer. Nó cũng có thể được dùng thay cho kiểu dữ liệu ‘int’.

Ví dụ:

byte a = 10, byte b = -20

VII. Ép Kiểu Dữ Liệu Trong Java

Ép kiểu là cách chuyển biến thuộc kiểu dữ liệu này thành biến thuộc kiểu dữ liệu khác.

Ý nghĩa:

  • Việc chuyển kiểu dữ liệu sẽ đến lúc phải cần trong quá trình xử lý chương trình
  • Có thể định dạng đúng kiểu dữ liệu mình mong muốn (Như cách hiển thị kiểu ngày tháng năm trên thế giới khác với Việt Nam nên ta sẽ chuyển kiểu ngày theo phong cách địa phương).

Cách sử dụng ép kiểu

Trong bài này chỉ nói đến ép kiểu dữ liệu đối với dữ liệu nguyên thủy (Primitive Data Types), còn đối với ép kiểu dữ liệu tham chiếu (Reference Types) thì cách ép kiểu là những hàm (phương thức) ép kiểu do người ta viết riêng cho mỗi kiểu dữ tham chiếu đó.

Thì trong ép kiểu trong kiểu dữ liệu nguyên thủy được chia ra làm 2 loại:

  • Chuyển đổi kiểu ngầm định (implicit)
    Chuyển đổi kiểu tường minh (explicit)

Kiểu chuyển đổi ngầm định (implicit)

Việc chuyển đổi sẽ tự thực hiện bởi compiler và các bạn không cần làm gì. Việc chuyển đổi này gì dành cho kiểu dữ liệu nhỏ sang kiểu dữ liệu lớn hơn. Ta có thể xem chiều từ nhỏ sang lớn như sau:

Ví dụ: Ta lấy 1 biến kiểu int gán giá trị cho biến kiểu long

public class HelloWorld{

     public static void main(String []args){
        int a = 5;
        long b = a;
        System.out.print(b);
     }
}

Kiểu chuyển đổi tường minh (explicit)

Ngược lại với cách chuyển đổi ngầm định, việc chuyển đổi tường minh là chiều ngược lại từ kiểu dữ liệu lớn hơn sang kiểu dữ liệu nhỏ hơn (với điều kiện giá trị đó kiểu dữ liệu sẽ thay đổi có thể lưu trữ được trong kiểu dữ liệu mới).

Với ép kiểu theo cú pháp:

(<Kiểu dữ liệu>) <Tên biến>;

Ví dụ: Ta lấy một biến kiểu long gán giá trị cho biến kiểu int

public class HelloWorld{

     public static void main(String []args){
        long a = 6;
        int b = (int) a;
        System.out.print(a);
     }
}

Chú ý:

Nếu ép kiểu dữ liệu kí tự char sang kiểu dữ liệu số hoặc ngược lại.

Khi ép kiểu char sang số thì sẽ ép kiểu ngầm định chuyển kí tự sang hệ thập phân ASCII tương ứng kí tự đó.

Nếu ngược lại thì phải dùng ép kiểu tường minh để chuyển sang kiểu kí tự.

VIII. Kiểm Tra Kiểu Dữ Liệu Trong Java

Bài viết này sẽ định nghĩa 1 lớp dùng để kiểm tra dữ liệu và có thể sử dụng lại được, nó sẽ cho mọi người 1 cái nhìn tổng quan về cấu trúc của biểu thức chính quy. Ứng dụng chạy lặp đi lặp lại việc yêu cầu người dùng nhập vào một chuỗi cho đến khi nhập đúng theo mẫu mà biểu thức chính quy đã đề ra thì thôi.

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexTestHarness {
 public static void main(String[] args) {
 Console console = System.console();
 if (console == null) {
 System.err.println("No console.");
 System.exit(1);
 }
 while (true) {
 Pattern pattern =
 Pattern.compile(console.readLine("%nNhập vào một biểu thức chính quy: "));
 Matcher matcher =
 pattern.matcher(console.readLine("Nhập vào một chuỗi để tìm kiếm: "));
 boolean found = false;
 while (matcher.find()) {
 console.format("Tìm thấy " +
 " \"%s\" bắt đầu tại " +
 "index %d và kết thúc tại %d.%n",
 matcher.group(),
 matcher.start(),
 matcher.end());
 found = true;
 }
 if (!found) {
 console.format("Không tìm thấy, không tương thích.%n");
 }
 }
 }
}

Trước khi tiếp tục chuyển sang bài viết tiếp theo, các bạn hãy lưu và chạy đoạn mã trên để đảm bảo rằng môi trường phát triển của bạn hỗ trợ các gói yêu cầu. Trong trường hợp môi trường phát triển của bạn không hỗ trợ Console, bạn có thể thực thi đoạn code sau để thay thế:

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexTestHarness {
 public static void main(String[] args) {
 Scanner scanner=new Scanner(System.in);
 while (true) {
 System.out.print("Nhập vào một biểu thức chính quy: ");
 Pattern pattern = Pattern.compile(scanner.nextLine());
 System.out.print("Nhập vào một chuỗi để tìm kiếm: ");
 Matcher matcher = pattern.matcher(scanner.nextLine());
 boolean found = false;
 while (matcher.find()) {
 System.out.printf("Tìm thấy " +
 " \"%s\" bắt đầu tại " +
 "index %d và kết thúc tại %d.%n",
 matcher.group(),
 matcher.start(),
 matcher.end());
 found = true;
 }
 if (!found) {
 System.out.printf("Không tìm thấy, không tương thích.%n");
 }
 }
 }
}

IX. Kiểu Số Thực Trong Java

Cùng chúng tôi xem qua 1 ví dụ về kiểu số thực trong Java nhé

Bạn hãy viết chương trình tạo ra 2 biến a, b kiểu số thực. Sau đó gán giá trị cho a = 10.5, b = 7 và thực hiện hiển thị ra màn hình:

a / b = {P}

Với {P} là thương của a và b ({P} là kết quả của phép chia a / b).

Lý thuyết

Để khai báo và gán giá trị cho biến kiểu số thực bạn dùng từ khóa double:

// Khai báo biến a kiểu số thực và gán giá trị cho a = 10.5
double a = 10.5;

Ví dụ chương trình tạo và hiển thị biến kiểu số thực ra màn hình:

public class Variable {
   public static void main(String[] args) {
      // Khai báo biến a kiểu số thực và gán giá trị cho a = 1.5
      double a = 1.5;
      System.out.println("a = " + a);
   }
}

Kết quả khi chạy chương trình:

a = 1.5

Ngoài double ra thì trong Java còn một kiểu dữ liệu nữa cũng được dùng để lưu trữ số thực nữa là float nhưng trong hầu hết mọi trường hợp bạn nên sử dụng kiểu double.

Lưu ý: Bạn không thể dùng biến kiểu int để lưu trữ số thực và kết quả của phép toán giữa 2 số nguyên là một số nguyên. Ví dụ:

public class Variable {
   public static void main(String[] args) {
      int a = 4;
      int b = 3;
      System.out.println(a / b);
      System.out.println(4 / 3);
   }
}

Kết quả sau khi chạy chương trình:

1
1

Kết quả sẽ là 1 mà không phải 1.(3) do cả a và b đều là biến kiểu số nguyên nên kết quả sẽ là 1 số nguyên. Do đó khi thực hiện các phép toán trong Java bạn cần lưu ý tới kiểu dữ liệu. Để chương trình trên hiển thị đúng kết quả bạn có thể làm như sau:

public class Variable {
   public static void main(String[] args) {
      double a = 4;
      double b = 3;
      System.out.println(a / b);
      System.out.println(4.0 / 3);
   }
}

Kết quả sau khi chạy chương trình:

1.3333333333333333
1.3333333333333333

Đọc tới đây các bạn đã hiểu về cách khai báo và sử dụng biến kiểu số thực. Hãy thực hành để hiểu rõ hơn về cách làm nhé.

X. Kiểu Dữ Liệu Bigdecimal Trong Java

BigDecimal đại diện cho 1 số thập phân có độ chính xác cao. Một BigDecimal object là immutable và được chia làm 2 phần:

  • Precision- Biểu diễn tất các ký số có trong BigDecimal dưới dạng số nguyên không phân biệt phần thập phân.
  • Scale (32 bit) – Số nguyên biểu diễn số chữ số thập phân.

Ví dụ BigDecimal 3.14 có phần Precision là 314 và scale là 2.

các bạn sử dụng BigDecimal cho các phép tính số học đòi hỏi độ chính xác cao như các bài toán liên quan đến tiền tệ etc.

Khởi tạo BigDecimal

các bạn có thể khởi tạo BigDecimal object từ String, mảng character int, long, double, BigInteger.

BigDecimal bdFromString = new BigDecimal("0.1");
BigDecimal bdFromCharArray = new BigDecimal(new char[ {'3','.','1','6','1','5'});
BigDecimal bdlFromInt = new BigDecimal(42);
BigDecimal bdFromLong = new BigDecimal(123412345678901L);
BigInteger bigInteger = BigInteger.probablePrime(100, new Random());
BigDecimal bdFromBigInteger = new BigDecimal(bigInteger);

các bạn cũng có thể tạo BigDecimal với double, nhưng hãy cẩn trọng, xem ví dụ sau:

BigDecimal bdFromDouble = new BigDecimal(0.1d);
System.out.println(bdFromDouble.toString()); // 0.1000000000000000055511151231257827021181583404541015625

Trên mình đã khởi tạo BigDecimal với giá trị là 0.1d, mong muốn BigDecimal của mình mang giá trị 0.1 thế nhưng kết quả lại khác hoàn toàn. Đó là vì 0.1 không có giá trị chính xác trong double, BigDecimal chỉ đơn giản là lấy giá trị sai của 0.1 trong double sang và tất nhiên là giá trị cũng sẽ bị sai.

Vì vậy các bạn nên sử dụng String để khởi tạo 1 giá trị double hoặc sử dụng BigDecimal.valueOf() để có giá trị chính xác như mong muốn.

BigDecimal bdFromLong1 = BigDecimal.valueOf(123412345678901L); // 123412345678901
        
BigDecimal bdFromLong2 = BigDecimal.valueOf(123412345678901L, 2); // 1234123456789.01
        
BigDecimal bdFromDouble = BigDecimal.valueOf(0.1d); // 0.1

Phép tính trong BigDecimal

BigDecimal cũng giống như các kiểu dữ liệu Number khác(Integer, Long, Double, etc) nó cung cấp đầy đủ các phép tính cộng, trừ, nhân, chia, so sánh, etc.

Kiểm tra các thành phần trong BigDecimal như unscaled, scale, sign.

int precision = bd.precision(); // 9
int scale = bd.scale(); // 4
int signum = bd.signum(); // -1

So sánh BigDecimal

compareTo()

Sử dụng compareTo() method để so sánh giữa BigDecimal với một BigDecimal khác. Method compareTo() trả về -1 nếu nhỏ hơn BigDecimal được so sánh, 0 nếu bằng và 1 nếu lớn hơn.

BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("1.00");
BigDecimal bd3 = new BigDecimal("2.0");
System.out.println(bd1.compareTo(bd2)); // 0
System.out.println(bd1.compareTo(bd3)); // -1
System.out.println(bd3.compareTo(bd1)); 1

Note: các bạn nhận thấy rằng compareTo() bỏ qua phần scale khi so sánh. 1.0 = 1.00

XI. Kiểu Dữ Liệu Enum Trong Java

Enum trong java là 1 kiểu dữ liệu đặc biệt của Java được sử dụng để định nghĩa các tập hợp các hằng số. Cụ thể hơn, Java enum là một kiểu đặc biệt của lớp trong java. Một enum có thể chứa các trường, phương thức và Constructor.

Nó có thể được dùng để định nghĩa các ngày trong tuần (SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY), các mùa trong năm (SPRING, SUMMER, FALL, WINTER), …

Enum trong java có thể được định nghĩa bên trong hoặc bên ngoài 1 lớp, vì nó tương tự như lớp trong java.

Ví dụ enum trong java: định nghĩa bên trong một lớp

package vn.viettuts.javaenum;
 
public class EnumExample1 {
    // define enum
    enum Season {
        SPRING, SUMMER, FALL, WINTER;
    }
 
    public static void main(String[] args) {
        Season season = Season.WINTER;
        System.out.println(season);
    }
}

Kết quả:

WINTER

Ví dụ enum trong java: định nghĩa bên ngoài một lớp

package vn.viettuts.javaenum;
 
// define enum
enum Season {
    SPRING, SUMMER, FALL, WINTER;
}
 
public class EnumExample2 {
    public static void main(String[] args) {
        Season season = Season.WINTER;
        System.out.println(season);
    }
}

Kết quả:

WINTER

Ví dụ enum trong java: định nghĩa trong một file riêng biệt

File Season.java

package vn.viettuts.javaenum;
 
public enum Season {
    SPRING, SUMMER, FALL, WINTER;
}

File EnumExample3.java

package vn.viettuts.javaenum;
 
public class EnumExample3 {
    public static void main(String[] args) {
        Season season = Season.WINTER;
        System.out.println(season);
    }
}

Kết quả:

WINTER

The post Các Kiểu Dữ Liệu Trong Java first appeared on Techacademy.

source https://techacademy.edu.vn/cac-kieu-du-lieu-trong-java/

Valueof Trong Java

I. Valueof Trong Java Là Gì

Phương thức này sẽ trả về đối tượng giữ giá trị của tham số đã truyền, ví dụ nhập giá trị “9” là 1 string, thì giá trị trả về sẽ là 1 đối tượng Integer nếu dùng Integer.valueOf(“9”).

II. Phương Thức ValueOf Trong Java String

Phương thức valueOf() được dùng để chuyển đối kiểu dữ liệu khác thành chuỗi. Bằng việc dùng phương thức valueOf(), các các bạn có thể chuyển int thành chuỗi, long thành chuỗi, boolean thành chuỗi, float thành chuỗi, double thành chuỗi, char thành chuỗi, mảng char thành chuỗi, đối tượng thành chuỗi.

Phương thức String valueOf() trong Java có những form sau, mà phụ thuộc vào những tham số đã truyền. Phương thức này trả về biểu diễn chuỗi của tham số đã truyền.

  • valueOf(boolean b): Trả về biểu diễn chuỗi của tham số boolean.
  • valueOf(char c): Trả về biểu diễn chuỗi của tham số char.
  • valueOf(char[] data): Trả về biểu diễn chuỗi của tham số char array.
  • valueOf(char[] data, int offset, int count): Trả về biểu diễn chuỗi của mảng phụ cụ thể của tham số char array.
  • valueOf(double d): Trả về biểu diễn chuỗi của tham số double.
  • valueOf(float f): Trả về biểu diễn chuỗi của tham số float.
  • valueOf(int i): Trả về biểu diễn chuỗi của tham số int.
  • valueOf(long l): Trả về biểu diễn chuỗi của tham số long.
  • valueOf(Object obj): Trả về biểu diễn chuỗi của tham số Object.

III. Cú pháp

Trên đây là cú pháp đơn giản của ValueOf() trong Java String:

public String trim()

IV. Ví Dụ Phương Thức ValueOf Trong Java String:

public class StringValueOfExample {
    public static void main(String args[]) {
        int value = 30;
        String s1 = String.valueOf(value);
        System.out.println(s1 + 10);
    }
}

Kết quả trả về:

3010

V. Khác Biệt Giữa ParseInt Và ValueOf Trong Java

Cả 2 phương thức valueOf và parseInt đều được dùng để chuyển đổi String thành Integer trong Java, nhưng giữa chúng vẫn có sự khác biệt. Nếu các bạn nhìn vào đoạn mã của phương thức valueOf() , các bạn sẽ thấy rằng bên trong nó gọi phương thức parseInt() để chuyển đổi String thành Integer.

Một sự khác biệt khác giữa phương thức parseInt() và valueOf() là kiểu trả về. ValueOf() của java.lang.Integer trả về một đối tượng Integer, trong khi phương thức parseInt() trả về một kiểu dữ liệu nguyên thủy int.

ParseInt và valueOf trong Java

– Nếu các bạn xem mã nguồn của phương thức parseInt() và valueOf() từ class java.lang.Integer, các bạn sẽ thấy rằng công việc thực tế của việc chuyển đổi Chuỗi thành số nguyên được thực hiện bằng phương thức parseInt(), valueOf() chỉ cung cấp bộ nhớ đệm của Integer được dùng thường xuyên Các đối tượng, Đây là đoạn mã từ phương thức valueOf() giúp mọi thứ rõ ràng:

public static Integer valueOf(String s) throws NumberFormatException {
    return Integer.valueOf(parseInt(s, 10));
}

Phương thức này trước tiên gọi phương thức parseInt(), để chuyển đổi String thành int nguyên thủy, sau đó tạo đối tượng Integer từ giá trị đó. các bạn có thể thấy bên trong nó duy trì bộ đệm Integer. Nếu int nguyên thủy nằm trong phạm vi của bộ đệm, nó trả về đối tượng Integer từ pool, nếu không nó sẽ tạo một đối tượng mới.

public static Integer valueOf(int i) {
    if (i >= -128 && i <= IntegerCache.high)
        return IntegerCache.cache[i + 128];
    else
        return new Integer(i);
}

Luôn luôn có sự nhầm lẫn, nên dùng parseInt() hay valueOf() để chuyển đổi String thành int nguyên thủy trong java và đối tượng java.lang.Integer. Tôi khuyên các bạn nên dùng parseInt() nếu các bạn cần int nguyên thủy và dùng valueOf() nếu các bạn cần đối tượng java.lang.Integer.

The post Valueof Trong Java first appeared on Techacademy.

source https://techacademy.edu.vn/valueof-trong-java/

Split Trong Java

Trong bài viết này chúng ta sẽ tìm hiểu về phương thức split() trong Java. Đây là một phương thức được sử dụng để tách chuỗi dựa trên một regex được chỉ định.

1. Split Trong Java Là Gì

Phương thức split() thường được dùng chung với ArrayList để tách những phần tử trong mảng và trả về một mảng các chuỗi con. Vì vậy bạn hãy khai báo thư viện đã nhé: import java.util.Arrays

2. Cú Pháp Phương Thức Split() Trong Java

Như đã nói ở trên thì phương thức split () chia chuỗi tại regex được chỉ định và trả về 1 mảng các chuỗi con.

Cú pháp:

string.split(String regex, int limit)

Trong đó:

  • regex – chuỗi được chia tại regex này (có thể là chuỗi).
  • limit (option): kiểm soát số lượng các chuỗi con kết quả. Nếu tham số limit không được truyền, hàm split () trả về tất cả những chuỗi con có thể có.

Hàm trả về 1 mảng các chuỗi con.

Ví dụ: ta dùng phương thức split() để tách chuỗi str dựa trên khoảng trắng.

1
2
//tách chuỗi str dựa trên khoảng trắng
str.split(" ");

3. Cách Dùng Phương Thức Split() Trong Java

Phương thức split() tách chuỗi này theo biểu thức chính quy(regular expression) sau đó trả về mảng chuỗi.

Phương thức:

public String split(String regex)
public String split(String regex, int limit)

4. Ví Dụ 1

Ở ví dụ này chúng tôi sẽ tách chuỗi vowels dựa trên “::”.

import java.util.Arrays;
class Main {
  public static void main(String[] args) {
    //khai báo một chuỗi vowels với nội dung là "a::b::c::d:e"
    String vowels = "a::b::c::d:e";
    //sử dụng phương thức split() để tách chuỗi vowels dựa trên "::"
    String[] result = vowels.split("::");
    //hiển thị kết quả sau khi tách ra màn hình
    System.out.println("Kết quả: " + Arrays.toString(result));
 
    System.out.println("--------------------------------");
    System.out.println("Chương trình này được đăng tại Frertuts.net");
  }

Kết quả là:

5. Ví Dụ 2

Tùy vào hoàn cảnh mà chúng ta dùng những phương thức cho hợp lý,tuy nhiên thông thường chúng ta sử dụng cấu trúc thứ 2 public String[] split(String regex),với regex là dấu mà chúng ta cần tách. Để hiểu rõ hơn mời bạn đọc xem ví dụ dưới đây về việc tách chuỗi thành mảng :

package action;

public class Demo {
   public static void main(String[] args) {
      String str1 = "itphutran.com";
      String[] arStr = str1.split("\\.");
      for (String item : arStr) {
         System.out.println(item);
      }
   }
}

Với ví dụ trên,chúng ta tách chuỗi dựa vào dấu chấm (.).Như vậy sau khi tách trả về mảng gồm 2 phần tử.

Kết quả đầu ra :

itphutran
com

6. Split Nhiều Ký Tự Trong Java

Để cắt chuỗi trong java ta có thể xử dụng 2 cách phổ biến là sử dụng phương thức split có sẵn trong class String hoặc dùng đối tượng StringTokenizer để xử lý.

Sử dụng phương thức string.spilt(regex) để cắt chuỗi với với ký tự định dạng vị trí cắt theo cú pháp regex

String phone = "012-3456789";
String[] output = phone.split("-");
System.out.println(output[0]);
System.out.println(output[1]);

Kết quả trả về

012
3456789

Chú ý: khi sử dụng regex để tìm vị trí cần cắt trong chuổi nếu ký tự regex này là các ký tự keyword đặc biệt thì chúng ta cần xử dụng ký tự đánh dấu “\\” trước ký tự đặc biệt, Trong ví dụ sau “.” là ký tự giữ vị trí cần cắt

import java.util.regex.Pattern;

public class TestSplit {

  public static void main(String[] args) {

    String test = "abc.def.123";
    String[] output = test.split("\\.");

    //alternative
    //String[] output = test.split(Pattern.quote("."));
    
    System.out.println(output[0]);
    System.out.println(output[1]);
    System.out.println(output[2]);
    
  }

}

Kết quả trả về

abc
def
123

Để kiểm tra logic xem chuỗi cần cắt có thể cắt hay không chúng ta sử dụng phương thức lấy số lượng phần tử trong mảng kết quả trả về, nếu length lớn hơn 0 thì chuổi có thể cắt và ngược lại. Bạn có thể xem bài viết “thao tác xử lý mảng” này để rõ hơn cách dùng.

import java.util.regex.Pattern;

public class TestSplit {

  public static void main(String[] args) {

    String test = "abc.def.123";
    if(test.contains(".")){
      String[] output = test.split("\\.");
      if(output.length!=3){
        throw new IllegalArgumentException(test + " - invalid format!");
      }else{
        System.out.println(output[0]);
        System.out.println(output[1]);
        System.out.println(output[2]);
      }
    }else{
      throw new IllegalArgumentException(test + " - invalid format!");
    }
    
  }

}

7. Phương Thức Split () Trong Java Không Hoạt Động Trên Dấu Chấm (.) [Trùng lặp]

Chúng tôi đã chuẩn bị 1 đoạn mã đơn giản để tách phần lỗi khỏi ứng dụng web của mình.

public class Main {

    public static void main(String[] args) throws IOException {
        System.out.print("\nEnter a string:->");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String temp = br.readLine();

        String words[] = temp.split(".");

        for (int i = 0; i < words.length; i++) {
            System.out.println(words[i] + "\n");
        }
    }
}

Chúng tôi đã thử nghiệm nó trong khi xây dựng 1 ứng dụng web JSF. Tôi chỉ muốn biết tại sao trong đoạn mã trên temp.split(“.”) không hoạt động. Tuyên bố,

System.out.println(words[i]+"\n"); 

không hiển thị gì trên bảng điều khiển có nghĩa là nó không đi qua vòng lặp. Khi chúng tôi thay đổi đối số của phương thức temp.split() thành các ký tự khác, nó hoạt động tốt như bình thường. Rắc rối có thể là cái gì?

Dấu chấm là 1 ký tự đặc biệt trong cú pháp biểu thức chính quy. Sử dụng Pattern.quote() trên tham số cần chia () nếu các bạn muốn phân tách nằm trên mẫu chuỗi ký tự:

String[] words = temp.split(Pattern.quote("."));

 

The post Split Trong Java first appeared on Techacademy.

source https://techacademy.edu.vn/split-trong-java/

Kiểu Date Trong Java

Date trong Java là 1 trong các class mô tả ngày tháng đầu tiên trong Java. Thật đáng tiếc là hầu hết các cách thức của nó đã lỗi thời, và thay vào đó là dùng các cách thức của java.util.Calendar. Nhưng bạn vẫn có thể dùng java.util.Date để mô tả ngày tháng.

1. Các Lớp Date, Time, Calendar Trong Java

Java cung cấp 1 số class liên quan tới thời gian và lịch (Calendar), sau đây là danh sách các class này:

Class Mô tả
java.util.Date 1 lớp đại diện cho ngày tháng năm và thời gian. Tiếc là hầu hết các cách thức của nó đã bị lỗi thời, khuyến cáo là không nên dùng các cách thức đó, tuy nhiên lớp Date vẫn được dùng rỗng rãi.
java.util.concurrent.TimeUnit TimeUnit là 1 Enum mô tả các đơn vị ngày tháng năm và thời gian.
java.sql.Date 1 lớp mô tả ngày tháng năm. Thông tin về thời gian bị cắt bỏ. Lớp này thường dùng trong JDBC.
java.sql.Time 1 lớp mô tả thời gian (Giờ phút giây, milli giây), và không chứa thông tin ngày tháng năm. Lớp này thường dùng trong JDBC.
java.sql.Timestamp 1 lớp mô tả ngày tháng năm và thời gian. Lớp này thường dùng trong JDBC.
java.util.Calendar Lớp mô tả bộ Lịch. Nó có các cách thức toán học về thời gian, chẳng hạn thêm ngày, bớt ngày,…
java.util.GregorianCalendar Là 1 lớp con trực tiếp của java.util.Calendar, mô tả ngày Dương Lịch, bộ lịch được dùng rộng rãi trên thế giới ngày nay. Nó có tất cả các method từ java.util.Calendar để thao tác toán học trên ngày tháng năm và thời gian.
java.util.TimeZone TimeZone là lớp mô tả múi giờ, nó có ích khi bạn làm việc với Lịch trên múi giờ.
java.text.SimpleDateFormat Lớp này giúp bạn chuyển 1 String có định dạng ngày tháng sang kiểu Date và ngược lại

2. System.currentTimeMillis()

CurrentTimeMillis() là 1 method tĩnh của class System. Kết quả trả về khoảng thời gian bằng mili giây tính từ ngày 1-1-1970 cho tới thời điểm hiện tại.

System.currentTimeMillis() thường được dùng để đo khoảng thời gian làm 1 việc gì đó bằng cách gọi method này trước khi bắt đầu công việc, và sau khi hoàn thành công việc.

JobTimeDemo.java

package org.o7planning.tutorial.dt;

public class JobTimeDemo {

   // Đây là cách thức tính tổng các số từ 1 tới 100.
   private static int sum() {
      int sum = 0;
      for (int i = 0; i <= 100; i++) {
         sum += i;
      }
      return sum;
   }

   private static void doJob(int count) {
      // Gọi cách thức 'sum' với số lần cho bởi tham số.
      for (int i = 0; i < count; i++) {
         sum();
      }
   }

   public static void main(String[] args) {
      long millis1 = System.currentTimeMillis();

      doJob(10000);

      long millis2 = System.currentTimeMillis();

      long distance = millis2 - millis1;

      System.out.println("Distance time in milli second: " + distance);
   }
}

Kết quả chạy ví dụ:

Distance time in milli second: 3

3. TimeUnit

TimeUnit là 1 Enum mô tả các đơn vị ngày tháng năm và thời gian. Nó cung cấp các phương pháp có sẵn để chuyển đổi thời gian qua các đơn vị thời gian. TimeUnit khá hữu ích để biết cách diễn giải 1 thời gian nhất định là đơn vị thời gian cần được xem xét. Sự khác biệt nhỏ giữa các khoảng thời gian như micro giây và nano giây có thể được tìm ra bằng cách sử dụng TimeUnit.

Nó hỗ trợ các đơn vị nano giây, micro giây, mili giây, giây, phút, giờ và ngày. Đối với các đơn vị này, TimeUnit chỉ định các hằng số enum tương ứng:

  • Nanoseconds: 1 phần nghìn của micro giây
  • Microseconds: 1 phần nghìn của mili giây
  • Mili giây: 1 phần nghìn giây
  • Giây: 1 giây
  • Phút: 60 giây
  • Giờ: 60 phút
  • Ngày: Hai mươi bốn giờ

Ví dụ 1:

// Java program to demonstrate TimeUnit Class
 
import java.util.concurrent.TimeUnit;
 
public class GFG {
    public static void main(String args[])
    {
        long hours = 96;
 
        // Convert given time (hours)in days
        long days = TimeUnit.DAYS.convert(hours, TimeUnit.HOURS);
 
        // Convert days in minutes
        long minutes = TimeUnit.MINUTES.convert(days, TimeUnit.DAYS);
 
        System.out.println(hours + " Hours = " + days
                           + " Days = " + +minutes
                           + " Minutes");
 
        // Convert given time (minutes) to microseconds
        long micros = TimeUnit.MINUTES.toMicros(minutes);
        System.out.println(minutes + " Minutes = " + micros
                           + " Microseconds");
 
        // Convert given time (microseconds) to seconds
        long seconds = TimeUnit.MICROSECONDS.toSeconds(micros);
        System.out.println(micros + " Microseconds = "
                           + seconds + " Seconds");
 
        // Create TimeUnit object of type Minutes
        TimeUnit time = TimeUnit.valueOf("MINUTES");
        System.out.println("TimeUnit object type: " + time);
    }
}

Kết quả:

96 Giờ = 4 Ngày = 5760 Phút
5760 Phút = 345600000000 Micro giây
345600000000 Microseconds = 345600 giây
Loại đối tượng TimeUnit: MINUTES

Ví dụ 1:

// Java program to demonstrate TimeUnit Class
 
import java.util.concurrent.TimeUnit;
 
public class GFG implements Runnable {
    public void run()
    {
        // Get array of TimeUnit enum constants using
        // values()
        for (TimeUnit unit : TimeUnit.values()) {
            try {
               
                // pause for 1 second
                TimeUnit.SECONDS.sleep(1);
            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
 
            System.out.println(
                unit + " : "
                + unit.convert(24, TimeUnit.HOURS));
        }
    }
    public static void main(String args[])
    {
        GFG obj1 = new GFG();
        System.out.println("TimeUnit Example");
       
        // Create and start Thread
        Thread t1 = new Thread(obj1);
        t1.start();
       
        System.out.println("Now, thread will run for 5 seconds");
        try {
           
            // Specify Thread join time, here, 5 seconds
            TimeUnit.SECONDS.timedJoin(t1, 5);
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
       
        System.out.println("Thread  Execution Paused");
        System.out.println("Resuming Thread Execution...");
    }
}

Kết quả:

Ví dụ về TimeUnit
Bây giờ, chuỗi sẽ chạy trong 5 giây
NANOSECONDS: 86400000000000
MICROSECONDS: 86400000000
TRIỆU GIÂY: 86400000
GIÂY: 86400
Thực thi chuỗi bị tạm dừng
Tiếp tục thực thi chuỗi ...
PHÚT: 14g40
GIỜ: 24
NGÀY: 1

4. Java.Util.Date

Lớp java.util.Date trong java biểu diễn ngày và giờ (date và time). Nó cung cấp các Constructor và cách thức để xử lý date và time trong java.

Lớp java.util.Date implements các giao diện Serializable, Cloneable and Comparable<Date>. Nó được kế thừa bởi các lớp java.sql.Date, java.sql.Time và java.sql.Timestamp.

Sau khi lớp Calendar ra đời, hầu hết các Constructor và cách thức của lớp java.util.Date đã bị khuyến cáo không nên sử dụng nữa (@deprecated).

Các Constructor của lớp java.util.Date trong java

No. Constructor Mô tả
1) Date() Tạo 1 đối tượng Date đại diện cho ngày tháng và thời gian hiện tại.
2) Date(long milliseconds) CTạo 1 đối tượng Date trong 1 mili giây cho trước kể từ ngày 1 tháng 1 năm 1970, 00:00:00 GMT.

Các cách thức của lớp java.util.Date trong java

No. cách thức Mô tả
1) boolean after(Date date) kiểm tra nếu ngày hiện tại là sau ngày đã cho.
2) boolean before(Date date) kiểm tra nếu ngày hiện tại là trước ngày đã cho.
3) Object clone() Trả về đối tượng nhân bản của ngày hiện tại.
4) int compareTo(Date date) So sánh ngày hiện tại với ngày đã cho.
5) boolean equals(Date date) So sánh ngày hiện tại với ngày đã cho.
6) static Date from(Instant instant) Trả về 1 thể hiện của đối tượng Date từ ngày Instant.
7) long getTime() Trả về thời gian được đại diện bởi đối tượng date.
8) int hashCode() Trả về giá trị mã băm cho đối tượng ngày này.
9) void setTime(long time) Thay đổi ngày hiện tại và thời gian cho thời gian đã cho.
10) Instant toInstant() Chuyển đổi date hiện tại thành đối tượng Instant.
11) String toString() Chuyển đổi date hiện tại thành chuỗi String.

Ví dụ về java.util.Date trong java

Dưới đây là ví dụ lấy date trong java và in ra màn hình:

package vn.viettuts.date;
 
import java.util.Date;
 
public class DateExample1 {
    public static void main(String[] args) {
        long miliSeconds = System.currentTimeMillis();
        // cach 1
        Date date1 = new Date();
        System.out.println(date1);
        // cach 2
        Date date2 = new Date(miliSeconds);
        System.out.println(date2);
    }
}

Kết quả:

Mon Sep 11 09:04:18 ICT 2017
Mon Sep 11 09:04:18 ICT 2017

5. Date, Time, Timestamp (java.sql)

java.sql có 3 class liên quan đến ngày tháng và thời gian:

  • java.sql.Date
  • java.sql.Time
  • java.sql.Timestamp

Cụ thể:

– java.sql.Date đại diện cho SQL DATE, lưu trữ năm, tháng và ngày mà không có thành phần thời gian. java.sql. Date đang bỏ qua múi giờ.

– java.sql.Time đại diện cho SQL TIME và chỉ chứa thông tin về giờ, phút, giây và mili giây mà không có thành phần ngày tháng.

– java.sql.Timestamp đại diện cho SQL TIMESTAMP chứa cả thông tin Ngày và Giờ với độ chính xác nano giây.

Những class trên tham gia vào trong PreparedStatement trong JDBC API, chẳng hạn các method setDate, setTime, setTimestamp. Hoặc có thể lấy ra từ ResultSet.

Hãy kiểm tra bảng sau đây đề cập đến 5 cơ sở dữ liệu hàng đầu (không theo thứ tự) các kiểu dữ liệu ngày giờ:

Cơ sở dữ liệu SQL DATE SQL TIME SQL TIMESTAMP Nguồn
MySQL / MariaDB NGÀY
DATETIME
THỜI GIAN TIMESTAMP Liên
kết Liên kết
PostgreSQL NGÀY GIỜ THỜI
GIAN VỚI KHU VỰC THỜI GIAN
TIMESTAMP
TIMESTAMP VỚI KHU VỰC THỜI GIAN
Liên kết
Oracle NGÀY TIMESTAMP
TIMESTAMP VỚI THỜI GIAN KHU VỰC THỜI GIAN
VỚI KHU VỰC GIỜ ĐỊA PHƯƠNG
Liên kết
Microsoft SQL Server DATE
SMALLDATETIME
DATETIME
DATETIME2
DATETIMEOFFSET
THỜI GIAN Liên kết
IBM Db2 NGÀY THỜI GIAN TIMESTAMP Liên kết

6. Java.Util.Calendar

Sơ lược về các bộ lịch:

Gregorian Calendar: Đây chính là Dương Lịch, còn gọi lịch Thiên chúa giáo, là lịch quốc tế. Nó được dùng rộng rãi nhất được đặt tên theo Đức Giáo Hoàng Gregory XIII, người đã giới thiệu nó vào năm 1582.

Buddhist Calendar: Đây là 1 bộ lịch phật giáo, thường được sử dụng tại một số nước Đông Nam Á trước kia như Thái Lan, Lào, Campuchia, cũng như Sri Lanka. Hiện nay lịch này được dùng trong các lễ hội phật giáo. Và không còn quốc gia nào sử dụng lịch này 1 cách chính thức, các quốc gia này đã đổi sang dùng Gregorian Calendar. Bạn có thể tham khảo thêm thông tin về lịch này tại:

Japanese Imperial Calendar: Đây là bộ lịch truyền thống của Nhật bản, hiện nay Nhật bản đã chuyển sang sử dụng dương lịch (Gregorian Calendar), tuy nhiên bộ lịch truyền thống vẫn được dùng 1 cách không chính thức.

Calendar là class mô phỏng một hệ thống Lịch. Lớp Calendar trong java là một lớp trừu tượng (abstract) cung cấp phương thức chuyển đổi ngày giữa 1 thời điểm cụ thể theo thời gian và 1 tập hợp các trường của calendar như MONTH, YEAR, HOUR, … Nó kế thừa lớp Object và implements giao diện Comparable.

Calendar có một vài class con:

  • GregorianCalendar
  • JapaneseImperialCalendar
  • BuddhistCalendar

Calendar là 1 class trừu tượng. Nghĩa là bạn không thể khởi tạo nó từ cấu tử (Constructor). Tuy nhiên có 2 method tĩnh để tạo ra đối tượng Calendar.

public static Calendar getInstance();

public static Calendar getInstance(TimeZone zone);

public static Calendar getInstance(Locale aLocale);

public static Calendar getInstance(TimeZone zone,Locale aLocale);

Ví dụ:

// Tạo đối tượng Calendar mô tả thời điểm hiện tại.
// Với Locale mặc định, và TimeZone (múi giờ) mặc định 
// (Của máy tính đang chạy).
Calendar c = Calendar.getInstance();

Khi bạn dùng Calendar.getInstance(TimeZone,Locale) sẽ nhận được trả về là 1 trong các class con nói trên. Mà hầu hết là trả về GregorianCalendar.

Gọi Calendar.getInstance() trả về đối tượng Calendar với tham số TimeZone theo máy tính của bạn và Locale mặc định.

Hãy xem code của class Calendar (JDK7):

Calendar (JDK7)

/**
* Gets a calendar using the default time zone and locale. The
* <code>Calendar</code> returned is based on the current time
* in the default time zone with the default locale.
*
* @return a Calendar.
*/
public static Calendar getInstance()
{
  Calendar cal = createCalendar(TimeZone.getDefaultRef(),
                                  Locale.getDefault(Locale.Category.FORMAT));
  cal.sharedZone = true;
  return cal;
}

/**
* Gets a calendar using the specified time zone and default locale.
* The <code>Calendar</code> returned is based on the current time
* in the given time zone with the default locale.
*
* @param zone the time zone to use
* @return a Calendar.
*/
public static Calendar getInstance(TimeZone zone)
{
  return createCalendar(zone, Locale.getDefault(Locale.Category.FORMAT));
}

/**
* Gets a calendar using the default time zone and specified locale.
* The <code>Calendar</code> returned is based on the current time
* in the default time zone with the given locale.
*
* @param aLocale the locale for the week data
* @return a Calendar.
*/
public static Calendar getInstance(Locale aLocale)
{
  Calendar cal = createCalendar(TimeZone.getDefaultRef(), aLocale);
  cal.sharedZone = true;
  return cal;
}

/**
* Gets a calendar with the specified time zone and locale.
* The <code>Calendar</code> returned is based on the current time
* in the given time zone with the given locale.
*
* @param zone the time zone to use
* @param aLocale the locale for the week data
* @return a Calendar.
*/
public static Calendar getInstance(TimeZone zone,
                                 Locale aLocale)
{
  return createCalendar(zone, aLocale);
}

private static Calendar createCalendar(TimeZone zone,
                                     Locale aLocale)
{
  Calendar cal = null;

  String caltype = aLocale.getUnicodeLocaleType("ca");
  if (caltype == null) {
      // Calendar type is not specified.
      // If the specified locale is a Thai locale,
      // returns a BuddhistCalendar instance.
      if ("th".equals(aLocale.getLanguage())
              && ("TH".equals(aLocale.getCountry()))) {
          cal = new BuddhistCalendar(zone, aLocale);
      } else {
          cal = new GregorianCalendar(zone, aLocale);
      }
  } else if (caltype.equals("japanese")) {
      cal = new JapaneseImperialCalendar(zone, aLocale);
  } else if (caltype.equals("buddhist")) {
      cal = new BuddhistCalendar(zone, aLocale);
  } else {
      // Unsupported calendar type.
      // Use Gregorian calendar as a fallback.
      cal = new GregorianCalendar(zone, aLocale);
  }

  return cal;
}

Một số method quan trọng:

Phương thức get(int) Giá trị trả về
get(Calendar.DAY_OF_WEEK) 1 (Calendar.SUNDAY) tới 7 (Calendar.SATURDAY).
get(Calendar.YEAR) Năm (year)
get(Calendar.MONTH) 0 (Calendar.JANUARY) tới 11 (Calendar.DECEMBER).
get(Calendar.DAY_OF_MONTH) 1 tới 31
get(Calendar.DATE) 1 tới 31
get(Calendar.HOUR_OF_DAY) 0 tới 23
get(Calendar.MINUTE) 0 tới 59
get(Calendar.SECOND) 0 tới 59
get(Calendar.MILLISECOND) 0 tới 999
get(Calendar.HOUR) 0 tới 11, được sử dụng cùng với Calendar.AM_PM.
get(Calendar.AM_PM) 0 (Calendar.AM) hoặc 1 (Calendar.PM).
get(Calendar.DAY_OF_WEEK_IN_MONTH) DAY_OF_MONTH 1 tới 7 luôn luôn tương ứng với DAY_OF_WEEK_IN_MONTH 1;

8 tới 14 tương ứng với DAY_OF_WEEK_IN_MONTH 2, …

get(Calendar.DAY_OF_YEAR) 1 tới 366
get(Calendar.ZONE_OFFSET) Giá trị GMT của múi giờ.
get(Calendar.ERA) Biểu thị AD (GregorianCalendar.AD), BC (GregorianCalendar.BC).

CalendarFieldsDemo.java

package org.o7planning.tutorial.calendar;

import java.util.Calendar;

public class CalendarFieldsDemo {

   public static void main(String[] args) {
      // Tạo một đối tượng Calendar (Lịch) mặc định.
      // Với time zone (múi giờ) và locale mặc định.
      Calendar c = Calendar.getInstance();
      int year = c.get(Calendar.YEAR);

      // Trả về giá trị từ 0 - 11
      int month = c.get(Calendar.MONTH);
      int day = c.get(Calendar.DAY_OF_MONTH);
      int hour = c.get(Calendar.HOUR_OF_DAY);
      int minute = c.get(Calendar.MINUTE);
      int second = c.get(Calendar.SECOND);
      int millis = c.get(Calendar.MILLISECOND);

      System.out.println("Year: " + year);
      System.out.println("Month: " + (month + 1));
      System.out.println("Day: " + day);
      System.out.println("Hour: " + hour);
      System.out.println("Minute: " + minute);
      System.out.println("Second: " + second);
      System.out.println("Minute: " + minute);
      System.out.println("Milli Second: " + millis);

   }

}

Kết quả chạy ví dụ:

Year: 2021
Month: 5
Day: 15
Hour: 20
Minute: 34
Second: 52
Minute: 34
Milli Second: 382

Một số method khác của Calendar:

void set(int calendarField, int value)
void set(int year, int month, int date)
void set(int year, int month, int date, int hour, int minute, int second)

// Thêm hoặc trừ một khoảng thời gian trên một trường (field) của Calendar.
// Dựa trên quy tắc của bộ Lịch.
void add(int field, int amount)

// Cuộn (lên/xuống) một trường (field) của Calendar. 
// roll(): Không làm ảnh hưởng tới các trường khác của Calendar.
void roll(int calendarField, boolean up)

// Cuộn lên (roll up) một trường của Calendar.
// roll(): Không làm ảnh hưởng tới các trường khác của Calendar.
void roll(int calendarField, int amount):

// Trả về đối tượng Date dựa trên giá trị của Calendar.
Date getTime()

void setTime(Date date)

// Trả về số mili giây của đối tượng Calendar này.
long getTimeInMills():

void setTimeInMillis(long millis)

void setTimeZone(TimeZone value)

CalendarDemo.java

package org.o7planning.tutorial.calendar;

import java.util.Calendar;

public class CalendarDemo {

   public static void showCalendar(Calendar c) {
      int year = c.get(Calendar.YEAR);

      // Trả về giá trị từ 0 - 11
      int month = c.get(Calendar.MONTH);
      int day = c.get(Calendar.DAY_OF_MONTH);
      int hour = c.get(Calendar.HOUR_OF_DAY);
      int minute = c.get(Calendar.MINUTE);
      int second = c.get(Calendar.SECOND);
      int millis = c.get(Calendar.MILLISECOND);

      System.out.println(" " + year + "-" + (month + 1) + "-" + day //
            + " " + hour + ":" + minute + ":" + second + " " + millis);
   }

   public static void main(String[] args) {
      // Tạo đối tượng Calendar, mô tả thời điểm hiện tại.
      // Với time zone (múi giờ) và locale mặc định.
      Calendar c = Calendar.getInstance();

      System.out.println("First calendar info");
      showCalendar(c);

      // roll(..): Cuộn một trường (field) của Calendar.
      // roll(..): Không làm thay đổi các trường khác.
      // Ví dụ: Cuộn lên thêm một giờ (boolean up = true)
      c.roll(Calendar.HOUR_OF_DAY, true);

      System.out.println("After roll 1 hour");
      showCalendar(c);

      // roll(..): Không làm thay đổi các trường khác của Calendar.
      // Cuộn xuống một giờ (boolean up = false)
      c.roll(Calendar.HOUR_OF_DAY, false);

      System.out.println("After roll -1 hour");
      showCalendar(c);

      // add(..): Có thể làm thay đổi các trường khác của Calendar.
      // Tăng thêm một giờ (boolean up = true)
      c.add(Calendar.HOUR_OF_DAY, 1);

      System.out.println("After add 1 hour");
      showCalendar(c);

      // roll(..): Không làm thay đổi các trường khác của Calendar.
      // Cuộn xuống 30 ngày.
      c.roll(Calendar.DAY_OF_MONTH, -30);

      System.out.println("After roll -30 day");
      showCalendar(c);

      // add(..): Có thể làm thay đổi các trường khác của Calendar.
      // Thêm 30 ngày.
      c.add(Calendar.DAY_OF_MONTH, 30);
      System.out.println("After add 30 day");
      showCalendar(c);

   }

}

Kết quả chạy ví dụ:

First calendar info
 2021-5-15 20:35:27 395
After roll 1 hour
 2021-5-15 21:35:27 395
After roll -1 hour
 2021-5-15 20:35:27 395
After add 1 hour
 2021-5-15 21:35:27 395
After roll -30 day
 2021-5-16 21:35:27 395
After add 30 day
 2021-6-15 21:35:27 395

7. Chuyển Đổi Kiểu Dữ Liệu Giữa Date Và Timestamp Trong Java

Date ở đây là class thuộc gói java.util

Timestamp là class thuộc gói java.sql

Các bạn cùng Techacademy tìm hiểu ví dụ sau đây để hiểu cách chuyển đổi cụ thể ra sao nhé.

Ví dụ Chuyển Date thành Timestamp và Timestamp thành Date

package com.ngockhuong;

import java.sql.Timestamp;
import java.util.Date;

public class DateToTimestamp {
   public static void main(String[] args) {
      // lấy ngày giờ hiện tại
      Date now = new Date();
      System.out.println(now);
      
      // chuyển Date sang Timestamp
      Timestamp timestamp = new Timestamp(now.getTime());
      System.out.println(timestamp);
      
      // chuyển Timestamp sang Date 
      Date last = new Date(timestamp.getTime());
      System.out.println(last);
   }
}

Kết quả:

Tue Feb 14 01:53:24 ICT 2017
2017-02-14 01:53:24.981
Tue Feb 14 01:53:24 ICT 2017

8. Chuyển Đổi Kiểu Dữ Liệu Giữa String Và Date Trong Java

Các bạn có thể chuyển đổi String thành Date trong java bằng cách sử dụng phương thức parse() của các lớp DateFormat và SimpleDateFormat. Để tìm hiểu sâu hơn về 2 khái niệm này, bạn có thể tham khảo lớp DateFormat và lớp SimpleDateFormat.

Ví dụ về chuyển đổi String thành Date trong java

Ví dụ 1:

import java.text.SimpleDateFormat;
import java.util.Date;
 
public class StringToDateExample1 {
    public static void main(String[] args) throws Exception {
        String sDate = "17/07/2017";
        Date date = new SimpleDateFormat("dd/MM/yyyy").parse(sDate);
        System.out.println(sDate + "\t" + date);
    }
}

Kết quả:

17/07/2017 Mon Jul 17 00:00:00 ICT 2017

Ví dụ 2: Các kiểu khác của chuyển đổi String thành Date trong java

import java.text.SimpleDateFormat;
import java.util.Date;
 
public class StringToDateExample2 {
    public static void main(String[] args) throws Exception {
        String sDate1 = "12/7/2017";
        String sDate2 = "12-07-2017";
        String sDate3 = "12/7/2017 13:30:50";
        String sDate4 = "12-07-2017 13:30:50";
        SimpleDateFormat formatter1 = new SimpleDateFormat("dd/MM/yyyy");
        SimpleDateFormat formatter2 = new SimpleDateFormat("dd-MM-yyyy");
        SimpleDateFormat formatter3 = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        SimpleDateFormat formatter4 = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
        Date date1 = formatter1.parse(sDate1);
        Date date2 = formatter2.parse(sDate2);
        Date date3 = formatter3.parse(sDate3);
        Date date4 = formatter4.parse(sDate4);
        System.out.println(sDate1 + "\t" + date1);
        System.out.println(sDate2 + "\t" + date2);
        System.out.println(sDate3 + "\t" + date3);
        System.out.println(sDate4 + "\t" + date4);
    }
}

Kết quả:

12/7/2017 Wed Jul 12 00:00:00 ICT 2017
12-07-2017 Wed Jul 12 00:00:00 ICT 2017
12/7/2017 13:30:50 Wed Jul 12 13:30:50 ICT 2017
12-07-2017 13:30:50 Wed Jul 12 13:30:50 ICT 2017

9. Tùy Biến Định Dạng Date, Time

Tùy biến định dạng Date. Hãy xem 1 số ví dụ định dạng và kết quả trả về.

Khuôn mẫu Kết quả
dd.MM.yy 30.06.09
yyyy.MM.dd G ‘at’ hh:mm:ss z 2009.06.30 AD at 08:29:36 PDT
EEE, MMM d, ”yy Tue, Jun 30, ’09
h:mm a 8:29 PM
H:mm 8:29
H:mm:ss:SSS 8:28:36:249
K:mm a,z 8:29 AM,PDT
yyyy.MMMMM.dd GGG hh:mm aaa 2009.June.30 AD 08:29 AM

Tham khảo bảng sau đây cho một số ngày và thời gian phổ biến được dùng trong java.text.SimpleDateFormat

Ký hiệu Ý nghĩa Trả về Example
G Kỷ nguyên Text AD
y Năm Number 2009
M Tháng trong năm Text & Number July & 07
d Ngày trong tháng Number 10
h Giờ am/pm (1-12) Number 12
H Giờ trong ngày (0-23) Number 0
m Phút trong giờ Number 30
s Giây trong phút Number 55
S millisecond Number 978
E Ngày trong tuần Text Tuesday
D Ngày trong năm Number 189
F Ngày của tuần trong tháng Number 2 (2nd Wed in July)
w Tuần trong năm Number 27
W Tuần trong tháng Number 2
a am/pm Text PM
k Giờ trong ngày (1-24) Number 24
K Giờ am/pm (0-11) Number 0
z Múi giờ (time zone) Text Pacific Standard Time
escape for text Delimiter (none)
single quote Literal

10. Kiểu Ngày Tháng Trong Java

Dưới đây là 1 số lớp hỗ trợ kiểu dữ liệu ngày giờ:

  • java.util.Date: Một lớp đại diện cho ngày tháng năm và thời gian. Tiếc là hầu hết các phương thức của nó đã bị lỗi thời, khuyến cáo là không nên sử dụng các phương thức đó, tuy nhiên lớp Date vẫn được sử dụng rỗng rãi.
  • java.sql.Date: Một lớp mô tả ngày tháng năm. Thông tin về thời gian bị cắt bỏ. Lớp này thường sử dụng trong JDBC.
  • java.util.Calendar: Lớp mô tả bộ Lịch. Nó có các phương thức toán học về thời gian, chẳng hạn thêm ngày, bớt ngày,…
  • java.time.*: Lớp này cung cấp đầy đủ các API xử lý ngày giờ trong Java. Đây là lớp mới được hỗ trợ từ Java 8.

11. Ép Kiểu Date Sang  String Trong Java

Các bạn cũng có thể dùng hàm String() hoặc phương thức toString()

String(Date())  // Trả về "Thu Jul 17 2021 15:38:19 GMT+0200 (W. Europe Daylight Time)"

Dùng toString() cũng cho kết quả tương tự.

Date().toString()  // Trả về "Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)"

12. Khai Báo Date Trong Java

Cú pháp khai báo date đơn giản như sau:

new Date(...);

 

The post Kiểu Date Trong Java first appeared on Techacademy.

source https://techacademy.edu.vn/kieu-date-trong-java/

Căn Bậc 2 Trong Java

Trước khi thảo luận về mã căn bậc hai trong java, trước tiên chúng ta nên hiểu thuật ngữ căn bậc hai.

Căn bậc hai của một số n là một số x sao cho x2 = n hoặc, một số x có bình phương là n.

Ngoài ra còn có một phương thức dựng sẵn trong java để tính căn bậc hai trong gói java.math có phương thức sqrt ().

Căn bậc hai của x là hợp lý khi và chỉ khi x là số hữu tỷ có thể được biểu diễn dưới dạng tỷ lệ của hai hình vuông hoàn hảo. (căn bậc hai của 2 là một số vô tỷ và bất phương trình bậc hai cho tất cả các số tự nhiên không vuông.) Hàm căn bậc hai ánh xạ các số hữu tỷ thành các số đại số (một siêu số của các số hữu tỷ).

I. Cú Pháp Hàm Sqrt() Trong Thư Viện Math Java

Trước tiên các bạn sẽ tìm hiểu về cú pháp của nó đã nhé.

double sqrt(double d)

Tham số

Dưới đây là chi tiết về tham số của sqrt() trong Java:

d — Một kiểu dữ liệu gốc

Trả về giá trị

Trả về căn bậc 2 của tham số.

II. Cách Dùng Hàm Sqrt() Trong Thư Viện Math Java

Trong phần này chúng tôi sẽ thực hiện 2 ví dụ sử dụng phương thức sqrt() để minh họa cho cách dùng của nó.

Ví dụ 1: Ở ví dụ dưới đây mình sẽ khai báo và khởi tạo sẵn giá trị cho biến, sau đó tính căn bậc hai của các số đó.

import java.lang.Math;
class Main {
  public static void main(String[] args) {
    //khai báo 4 biến và khởi tạo cho nó
    double value1 = Double.POSITIVE_INFINITY;
    double value2 = 25.0;
    double value3 = -16;
    double value4 = 0.0;
    //sử dụng phương thức sqrt() để tính căn bậc hai của 4 số trên
    System.out.println(Math.sqrt(value1));  
    System.out.println(Math.sqrt(value2));  
    System.out.println(Math.sqrt(value3));  
    System.out.println(Math.sqrt(value4));  
 
    System.out.println("--------------------------------");
    System.out.println("Chương trình này được đăng tại Freetuts.net");
  }
}

Kết quả:

Ví dụ 2: Ở ví dụ dưới đây chúng tôi sẽ yêu cầu người dùng nhập vào một số, sau đó tính căn bậc 2 rồi hiển thị ra màn hình.

import java.lang.Math;
import java.util.Scanner;
class Main {
  public static void main(String[] args) {
    //sử dụng class Scanner để yêu cầu người dùng nhập vào số cần tính căn bậc hai
    Scanner sc = new Scanner(System.in);
    double a, squareRoot;
    System.out.println("Nhập vào số cần tính căn bậc hai: ");
    a = sc.nextDouble();
    //tính căn bậc hai của số nhập vào rồi gán cho biến squareRoot
    squareRoot = Math.sqrt(a);
    System.out.println("Căn bậc hai của "+a+" là: " + squareRoot);
 
    System.out.println("--------------------------------");
    System.out.println("Chương trình này được đăng tại Freetuts.net");
  }
}

Trong ví dụ  dưới đây chúng tôi sẽ sử dụng class Scanner, để nhận dữ liệu từ người dùng rồi mới thực hiện tính căn bậc 2 của giá trị đó.

Kết quả:

 

III. Tính Căn Bậc 2 Từ 1 Đến 100 Trong Java

Đề bài: Viết chương trình dùng ngôn ngữ lập trình Java tính S = √1 + √2 + √3 + … + √100′

Yêu cầu kiến thức:

  • Xác định chính xác kiểu dữ liệu cho các biến
  • Sử dụng hàm căn bậc 2 trong thư viện Math của Java

Code tham khảo dưới đây được viết trên JDK 8.x:

package timoday;

public class Main {

    public static void main(String[] args) {
        double S = 0;
        for (int i = 1; i <= 100; i++) {
            S += Math.sqrt(i);
        }
        System.out.println("Tong can bac 2 tu 1 den 100 la: " + S);
    }
}

IV. Giải Phương Trình Bậc 2 Trong Java

Viết chương trình giải phương trình bậc 2 trong java. Phương trình bậc 2 có dạng:

ax2 + bx + c = 0

Kiến thức dùng trong bài này, java.util.Scanner được dùng để đọc dữ liệu nhập vào từ bàn phím và từ khóa static trong java. Các bạn cũng cần tìm hiểu về package trong java.

Bài này được viết trên eclipse, bạn có thể tham khảo bài tạo chương trình java đầu tiên trên eclipse.

package vn.viettuts.baitap;
 
import java.util.Scanner;
 
/**
 * Giải phương trình bậc 2
 * 
 * @author viettuts.vn
 */
public class BaiTap1 {
    private static Scanner scanner = new Scanner(System.in);
    /**
     * main
     * 
     * @param args
     */
    public static void main(String[] args) {
        System.out.print("Nhập hệ số bậc 2, a = ");
        float a = BaiTap1.scanner.nextFloat();
        System.out.print("Nhập hệ số bậc 1, b = ");
        float b = BaiTap1.scanner.nextFloat();
        System.out.print("Nhập hằng số tự do, c = ");
        float c = scanner.nextFloat();
        BaiTap1.giaiPTBac2(a, b, c);
    }
     
    /**
     * Giải phương trình bậc 2: ax2 + bx + c = 0
     * 
     * @param a: hệ số bậc 2
     * @param b: hệ số bậc 1
     * @param c: số hạng tự do
     */
    public static void giaiPTBac2(float a, float b, float c) {
        // kiểm tra các hệ số
        if (a == 0) {
            if (b == 0) {
                System.out.println("Phương trình vô nghiệm!");
            } else {
                System.out.println("Phương trình có một nghiệm: "
                        + "x = " + (-c / b));
            }
            return;
        }
        // tính delta
        float delta = b*b - 4*a*c;
        float x1;
        float x2;
        // tính nghiệm
        if (delta > 0) {
            x1 = (float) ((-b + Math.sqrt(delta)) / (2*a));
            x2 = (float) ((-b - Math.sqrt(delta)) / (2*a));
            System.out.println("Phương trình có 2 nghiệm là: "
                    + "x1 = " + x1 + " và x2 = " + x2);
        } else if (delta == 0) {
            x1 = (-b / (2 * a));
            System.out.println("Phương trình có nghiệm kép: "
                    + "x1 = x2 = " + x1);
        } else {
            System.out.println("Phương trình vô nghiệm!");
        }
    }
}

Kết quả:

Nhập hệ số bậc 2, a = 2
Nhập hệ số bậc 1, b = 1
Nhập hằng số tự do, c = -1
Phương trình có 2 nghiệm là: x1 = 0.5 và x2 = -1.0

Trong ví dụ trên, phương thức Math.sqrt(double a) được dùng để tính căn bậc 2 của a.

The post Căn Bậc 2 Trong Java first appeared on Techacademy.

source https://techacademy.edu.vn/can-bac-2-trong-java/

Kế Thừa Trong Java

Kế thừa trong Java là 1 trong những tính năng quan trọng nhất của hệ thống lập trình hướng đối tượng (OOP). Chúng ta đã thấy tổng quan về kế thừa trong hướng dẫn trước của Các khái niệm OOP trong Java. Trong hướng dẫn này, chúng ta sẽ hiểu chi tiết về kế thừa trong Java và kiểu của nó với nhiều ví dụ khác nhau.

Kế thừa trong Java là 1 tính năng giúp dùng lại các phương thức và biến của 1 lớp này trong 1 lớp khác. Nói cách khác, nó cho phép 1 lớp mới kế thừa các thuộc tính và chức năng của 1 lớp hiện có mà không cần viết lại mã. Nó thực hiện Cha mẹ và con mối quan hệ. Điều này có nghĩa là lớp con có thể dùng lại trực tiếp các biến và hàm của lớp cha.

I. Tại Sao Dùng Tính Kế Thừa Trong Java?

Tính kế thừa trong Java là môt kỹ thuật mà trong đấy 1 đối tượng thu được hầu hết thuộc tính và hành vi của đối tượng cha. Ý tưởng đằng sau tính kế thừa trong Java là các các bạn có thể tạo các lớp mới mà được xây dựng dựa trên các lớp đang tồn tại.

Khi các các bạn kế thừa từ 1 lớp đang tồn tại, các các bạn có thể tái dùng các phương thức và các trường của lớp cha, và các các bạn cũng có thể bổ sung thêm các phương thức và các trường khác. Tính kế thừa biểu diễn mối quan hệ IS-A, còn được gọi là mối quan hệ cha-con.

Có 1 số lý do vì sao nên dùng kế thừa trong lập trình Java:

– Khả năng thể hiện các mối quan hệ kế thừa đảm bảo sự gần gũi với các mô hình trong thế giới thực.

– 1 lý do khác là khả năng tái dùng. Khi dùng tính kế thừa ta có thể lấy 1 lớp mới từ 1 lớp hiện có và thêm tính năng mới vào nó mà không cần sửa đổi lớp cha và viết lại lớp cha để kế thừa nó.

– 1 lý do khác là tính chất bắc cầu. Nếu lớp 1 kế thừa các thuộc tính từ 1 lớp B, sau đấy hầu hết các lớp con của A sẽ tự động kế thừa từ B. Tính chất này được gọi là tính chất bắc cầu của kế thừa.

II. Cú Pháp Của Tính Kế Thừa Trong Java

Mọi người đã biết rằng để kế thừa 1 lớp, chúng ta dùng từ khóa expand. Cú pháp của việc dùng kế thừa trong Java chính là:

class ten_lop_con extends ten_lop_cha {
  //cac phuong thuc va cac truong  
}

Từ khóa extends chỉ rằng bạn đang tạo 1 lớp mới mà kế thừa từ 1 lớp đang tồn tại. Trong Java, 1 lớp mà được kế thừa được gọi là 1 lớp cha. Lớp mới được gọi là lớp con.

Trong ví dụ sau, Programmer là lớp con và Employee là lớp cha. Mối quan hệ giữa hai lớp là Programmer IS-A Employee. Nghĩa là Programmer là 1 kiểu của Employee.

class Employee {
  float salary = 40000;
}
class Programmer extends Employee {
  int bonus = 10000;
  public static void main(String args[]) {
    Programmer p = new Programmer();
    System.out.println("Luong Lap trinh vien la:" + p.salary);
    System.out.println("Bonus cua Lap trinh vien la:" + p.bonus);
  }
}

Ở trên, đối tượng Programmer có thể truy cập trường của riêng lớp nó cũng như của lớp Employee, đấy là ví dụ cho tính tái dùng.

III. Các Loại Kế Thừa Trong Java

Có 5 kiểu kế thừa trong Java đấy là đơn kế thừa, Đa kế thừa, Kế thừa đa cấp, Kế thừa phân cấp, Kế thừa lai

Khi 1 class được kế thừa từ nhiều class đươc gọi là đa kế thừa. Trong Java, đa kế thừa chỉ được support thông qua interface, như đã được nói đến trong bài interface trong Java

1. Đơn kế thừa (Single Inheritance):

Đơn kế thừa: nghĩa là 1 lớp chỉ được kế thừa từ đúng 1 lớp khác. Hay nói cách khác, lớp con chỉ có duy nhất 1 lớp cha.

Cú pháp khai báo đơn kế thừa:

class lopcon : phamvidulieu lopcha
{
  // nội dung lớp con
};

dưới đây là 1 ví dụ:

#include <iostream>
using namespace std;
 
// Lớp cha
class Mayvitinh
{
public:
    Mayvitinh()
    {
        cout << "This is a computer" << endl;
    }
};
 
// Lớp con kế thừa từ lớp cha
class mayAcer : public Mayvitinh
{
};
 
// main function
int main()
{
    mayAcer may1;
    return 0;

Chương trình sẽ cho kết quả:

2. Đa kế thừa (Multiple Inheritance):

Đa kế thừa là 1 tính năng của ngôn ngữ C++. Trong đấy 1 lớp có thể kế thừa từ nhiều hơn 1 lớp khác. Nghĩa là 1 lớp con được kế thừa từ nhiều hơn 1 lớp cơ sở.

Cú pháp khai báo đa kế thừa:

class lopcon : phamvitruycap lopcha1, phamvitruycap lopcha2, ....
{
  // nội dung của lớp con
};

Ở đây, các lớp cơ sở sẽ được phân tách bằng dấu phẩy , và phạm vi truy cập cho mọi lớp cơ sở phải được chỉ định.

Chúng ta cùng xem ví dụ sau:

#include <iostream>
using namespace std;
 
// Lớp cơ sở thứ nhất
class Mayvitinh
{
public:
    Mayvitinh()
    {
        cout << "This is a computer's brand" << endl;
    }
};

// Lớp cơ sở thứ hai
class Maylaptop
{
public:
    Maylaptop()
    {
        cout << "This is a laptop's brand" << endl;
    }
};
 
// Lớp con kế thừa từ 2 lớp cha
class mayAcer : public Mayvitinh, public Maylaptop
{
};
 
// main function
int main()
{
    mayAcer may1;
    return 0;
}

Sau khi chạy ta sẽ có kết quả sau:

3. Kế thừa đa cấp (Multilevel Inheritance):

Kế thừa đa cấp: Trong kiểu thừa kế này, 1 lớp dẫn xuất được tạo từ 1 lớp dẫn xuất khác.

Ví dụ về kế thừa đa cấp:

#include <iostream>
using namespace std;
 
// Lớp cha
class Mayvitinh
{
public:
    Mayvitinh()
    {
        cout << "This is a computer's brand" << endl;
    }
};

// Lớp con kế thừa từ lớp cha
class Maylaptop : public Mayvitinh
{
public:
    Maylaptop()
    {
        cout << "This is a laptop's brand" << endl;
    }
};
 
// Lớp con kế thừa từ lớp cha thứ 2
class mayAcer : public Maylaptop
{
public:
     mayAcer(){
         cout << "This brand is Acer" << endl;
     }
};
 
// main function
int main()
{
    mayAcer may1;
    return 0;
}

Sau khi chạy ta có kết quả:

4. Kế thừa phân cấp (Hierarchical Inheritance):

Kế thừa phân cấp: Trong kiểu thừa kế này, sẽ có nhiều hơn 1 lớp con được kế thừa từ 1 lớp cha duy nhất.

Chúng ta có ví dụ:

#include <iostream>
using namespace std;
 
// Lớp cha
class Mayvitinh
{
public:
    Mayvitinh()
    {
        cout << "This is a computer's brand" << endl;
    }
};

// Lớp con thứ nhất
class mayAsus : public Mayvitinh
{
};
 
// Lớp con thứ hai
class mayAcer : public Mayvitinh
{
};
 
// main function
int main()
{
    mayAcer may1;
    mayAsus may2;
    return 0;
}

Sau khi chạy ta có kết quả:

5. Kế thừa lai (Kế thừa ảo) – Hybrid (Virtual) Inheritance:

Kế thừa lai (Kế thừa ảo): được thực hiện bằng cách kết hợp nhiều hơn 1 loại thừa kế.

Chúng ta lấy ví dụ về sự kết hợp của phân cấp và đa kế thừa dưới đây:

#include <iostream>
using namespace std;
 
// Lớp cha
class Mayvitinh
{
public:
    Mayvitinh()
    {
        cout << "This is a computer's brand" << endl;
    }
};

// Lớp cha
class Maylaptop
{
public:
    Maylaptop()
    {
        cout << "This is a laptop's brand" << endl;
    }
};
 
// Lớp con thứ nhất
class mayAcer : public Mayvitinh
{
};

// Lớp con thứ hai
class mayAsus : public Mayvitinh, public Maylaptop
{
};
 
// main function
int main()
{
    mayAsus may1; 
    mayAcer may2;
    return 0;
}

Sau khi chạy ta có kết quả:

IV. Từ Khóa Instanceof Trong Java

Trong bài viết này, các bạn sẽ tìm hiểu về toán tử Instanceof Java 1 cách chi tiết với sự trợ giúp của các ví dụ.

Trong Java, từ khóa Instanceof là 1 toán tử nhị phân. Nó được dùng để kiểm tra xem 1 đối tượng có phải là 1 Instance của 1 class cụ thể hay không.

Toán tử cũng kiểm tra xem 1 đối tượng có phải là 1 Instance của 1 class thực hiện 1 giao diện(interface) hay không (sẽ được thảo luận sau trong bài hướng dẫn này).

Cú pháp của toán tử Instanceof là:

result = objectName Instanceof className;

Toán hạng bên trái của toán tử Instanceof là tên đối tượng và toán hạng bên phải là tên class. Kết quả sẽ true nếu 1 đối tượng là 1 Instance của 1 class và sẽ là false nếu nó không phải.

Ví dụ 1: Toán tử Instanceof

/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

class Main {
    public static void main (String[] args) {
        String name = "Programiz";
        Integer age = 22;

        System.out.println("Is name an Instance of String: "+ (name Instanceof String));
        System.out.println("Is age an Instance of Integer: "+ (age Instanceof Integer));
    }
}

Khi chúng ta chạy chương trình, kết quả sẽ là:

Is name an Instance of String: true
Is age an Instance of Integer: true

Trong ví dụ trên, chúng ta đã tạo đối tượng name của kiểu String và 1 đối tượng khác là age của kiểu Integer. Sau đấy, chúng ta đã dùng toán tử Instanceof để kiểm tra xem liệu rằng đối tượng name có thuộc kiểu String và đối tượng age có thuộc kiểu Integer hay không.

dùng toán tử Instanceof trong tính kế thừa

Vơi tính thừa kế, toán tử Instanceof được dùng để kiểm tra xem liệu rằng 1 đối tượng của subclass có phải cũng là 1 toán tử Instanceof của siêu class hay là không.

Ví dụ 2: Instanceof trong kế thừa

/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

class Animal {
}

// Dog class is a subclass of Animal
class Dog extends Animal {
}

class Main {
    public static void main(String[] args){
        Dog d1 = new Dog();

        // checks if d1 is an object of Dog
        System.out.println("Is d1 an Instance of Dog: "+ (d1 Instanceof Dog));
       
        // checks if d1 is an object of Animal
        System.out.println("Is d1 an Instance of Animal: "+ (d1 Instanceof Animal));
    }
}

Khi chúng ta chạy chương trình, kết quả sẽ là:

Is d1 is an Instance of Dog: true
Is d1 an Instance of Animal: true

Trong ví dụ trên, d1 là 1 Instance của cả class Dog và Animal. Do đấy, cả d1 Instanceof Dog và d1 Instanceof Animal trả về kết quả là true .

V. Quan hệ HAS-A Trong Java

Nếu 1 class có tham chiếu đến 1 thực thể khác, được gọi là quan hệ HAS – A.

Ví dụ Chúng ta có class Student, 1 Student cần có các thông tin như id, name, email, etc. Và thực thể Address chứa các thông tin city, country, zipcode etc.

// File Student.java
public class Student {
    String id;
    String name;
    Address address;
}
// File Address.java
public class Address {
    String city;
    String country;
    String zipcode;
}

Class Student tham chiếu đến Address là 1 thực thể, chúng ta có thể phát biểu như sau: Student có quan hệ HAS – A Address.

Mục đích dùng HAS – A

Ở ví dụ trên, các bạn hoàn toàn có thể gộp các thuộc tính địa chỉ vào class Student như sau.

// File Student.java
public class Student {
    String id;
    String name;
    String city;
    String country;
    String zipcode;
}

Với cách làm trên của chúng ta là hoàn toàn ổn. Sau đấy ứng dụng mở rộng chúng ta có thêm class Employee cũng cần dùng đến địa chỉ. Nếu như làm theo cách trên thì chúng ta phải duplicate các thuộc tính address cho Employee. Làm như vậy thì code sẽ trở nên dài dòng, giảm tính reused code của project.

Vậy nên chúng ta cần dùng HAS – A để tăng tính tái dùng code. Định nghĩa Address ra 1 class riêng, và Student, Employee đều tham chiếu đến Address.

Khi nào nên dùng HAS -A

Như đã bàn luận ở trên, dùng HAS – A làm tăng tính tái dùng code. Khi các bạn thấy giữa các class có các thông tin chung giống hệt nhau thì ta nên tách nhỏ nó ra thành 1 class khác bao gồm những thuộc tính chung.

Các bạn đừng nhầm lẫn HAS – A với IS – A(thừa kế) nha. Thừa kế là 1 khái niệm mà các class con dùng lại các thuộc tính và method của class cha có sẵn. HAS – A là đặt những điểm chung ra riêng 1 class và import vào các class khác để dùng.

Ví dụ

Address.java

// File Address.java
public class Address {
    String city;
    String country;
    String zipcode;
    public Address(String city, String country, String zipcode) {
        this.city = city;
        this.country = country;
        this.zipcode = zipcode;
    }
}

Student.java

// File Student.java
public class Student {
    int id;
    String name;
    Address address;
    Student(int id, String name, Address address) {
        this.id = id;
        this.name = name;
        this.address = address;
    }
    void display() {
        System.out.println("ID: " + id);
        System.out.println("Name: " + name);
        System.out.println("Address: " + address.city + " " + address.country + " " + address.zipcode);
    }
}
// File Main.java
public class Main {
    public static void main(String[] args) {
        Address address = new Address("HCM", "VN", 11000);
        Student student = new Student(1, "Hai", address);
        student.display();
    }
}

Output:

ID: 1
Name: Hai
Address: HCM VN 11000

VI. Bài Tập Kế Thừa Trong Java Có Lời Giải

Tạo 1 lớp Person lưu trữ các thông tin dưới đây ( Tên, giới tính, địa chỉ,ngay sinh)

Tạo 1 lớp Student kế thừa từ lớp person lưu trữ các thông tin như dưới đây:

Mã sinh viên,điểm trung bình, email

Viết 1 phương thức nhập thông tin của student

Viết 1 phương thức hiện thị thông tin của student

Viết phương trình xem xét có sinh viên nào được học bổng không? điểm trung bình hơn 8.0 sẽ được hổng bổng

Khai báo class parent Person

class Person{
   protected String name;
   protected String sex;
   protected String adrress;
   protected String ngaysinh;
      public void intputPerson(){
      Scanner scanner = new Scanner(System.in);
      System.out.println("Nhap Ten :");
      this.name = scanner.nextLine();
      System.out.println("Nhap gioi tinh");
      this.sex = scanner.nextLine();
      System.out.println("Nhap dia chi");
      this.adrress = scanner.nextLine();
      System.out.println("Nhap ngay sinh");
      this.ngaysinh = scanner.nextLine();
   }
   public void showPerson(){
      System.out.println("Ho Ten : " +this.name + " Gioi Tinh : " +this.sex +" Dia chi : " +this.adrress +" Ngay sinh : " +this.ngaysinh);
   }
   }

Trong đấy:

Có 4 biến bao gồm ( ten,gioitinh,diachi,ngaysing) và có 2 phương thức:

intputPerson : Là phương thức nhập thông tin

showPerson : Xuất hiện thông tin

Tiếp thep khai báo 1 lớp student được kế thừa từ lớp Person

class Student extends Person{
   protected String masv;
   protected float diemtrungbinh;
   protected String email;
   public void intPutStudent(){
         Scanner input = new Scanner(System.in);
      System.out.println("Nhap ma sinh vien");
      this.masv = input.nextLine();
      System.out.println("Nhap diem trung binh");
      this.diemtrungbinh = input.nextFloat();
      System.out.println("Nhap email");
      this.email = input.nextLine();
   }
   public void showStudent(){
      System.out.println("Ma sinh vien : " +this.masv +" Diem trung binh " + this.diemtrungbinh);
   }
   public void kiemtrahocbong(){
      if(this.diemtrungbinh >=8){
         System.out.println("Duoc hoc bong");
      }else{
         System.out.println("Khong duoc hoc bong");
      }
   }
}

Lớp Person có 3 biến cần lưu trữ,và 3 phương thức java

intPutStudent : Nhập thông tin của sinh viên đấy.

showStudent : Xuất thông tin của sinh viên

kiemtrahocbong : Phương thức kiểm tra học bổng

Hàm khởi tạo để thực hiện chương trình như sau:

ublic class BT1 {
   public static void main(String []args){
      Student person = new Student();
      person.intputPerson();
      person.intPutStudent();
      person.showPerson();
      person.showStudent();
      person.kiemtrahocbong();
   }
}

Kết quả:

VII. Đa Kế Thừa Trong Java

Nếu 1 lớp triển khai đa kế thừa, hoặc 1 Interface kế thừa từ nhiều Interface thì đó là đa kế thừa.

Trong Java, 1 lớp chỉ được thừa kế (extends) từ 1 lớp, có thể cài đặt (implements) nhiều interface. Tuy nhiên, 1 interface có thể thừa kế (extends) nhiều interface.

1 interface không thể cài đặt (implements) interface khác, do interface không phần cài đặt, chỉ chứa các khai báo.

Ví dụ 1 lớp cài đặt (implements) nhiều interface:

public interface Shape {    
    void draw();    
}
 
public interface Color {
    String getColor();
}
 
public class Rectangle implements Shape, Color {
 
    @Override
    public void draw() {
        System.out.println("Draw " + this.getColor() + " rectangle");
    }
 
    @Override
    public String getColor() {
        return "red";
    }
     
}

Ví dụ interface kế thừa (extend) nhiều interface:

public interface Shape {    
    void draw();    
}
 
public interface Color {
    String getColor();
}
 
public interface ShapeColor extends Shape, Color {
 
}
 
public class Circle implements ShapeColor {
 
    @Override
    public void draw() {
        System.out.println("Draw " + this.getColor() + " circle");
    }
 
    @Override
    public String getColor() {
        return "red";
    }
     
}

Câu hỏi: Đa kế thừa không được hỗ trợ thông qua lớp trong Java nhưng là có thể bởi Interface, vì sao?

Như đã giới thiệu, kế thừa không được hỗ trợ thông qua lớp. Nhưng nó được hỗ trợ bởi Interface bởi vì không có tính lưỡng nghĩa khi trình triển khai được cung cấp bởi lớp Implementation.

Ví dụ đa thừa kế với Interface

public interface Printable {  
    void print();  
} 
  
public interface Showable {  
    void print();  
}  
    
public class InterfaceDemo implements Printable, Showable {  
    public void print() {
        System.out.println("Welcome to gpcoder.com");
    }  
 
    public static void main(String args[]) {  
        InterfaceDemo obj = new InterfaceDemo();  
        obj.print();  
    }  
}

Trong ví dụ trên, interface Printable và Showable có cùng các phương thức print() nhưng trình triển khai của nó được cung cấp bởi lớp InterfaceDemo, vì thế không có tính lưỡng nghĩa ở đây.

Ví dụ đa thừa kế với class

public class Printable {
    void print() {
        System.out.println("Printable");
    }
}  
 
public class Showable {  
    void print() {
        System.out.println("Showable");
    }
}  
 
// Không thể thực hiện đa thừa kế với class
public class InterfaceDemo extends Printable, Showable {  
    public static void main(String args[]) {  
        InterfaceDemo obj = new InterfaceDemo();  
        obj.print();  // Không thể xác định được gọi phương thức print() của class nào
    }  
}

Trong ví dụ trên, lớp Printable và Showable có cùng các phương thức print() và InterfaceDemo kế thừa 2 class đó không override lại phương thức print() nên trình biên dịch không biết thực thi phương thức print() của lớp Printable hay là của lớp Showable. Để bảo đảm an toàn và giảm tính phức tạp của hệ thống nên Java không hỗ trợ đa thừa kế đối với class.

The post Kế Thừa Trong Java first appeared on Techacademy.

source https://techacademy.edu.vn/ke-thua-trong-java/

Cách Sử Dụng Google Meet Trên Máy Tính

Google Meet hiện nay là một trong những phần mềm dạy học online hiệu quả được nhiều nhà trường sử dụng do cách dạy và tham gia rất đơn giản, khi chúng ta chỉ cần tạo tài khoản Google để tham gia Google Meet. Dưới đây là toàn bộ hướng dẫn sử dụng Google Meet trên máy tính.

1. Cách Thiết Lập Lớp Học Online Trong Google Meet

Bước 1:

Để tạo lớp học online trên Google Meet thì thầy cô giáo truy cập ngay vào link dưới đây.

Sau đó chúng ta đăng nhập tài khoản Google để có thể sử dụng được Google Meet.

Bước 2:

Sau đó tại giao diện của Google Meet chúng ta nhấn vào Cuộc họp mới rồi nhấn tiếp vào Bắt đầu một cuộc họp tức thì.

Bước 3:

Sau đó bạn sẽ được yêu cầu cho phép sử dụng micro và máy ảnh trên trình duyệt, bạn nhấn vào Cho phép.

Bước 4:

Ngay sau đó chúng ta đã truy cập vào lớp học trên Google Meet để giảng dạy trực tuyến.

2. Cách mời người khác tham gia Google Meet

Bước 1:

Tại giao diện trên Google Meet ngay sau khi vừa mới tạo xong lớp học trực tuyến bạn sẽ nhìn thấy một khung để thêm người khác vào Google Meet. Nhấn Thêm người khác để thêm học sinh.

Bước 2:

Lúc này hiển thị giao diện để nhập địa chỉ email những người muốn tham gia vào lớp học online này. Bạn nhập địa chỉ email rồi chọn Gửi email.

Ngoài việc thêm địa chỉ email thì chúng ta cũng có thể sao chép URL lớp học rồi gửi vào trong nhóm, chẳng hạn như nhóm trên Zalo để học sinh truy cập nhanh chóng hơn.

3. Cách Bật, Tắt Camera Và Micro Google Meet

Bước 1:

Trong quá trình dạy học online thì thầy cô giáo có thể bật tắt mic và camera thông qua biểu tượng micro và camera dưới màn hình.

Bước 2:

Ngoài ra người dùng cũng có thể nhấn vào biểu tượng 3 dấu chấm rồi chọn Cài đặt.

Bước 3:

Khi đó bạn sẽ thấy phần chỉnh Âm thanh với Tùy chọn micro và loa. Chúng ta có thể nhấn Kiểm tra để test loa.

Bước 4:

Tiếp tục nhấn vào Video để chỉnh webcam trên Google Meet.

4. Gửi Tin Nhắn Trong Google Meet

Bước 1:

Tại giao diện Google Meet bạn nhìn sang bên phải sẽ thấy biểu tượng tin nhắn như hình dưới đây.

Bước 2:

Hiển thị giao diện để nhắn tin, nếu thầy cô giáo muốn tất cả học sinh trong lớp có thể nhắn tin thì kích hoạt vào Cho phép mọi người nhắn tin. Nếu không bật tùy chọn này thì chỉ có thầy cô giáo mới được phép nhắn tin cho học sinh mà thôi.

Tin nhắn sẽ chỉ hiển thị với các học sinh trong lớp học và sẽ xóa ngay sau khi cuộc gọi kết thúc

5. Cách Ghim Học Sinh Trong Google Meet

Bước 1:

Tại giao diện trên Google Meet bạn nhấn vào biểu tượng số lượng người tham gia ở góc dưới cùng bên phải màn hình

Bước 2:

Lúc này hiển thị giao diện Mọi người. Tại đây bạn có thể nhấn vào biểu tượng 3 chấm tại người tham gia bất kỳ rồi chọn Ghim vào màn hình.

Bước 3:

Ngoài ra cũng tại giao diện này bạn có thể nhấn Tắt tiếng của tất cả để không ai được phép sử dụng micro, trừ các thầy cô giáo người tổ chức lớp học trực tuyến.

Bước 4:

Tiếp tục nhấn vào Bộ điều khiển của người tổ chức. Tại đây bạn sẽ nhìn thấy tùy chọn chia sẻ màn hình và gửi tin nhắn trò chuyện. Nếu tắt hai tùy chọn này thì học sinh trong lớp sẽ không được phép thực hiện hành động này.

6. Cách Xóa Học Sinh Khỏi Lớp Học Google Meet

Để xóa học sinh, bạn bạn nhấn vào biểu tượng Mọi người tại giao diện này. Tại học sinh muốn xóa khỏi lớp học, nhấn vào biểu tượng 3 chấm rồi chọn Xóa khỏi cuộc họp.

7. Cách Đổi Background Google Meet

Nếu bạn muốn thay đổi background trong Google Meet thì nhấn vào biểu tượng ba chấm rồi chọn Thay đổi nền. Sau đó bạn có thể lựa chọn hình nền muốn sử dụng hoặc làm mờ background

8. Cách Thay Đổi Bố Cục Trong Google Meet

Bước 1:

Bạn cũng nhấn vào biểu tượng ba chấm dọc rồi chọn Thay đổi bố cục

Bước 2:

Lúc này hiển thị giao diện để bạn lựa chọn cách sắp xếp màn hình video khi dạy trực tuyến.

9. Đôi Điều Về Google Meet

Google Meet (trước đây được gọi là Google Hangouts Meet hay GG Meet) là công cụ họp trực tuyến của Google. Bạn có thể tìm thấy nó được liệt kê trong các ứng dụng Google sau khi đăng nhập vào tài khoản Google của mình hoặc tải xuống từ kho ứng dụng trên thiết bị di động.

Google Meet là phiên bản dành cho doanh nghiệp cho nền tảng Hangouts của Google và phù hợp với các doanh nghiệp thuộc mọi quy mô. Giải pháp này cho phép người dùng thực hiện cuộc gọi điện video với tối đa 30 người dùng cho mỗi cuộc họp video độ nét cao.

Ứng dụng cho phép người dùng tham gia các cuộc họp được lên lịch trước từ các sự kiện lịch, chọn liên kết, nhập mã cuộc họp và thậm chí quay số từ điện thoại của họ nếu lời mời bao gồm số điện thoại. Google Meet tích hợp với các phiên bản G-Suite của Google Calendar và Gmail, đồng thời hiển thị danh sách đầy đủ những người tham gia và các cuộc họp đã lên lịch. Nó hiển thị nút “Join” để người dùng kết nối với cuộc họp và cung cấp các tùy chọn để tắt tiếng và video trong cuộc họp.

Google Meet cho phép người dùng quay số điện thoại để truy cập cuộc họp, do đó, cho phép người dùng có kết nối Internet chậm hoặc không có kết nối Internet gọi đến. Tuy nhiên, tính năng này chỉ khả dụng cho khách hàng phiên bản G-Suite dành cho doanh nghiệp.

Trong một tweet vào tháng 3 năm 2021, Google tuyên bố sẽ không giới hạn thời lượng cuộc gọi ở mức 60 phút cho người dùng Google Meet miễn phí nữa. Giới hạn này sẽ bắt đầu lại vào ngày 30 tháng 6 năm 2021. Cho đến lúc đó, bất kỳ ai sử dụng phiên bản miễn phí của dịch vụ sẽ có thể tổ chức các cuộc gọi có thời lượng lên đến 24 giờ (Google gọi đây là “không giới hạn”).

Đây là lần thứ hai Google đẩy lùi việc giới hạn cuộc gọi kể từ khi mở dịch vụ cho người dùng miễn phí vào tháng 4 năm ngoái. Giới hạn 60 phút ban đầu dự kiến ​​có hiệu lực vào cuối tháng 9 năm 2020, nhưng thời hạn đó sau đó đã được lùi lại sang tháng 3 năm sau khi tình hình dịch bệnh vẫn chưa thể kiểm soát.

10. Những Tính Năng Mới Nhất Của Google Meet

Google lưu ý rằng các bản cập nhật mới nhất cho Google Meet sẽ giúp đào sâu và nâng cao trải nghiệm trực tuyến hơn nữa, bất kể mọi người muốn giao tiếp bằng cách nào và ở đâu. Cụ thể, công ty đã công bố sự xuất hiện của các tính năng và giao diện người dùng mới được cung cấp bởi các dịch vụ AI mới nhất của Google.

Tạo trải nghiệm cuộc họp phong phú hơn

Tiếp tục lộ trình đổi mới liên tục trong năm qua, từ tự động tạo phụ đề trực tiếp đến kiểm soát mức độ tương tác mới dành cho sinh viên và các nhà giáo dục, Google hiện đang triển khai giao diện người dùng mới. Bắt đầu từ tháng 5 năm 2021, người dùng laptop và máy tính để bàn sẽ được tận hưởng giao diện người dùng mới với nhiều tính năng dễ truy cập.

Cung cấp Meet for Web mới bao gồm cập nhật nguồn cấp dữ liệu video, các tính năng xem và thuyết trình cũng như những giải pháp để giảm bớt sự mệt mỏi trong cuộc họp. Ví dụ, bạn có thể chọn cách xem chính mình trong cuộc họp video hoặc xóa hoàn toàn luồng video của bạn khỏi màn hình. Cũng sẽ có một cài đặt để cho phép xóa nguồn cấp dữ liệu của riêng mình trên tất cả các cuộc trò chuyện Google Meet.

Để cải thiện sự tự tin của người thuyết trình trong các cuộc họp, Google đã thêm tính năng ghim và bỏ ghim được cải tiến. Khi một tile dành cho việc thuyết trình được bỏ ghim, tile này sẽ giảm xuống cùng kích thước với các tile khác, cho phép xem cuộc hội thoại tốt hơn.

Trong những tháng gần đây, Google cũng đã tung ra một loạt bản cập nhật cho các thiết bị Android và iOS, chẳng hạn như khả năng thay thế nền và tạo cuộc thăm dò ý kiến ​​cho Meet. Trong tương lai, công ty sẽ thêm tính năng thay thế nền video để giúp bạn kiểm soát nhiều hơn những gì đang diễn ra sau lưng trong một cuộc họp.

Hỗ trợ các cuộc họp với Google AI

Theo Google, ưu tiên của trải nghiệm Meet là tạo ra các cuộc họp chất lượng cao, bất kể người dùng đang ở đâu hay sử dụng thiết bị nào. Để cải thiện cuộc gọi video cho những nhân viên phải thường xuyên di chuyển, nhóm phát triển hiện đang khởi động việc áp dụng Data Saver. Đây là một tính năng làm giảm mức sử dụng dữ liệu trên mạng di động, giúp hạn chế chi phí dữ liệu cho những người làm việc trong môi trường di động.

Vào năm 2020, Google đã giới thiệu chế độ ánh sáng thấp cho Meet trên thiết bị di động, sử dụng AI để tự động điều chỉnh trải nghiệm video nhằm giúp người dùng dễ nhìn hơn trong môi trường tối. Giải pháp web của Google Meet hiện tự động phát hiện khi bạn có vẻ như đang ở trong môi trường tối và tăng cường độ sáng để tăng khả năng hiển thị. Tính năng Light Adjustment này sẽ được tung ra cho tất cả người dùng trong vài tuần tới.

Ngoài ra, chức năng Autozoom sẽ hỗ trợ người khác nhìn thấy bạn rõ ràng hơn trong các cuộc họp bằng cách sử dụng AI để phóng to và cải thiện vị trí của bạn trước camera. Nếu bạn di chuyển trong cuộc họp, hệ thống thông minh sẽ tự động điều chỉnh để giữ cho mọi người tập trung vào khuôn mặt của bạn.

Google cho biết họ sẽ tiếp tục phát hành những cải tiến mới trong Google Meet để mang mọi người đến gần nhau hơn.

11. Google Meet Có Filter Không

Tương tự như Facebook, Google Meet cũng được trang bị tính năng filter giúp người dùng có thể sử dụng được những hiệu ứng khuôn mặt bắt mắt thay cho khuôn mặt của mình, thay đổi giao diện ở trên màn hình gọi giúp cuộc gọi trở nên thu hút, hấp dẫn hơn.

Hiện tại, filter trên Google Meet chỉ áp dụng trên phiên bản điện thoại Android, iOS, mà chưa áp dụng trên máy tính. Nếu muốn thì bạn cần cài đặt tính năng này. Cùng tham khảo chi tiết hướng dẫn sử cách dùng filter trên Google Meet dưới đây.

Hướng Dẫn Dùng Filter Trên Google Meet Trên Máy Tính

Điều kiện: Cài tiện ích Filter và Sticker cho Google Meet TẠI ĐÂY

Bước 1: Bạn truy cập vào đường link tải filter ở trên. Bạn nhìn vào góc trên bên phải, click vào “Thêm vào Chrome”

Lúc này, bạn click “Thêm tiện ích” rồi chờ quá trình cài đặt công cụ filter này hoàn tất.

Bước 2: Mở Google Meet trên trình duyệt rồi tham gia vào lớp học, họp online. Tiếp đó, ở góc trên bên trái, bạn nhấn vào biểu tượng dấu cộng như hình ở thanh công cụ Filter for Meet.

Bước 3: Một loạt filter hiện ra, bạn chọn và click vào filter mà bạn muốn thay.

Còn nếu muốn sử dụng sticker thì bạn nhấn biểu tượng ở bên cạnh filter như hình dưới.

Lúc này, bạn cũng làm như chọn filer để thay, bạn click vào sticker bạn thích rồi chờ sticker hiển thị là được.

Hy vọng với chia sẻ trên đây về hướng dẫn dùng filter trên Google Meet trên máy tính, trên điện thoại, các bạn có thể thay filter, sticker dễ dàng hơn. Nếu bạn còn thắc mắc gì về Google Meet thì cùng để lại bình luận ở bài viết phía dưới, chúng tôi sẽ giải đáp cho bạn.

12. Google Meet Có Record Không

Khi dịch Covid-19 bùng phát, cả thế giới thực sự phải tìm cách thích nghi và chuyển đổi sang cách làm việc, học tập mới. Đó là online từ xa.

Google Meet là phần mềm họp, học online chất lượng không kém Zoom. Tuy nhiên, so với Zoom, Meet an toàn hơn về độ bảo mật và “thân thiện” với người dùng Google hơn.

Google Meet cung cấp cho người dùng gần như đủ mọi tính năng của Zoom. Bạn có thể mở một phiên làm việc học online trên Meet ngay tại trình duyệt web hoặc cài app riêng cho Windows, iOS, Android. Google Meet cũng cho phép người dùng chia sẻ màn hình, ghi âm, thậm chí quay video cuộc họp. Bạn có thể dùng mọi tính năng cơ bản của Meet miễn phí, bao gồm cả mã hóa end-to-end.

Như đã nói ở trên, Google Meet cho phép người dùng quay cả video màn hình. Đây là tính năng thực sự tuyệt vời, giúp cả chủ cuộc họp/học online lẫn người tham gia có thể xem lại nội dung sau đó. Cách record trên Google Meet không quá khó. Nếu chưa biết cách, mời bạn tham khảo hướng dẫn ghi màn hình Google Meet dưới đây.

Yêu cầu

  • Tài khoản G Suite
  • Dung lượng trống trong tài khoản Google Drive
  • Là người tổ chức cuộc họp/học online/hội thảo

Bắt đầu quay video trên Google Meet

Bắt đầu ghi hình trong Google Meet khá đơn giản, bạn chỉ cần làm như sau:

Bước 1: Tham gia một cuộc họp/học/hội thảo online trên Google Meet qua link mời, sự kiện trên lịch hoặc mã liên quan. Sau đó, click icon menu 3 dấu chấm ở góc phải dưới màn hình và chọn Record Meeting.

Bước 2: Xác nhận lựa chọn bằng cách click Accept trong Ask for consent. Sau đó, một thông báo sẽ được gửi tới toàn bộ thành viên rằng bạn đang bắt đầu quay video buổi họp online.

Bạn có thể quay lại toàn bộ sự kiện xảy ra trong cuộc họp online để xem lại bất cứ khi nào muốn

Cách dừng ghi hình trên Google Meet

Bước 1: Click menu 3 dấu chấm ở góc phải phía dưới màn hình và chọn Stop Recording.

Bước 2: Xác nhận lựa chọn bằng cách click Stop Recording trong hộp thoại xác nhận hiện ra.

Hoạt động ghi hình sẽ dừng lại và một email kèm link tới file đã lưu sẽ được gửi tới người tổ chức họp và cả bạn. Nếu đó là một sự kiện được đánh dấu trên lịch thì bạn cũng sẽ thấy link này trên đó.

Vị trí lưu bản ghi

Bản ghi cuộc họp/hội thảo/học online qua video trên Google Meet sẽ được lưu vào thư mục Meet Recordings trong Google Drive của người tổ chức.

Nội dung có thể quay lại trên Google Meet
Chỉ người nói chính và bài thuyết trình được ghi lại. Tất cả thành viên khác nằm ngoài phạm vi ghi hình, dù họ có được ghim tại vị trí đầu. Ngoài ra, cửa sổ hay thông báo mà bạn nhận hoặc mở trong khi diễn ra cuộc họp cũng không được ghi lại. Hiện tại, Google Meet chưa hỗ trợ tính năng ghi hình trên mobile.

Người dùng miễn phí có thể quay màn hình Google Meet?

Điều đó tùy thuộc vào loại phiên bản người dùng miễn phí:

  • Nếu đang dùng tài khoản Google miễn phí, bạn không có sẵn chức năng ghi hình.
  • Nếu dùng tài khoản G-Suite, bạn có thể ghi màn hình Google Meet.

Toàn bộ bản ghi sẽ được lưu trong Google Drive và bạn sẽ nhận được liên kết dẫn tới nó qua email. Nếu cuộc họp được bắt đầu bằng sự kiện trên Google Calendar, link đó cũng sẽ được đính kèm vào lịch của bạn. Nhờ đó, mọi thành viên trong cuộc họp đều có thể truy cập file ghi hình đó dễ dàng.

File quay màn hình trên Google Meet có được mã hóa?

Google Meet được quảng cáo là một trong số phần mềm làm việc từ xa hữu ích nhất hiện nay. Google tuyên bố nó bảo mật và an toàn hơn Zoom. Thực tế, đúng như vậy.

Tuy nhiên, hiện hãng chưa cung cấp chuẩn mã hóa end-to-end trong các phiên làm việc hay bản ghi hình hoạt động trên Meet. Video được bảo mật bằng TLS hay Transport Layer Security. Cấp độ mã hóa này đảm bảo không ai có quyền truy cập dữ liệu chưa được bảo vệ. Bằng cách này, các bản ghi hình trên Meet được chuyển sang hình thức mã hóa mà chỉ có thể được giải mã nếu dùng đúng key.

Cách xem, chia sẻ và tải bản ghi hình trên Google Meet

Đầu tiên, bạn cần truy cập file ghi hình cuộc họp trong Meet Recordings, rồi mở nó hoặc tải về máy.

  • Để phát file ghi hình, click vào nó, rồi nhấn nút Play ở trên cùng. Nếu dung lượng video quá lớn, thời gian tải sẽ lâu hơn.
  • Để chia sẻ file với đồng nghiệp, bạn cần chọn tập tin, rồi nhấn nút Share và thêm người muốn chia sẻ hoặc tạo một link chia sẻ bằng cách click Link.
  • Cuối cùng, nếu muốn tải file video, tới More và nhấn Download.

13. Google Meet Có Bị Giới Hạn Thời Gian Không

Hiện tại, không có giới hạn trên nền tảng. Tuy nhiên, các cuộc họp dành cho người dùng miễn phí có thể sẽ ngắn hơn trong tương lai gần.

Năm ngoái, Google đã phát triển nền tảng họp video, Google Meet, miễn phí cho tất cả mọi người. Trước đây, chỉ người dùng G-Suite (bây giờ, Workspace) mới có quyền truy cập vào nền tảng này. Trong bối cảnh của đại dịch, bước đi của Google được chứng minh là rất quan trọng. Người dùng từ khắp mọi nơi có thể tiếp tục cuộc sống của họ bằng Google Meet.

Cho dù bạn đang họp vì cơ quan, trường học hay gặp gỡ xã hội, Google Meet đã trở thành lựa chọn hàng đầu của nhiều người. Bạn không cần một ứng dụng riêng và trong hầu hết các trường hợp, bạn thậm chí không cần tạo tài khoản. Rốt cuộc, hầu hết mọi người đều có tài khoản Google.

Khi Google cung cấp dịch vụ miễn phí cho tất cả mọi người, Google cũng không đặt bất kỳ giới hạn thời gian nào đối với các cuộc gọi. Ngay cả những người dùng có tài khoản miễn phí cũng có thể gặp gỡ liên tục trong tối đa 24 giờ (thực tế là một cuộc gọi không giới hạn).

Ban đầu, Google thông báo rằng họ sẽ chấm dứt cuộc gọi không giới hạn cho người dùng miễn phí. Khi Meet miễn phí ra mắt, Google đã lên kế hoạch áp dụng giới hạn thời gian 60 phút vào cuối tháng 9 năm 2020.

Nhưng công ty đã lùi thời hạn đến tháng 3 năm 2021, một lần nữa do đại dịch. Bây giờ, nhiều người dùng đang tự hỏi liệu thay đổi mới này đã có hiệu lực hay chưa. Cuối cùng thì có giới hạn thời gian cho các cuộc gọi trên Google Meet không? Chà, vẫn chưa. Nhưng sẽ sớm có thôi.

Google đã lùi thời hạn từ tháng 3 đến tháng 6 năm 2021 một lần nữa. Vì vậy, người dùng miễn phí vẫn có thể gặp gỡ liên tục trên Google Meet với các cuộc gọi không giới hạn (tối đa 24 giờ) cho đến cuối tháng này.

Google đã thông báo về việc lùi thời hạn này trên Twitter.

Sau khi hết khoảng thời gian này, nếu công ty không đẩy lùi thời hạn nữa – điều mà bây giờ có vẻ khó xảy ra-người dùng miễn phí sẽ có giới hạn thời gian là 60 phút cho các cuộc gọi trên Google Meet.

Người dùng Google Workspace sẽ vẫn có thể tận hưởng các cuộc gọi điện video không giới hạn trên nền tảng này.

Giới hạn thời gian hoạt động như thế nào trong Google Meet?

Giới hạn thời gian là 60 phút không có nghĩa là người dùng miễn phí sẽ chỉ có thể gặp gỡ trên Google Meet tối đa 60 phút mỗi ngày. Có nghĩa là họ chỉ có thể gặp nhau không bị gián đoạn trong 60 phút. Sau khi hết thời gian, cuộc gọi sẽ tự động ngắt kết nối và bạn sẽ phải bắt đầu một cuộc họp mới và thực hiện lại tất cả các vòng một lần nữa (mời người khác và thừa nhận họ tham gia cuộc gọi).

Giới hạn thời gian dành cho tài khoản miễn phí chỉ áp dụng trong các cuộc họp do chủ sở hữu tài khoản miễn phí tổ chức. Khi người dùng rảnh tham gia các cuộc họp do người dùng Google Workspace tổ chức, họ sẽ không bị ngắt kết nối khỏi cuộc gọi sau một giờ.

Google Meet là một nền tảng tuyệt vời để kết nối với những người khác, bất kể bạn đang sử dụng loại tài khoản nào. Google cũng đã không ngừng bổ sung các tính năng mới để làm cho trải nghiệm thậm chí còn siêu thực hơn.

Cho dù bạn đang bắt đầu cuộc họp cho các buổi làm việc, lớp học hay buổi xem phim, hãy tận hưởng các cuộc gọi không giới hạn với tất cả các tính năng mà nó cung cấp trong khi chúng kéo dài. Sau đó, bạn phải làm quen với nhiều phiên ngắn hơn hoặc bạn có thể trở thành người dùng trả phí.

14. Google Meet Có Quay Màn Hình Được Không

Để hỗ trợ tốt hơn cho việc giảng dạy online trong mùa vi-rút COVID-19. Mới đây phần mềm Google Meet đã cập nhật thêm 1 số tính năng bao gồm:

  • Tăng giới hạn số lượng người tham gia lên 250 người/cuộc gọi video
  • Ghi lại cuộc gọi video

Trong bài viết này Phòng CNTT xin hướng dẫn Thầy/Cô dùng chức năng ghi lại cuộc gọi video để ghi lại buổi học.

Trước khi bắt đầu buổi học Thầy/Cô bật chức năng ghi lại buổi học bằng cách vào mục tùy chọn sau đó click chọn ghi lại cuộc họp

sau khi click vào ghi lại cuộc họp hệ thống hiện thông báo yêu cầu đồng ý thầy cô vui lòng click vào chấp nhận

Thầy/Cô chờ tầm 5s sẽ xuất hiện biểu tượng ghi hình nằm phía trên cùng bên trái báo hiệu hệ thống bắt đầu ghi.

Sau khi kết thúc buổi học Thầy/Cô tắt chức năng ghi bằng cách vào mục tùy chọn và click vào Dừng ghi

Một bảng thông báo xác nhận dừng ghi lại buổi học này thầy cô vui lòng click vào Dừng ghi

Sau khi kết thúc việc ghi hệ thống sẽ biên tập lại thành file video. Và khi đã hoàn thành Google sẽ lưu file video này vào 1 thư mục Google tự tạo trên Google Drive của tài khoản Thầy/Cô dùng để tạo buổi học. Đồng thời Google cũng gửi 1 email thông báo đến Thầy/Cô

15. Google Meet Có Background Không

Google Meet có tùy chọn đổi background để thay đổi phông nền video với những phông nền có sẵn hoặc lựa chọn hình ảnh từ trên máy tính, điện thoại để làm phông nền Google Meet. Ngoài tùy chọn đổi background Google Meet thì người dùng cũng có lựa chọn làm mờ nền Google Meet nếu không muốn dùng phông nền đằng sau.

Việc dùng phông nền Google Meet sẽ giúp chúng ta che được cảnh thật ở đằng sau, hạn chế để lộ những cảnh vật bạn không muốn hiển thị trên màn hình khi tham gia Google Meet ngoài việc dùng filter trên Google Meet.

Bước 1:

Tại giao diện trên Google Meet điện thoại bạn tạo cuộc họp như bình thường.

Bước 2:

Trong giao diện họp tại video nhỏ dưới góc màn hình bạn sẽ nhìn thấy biểu tượng hình nền như dưới đây. Nhấn vào biểu tượng này để chọn background khi học online trên Google Meet.

Lúc này chúng ta sẽ nhìn thấy các tùy chọn hình nền cho Google Meet để sử dụng. Bạn nhấn vào hình nền muốn sử dụng để học online Google Meet.

Bước 3:

Hình nền sẽ che đi cảnh vật thật và thay thế bằng hình nền mà chúng ta đã chọn. Hình ảnh của bạn sẽ hiển thị đè lên hình nền. Có rất nhiều chủ đề hình nền để chúng ta lựa chọn. Nếu không muốn dùng hình nền thì nhấn vào biểu tượng hình tròn gạch chéo ở đầu danh sách là được.

Bước 4: Để lấy ảnh trong điện thoại làm background, chúng ta nhấn vào dấu cộng và chọn ảnh muốn làm background cho Google Meet.

16. Google Meet Có Ghi Âm Không

Sau thời kỳ bùng nổ mạnh mẽ trong lĩnh vực làm việc từ xa, việc sử dụng các cuộc gọi điện video để đưa ra các quyết định về công việc và cộng tác trong một nhóm đã phát triển rất nhiều. Trong trường hợp này, một trong những nền tảng được sử dụng nhiều nhất là Google Meet, được nhiều công ty trên thế giới sử dụng cho cả công việc lẫn lớp học và các nhiệm vụ tương tự.

Một ý tưởng thú vị đi qua khả năng ghi âm cuộc gọi. Bằng cách này, có thể tham khảo nội dung của họ sau này, và do đó không bỏ sót bất cứ thứ gì, ngoài ra có thể sử dụng cho bất kỳ mục đích nào. Theo nghĩa này, ngoài các lựa chọn thay thế, chẳng hạn như tùy chọn ghi lại màn hình máy tính, có thể là một ý kiến ​​hay khi sử dụng chức năng mà Google bao gồm, vì vậy chúng tôi chỉ cho bạn cách bạn có thể dễ dàng lấy được nó.

Google Meet: để bạn có thể dễ dàng ghi lại cuộc họp

Như chúng tôi đã đề cập, khi sử dụng công cụ Google Meet để gặp gỡ, có một tùy chọn mà bạn có thể nhận được bản sao hoàn chỉnh của cuộc trò chuyện để sử dụng sau này. Tuy nhiên, điều quan trọng cần lưu ý là Bạn phải là quản trị viên cuộc họp để bắt đầu ghi hoặc là giáo viên trong trường hợp có giấy phép giáo dục.

Một trong những yêu cầu cơ bản khác khi bắt đầu ghi lại Google Meet là dựa trên giấy phép Google Workspace. Để ghi âm cuộc gọi, công ty hoặc trung tâm giáo dục của bạn phải có một trong các giấy phép sau: Thông tin cơ bản, Tiêu chuẩn dành cho doanh nghiệp, Tiêu chuẩn dành cho doanh nghiệp, Thông tin cơ bản về doanh nghiệp, Tiêu chuẩn dành cho doanh nghiệp, Enterprise Plus, Cơ bản về giáo dục hoặc Education Plus.

Bằng cách này, nếu cả hai yêu cầu được đáp ứng, có thể bắt đầu ghi âm cuộc gọi. Để làm được điều này, bạn phải nhấn một lần trong cuộc họp vào 3 điểm xuất hiện ở phần dưới bên trái, sau đó trong menu thả xuống, hãy chọn chức năng “ghi lại cuộc họp”. Khi làm như vậy, bạn phải lưu ý rằng những người tham gia sẽ nhận được thông báo và bạn có thể kết thúc quá trình ghi bất kỳ lúc nào từ chính trang web này. Sau đó, tập tin sẽ được xử lý và bạn có thể sử dụng nó bất cứ lúc nào.

16. Google Meet Có Share Màn Hình Được Không

Những lợi ích khi chia sẻ màn hình Google Meet trong lúc học tập và làm việc:

  • Tất cả thành viên tham gia Google Meet đều có thể nhìn thấy tài liệu bạn chia sẻ.
  • Chia sẻ màn hình trên Google Meet trên máy tính, điện thoại trong lúc học và làm việc giúp cho thầy, cô giáo chia sẻ bài giảng đến học sinh
  • Ngược lại, học sinh cũng có thể chia sẻ bài tập của mình đến với bạn bè và thầy cô.

Hướng dẫn chia sẻ màn hình Google Meet

Bước 1: Đầu tiên, thầy cô giáo tạo lớp học trên Google Meet và yêu cầu học sinh tham gia lớp học trên Google Meet.

Sau khi đầy đủ học, để chia sẻ màn hình, chỉ cần nhấn biểu tượng Trình bày ngay.

Bước 2: Màn hình sẽ hiển thị 3 tùy chọn sau:

  • Toàn bộ màn hình của bản: Bạn có thể chia sẻ toàn bộ nội dung hiển thị trên màn hình máy tính của mình.
  • Một cửa sổ: Bạn có thể tùy chọn 1 cửa sổ trình duyệt đang mở trên máy tính để chia sẻ.
  • Một thẻ: Bạn chọn 1 tab đang mở trên máy tính để chọn chia sẻ video hoặc hình ảnh động.

Bước 3: Bạn có thể chọn 1 trong 3 tùy chọn trên và chọn nội dung chia sẻ, nhấn vào nội dung muốn chia sẻ và chọn Chia sẻ bên dưới.

Bước 4: Khi đó, nội dung bạn muốn chia sẻ được truyền đến người tham gia trên Google Meet.

Nếu bạn muốn dùng chia sẻ màn hình, nhấn chọn Dừng chia sẻ màn hình

17. Google Meet Có An Toàn Không

Việc đảm bảo an toàn cho bạn trong môi trường mạng có nghĩa là bảo vệ thông tin và tôn trọng quyền riêng tư của bạn. Đó là lý do tại sao trong mỗi sản phẩm Google tạo ra, chúng tôi luôn chú tâm đến việc bảo mật thông tin của bạn, xử lý thông tin một cách có trách nhiệm và giúp bạn nắm quyền kiểm soát. Đội ngũ của chúng tôi nỗ lực từng ngày để đảm bảo các sản phẩm của Google an toàn bất kể bạn đang làm gì — duyệt web, quản lý hộp thư đến của bạn hay nhận thông tin chỉ đường.

Chúng tôi sử dụng các biện pháp bảo mật đẳng cấp thế giới để bảo vệ thông tin của bạn. Bạn luôn có thể kiểm soát các chế độ cài đặt quyền riêng tư trong Tài khoản Google của mình.

Một trải nghiệm hữu ích và phù hợp hơn với bạn

Khi bạn sử dụng Google Meet, chúng tôi sẽ xử lý một số dữ liệu để mang lại cho bạn trải nghiệm tốt hơn về sản phẩm. Thông tin của bạn vẫn được bảo mật. Bạn luôn có thể kiểm soát các chế độ cài đặt quyền riêng tư trong Tài khoản Google của mình.

Nội dung của bạn được lưu trữ an toàn

Khi bạn thay đổi phông nền của cuộc họp trong Google Meet, thực hiện cuộc thăm dò ý kiến hoặc ghi lại cuộc họp, dữ liệu này được lưu trữ an toàn trong các trung tâm dữ liệu đẳng cấp thế giới của chúng tôi. Dữ liệu được mã hóa trong khi truyền cũng như khi lưu trữ.

Meet sử dụng hàng loạt biện pháp an toàn nhằm đảm bảo an toàn cho các cuộc họp video của bạn. Trong đó có các biện pháp kiểm soát chống xâm nhập dành cho cả cuộc họp video trên web lẫn cuộc họp quay số qua điện thoại.

Tài khoản Google của bạn tích hợp sẵn tính năng bảo mật được thiết kế để phát hiện và ngăn chặn các mối đe dọa như tin nhắn rác, lừa đảo và phần mềm độc hại. Hoạt động của bạn được lưu trữ theo các phương thức và tiêu chuẩn ngành nghiêm ngặt.

Tên, địa chỉ email và số điện thoại của bạn sẽ giúp đồng bộ hóa dữ liệu

Để lưu trữ các lựa chọn ưu tiên của bạn và giúp bạn đăng nhập, chúng tôi lưu tên và địa chỉ email của bạn.

Để giúp bạn biết ai đang tham gia cuộc họp, chúng tôi lưu số điện thoại của những người dùng khác gọi qua điện thoại và hiển thị số trong cuộc họp.

Thông tin của bạn giúp bạn tạo và quản lý Tài khoản Google của mình

Để giúp bạn tạo một Tài khoản Google hoàn toàn mới, chúng tôi sẽ thu thập tên và số điện thoại của bạn. Khi quản lý Tài khoản Google của mình, bạn có thể chọn cung cấp địa chỉ thực, tải danh bạ lên hoặc thêm ảnh hồ sơ.

Meet sử dụng dữ liệu để mang đến cho bạn trải nghiệm tốt hơn
Để cung cấp các dịch vụ như phụ đề trực tiếp và lọc lời mời không mong muốn, chúng tôi xử lý nội dung của bạn. Đối với phụ đề trực tiếp, dữ liệu âm thanh tạm thời được gửi đến máy chủ chép lời của Google, nhưng không liên kết với bất kỳ thông tin nhận dạng người dùng nào và cũng không được lưu trữ vĩnh viễn.

Để cải thiện hiệu suất và độ tin cậy của Meet, đồng thời giúp khắc phục sự cố có thể xảy ra khi bạn sử dụng Meet, chúng tôi thu thập dữ liệu về hiệu suất cũng như số liệu phân tích sự cố. Chúng tôi cũng lưu thông tin này để giúp ngăn chặn hành vi lạm dụng dịch vụ của chúng tôi và để phân tích.

Google Meet không sử dụng nội dung của bạn cho hoạt động quảng cáo

Chúng tôi không sử dụng thông tin trong các ứng dụng mà bạn chủ yếu lưu trữ nội dung cá nhân, bao gồm cả Meet, cho mục đích quảng cáo.

Nắm quyền kiểm soát nội dung bằng các chế độ cài đặt dễ sử dụng

Bạn có quyền quyết định nội dung được chia sẻ và người được bạn chia sẻ nội dung đó

Nội dung bạn chia sẻ trên Meet, chẳng hạn như tệp đính kèm và bảng trắng, cũng như mọi bản ghi cuộc họp đều ở chế độ riêng tư đối với bạn và những người tham gia cuộc họp của bạn. Tìm hiểu thêm về cách thức hoạt động của tính năng chia sẻ và cộng tác trong Meet

Google tôn trọng quyền riêng tư của bạn. Chúng tôi chỉ truy cập nội dung riêng tư của bạn khi bạn cho phép hoặc theo yêu cầu của luật pháp. Thông qua Báo cáo minh bạch của Google, chúng tôi chia sẻ dữ liệu về tác động của những chính sách và hành động của các chính phủ và tập đoàn đối với quyền riêng tư, tính bảo mật và quyền truy cập thông tin.

Nếu bạn có tài khoản công việc hoặc tài khoản trường học thì tổ chức của bạn có thể xem lại nhật ký ghi lại những việc mà Google làm khi truy cập nội dung. Tìm hiểu cách xem nhật ký thông qua tính năng Thông tin minh bạch về việc truy cập. Tìm hiểu cách Google bảo vệ quyền riêng tư và sự bảo mật cho tổ chức của bạn.

Kiểm soát nhật ký tìm kiếm của bạn

Nhằm giúp bạn tiết kiệm thời gian khi tìm kiếm sự trợ giúp trong Google Meet, chúng tôi lưu trữ một số cụm từ tìm kiếm trong Trung tâm trợ giúp.

Để xem lại hoặc quản lý nhật ký tìm kiếm trên Google Meet, hãy sử dụng trang Hoạt động của tôi.

Đồng bộ hóa các dịch vụ bạn sử dụng với vị trí của bạn

Để tìm hiểu mức độ liên quan giữa vị trí địa lý với việc bạn trải nghiệm sản phẩm, như khi bạn gửi ý kiến phản hồi cho Google và để giữ an toàn cho tài khoản của bạn, như khi chúng tôi nhận thấy bạn đăng nhập ở một vị trí mới, chúng tôi sẽ lưu một số thông tin vị trí.

18. Google Meet Có Bị Lật Camera Không

Google Meet không phản chiếu hoặc lật video cho khán giả, ngay cả khi nó hiển thị cho bạn hình ảnh phản chiếu trong bản xem trước. Vì vậy, không cần phải lật nó mỗi lần xem để điều chỉnh chế độ xem. Tuy nhiên, nếu bạn thực sự cần lật hoặc phản chiếu video của mình trên Google Meet vì lý do nào đó, hướng dẫn này sẽ giúp bạn.

Google Meet có camera lật không?

Có và không. Google Meet thực hiện lật nguồn cấp dữ liệu Camera nhưng có một điểm khó khăn – nó chỉ phản chiếu video trong bản xem trước được hiển thị cho bạn, khán giả sẽ nhìn thấy chế độ xem không chỉnh sửa. Google Meet thực hiện điều này để mọi người có thể xem bản xem trước video khi họ nhìn thấy trong gương mà không quá chói tai đối với họ.

Tuy nhiên, Google Meet không lật video cho người dùng cuối. Điều này có nghĩa là ngay cả khi văn bản và các mục trong bản xem trước video có thể được lật cho bạn, chúng vẫn được hiển thị theo hướng chính xác cho những người tham gia cuộc họp.

Đây là một lợi ích tuyệt vời cho các giáo viên và giảng viên sử dụng Google Meet để truyền đạt các khái niệm quan trọng cho những người tham gia cuộc họp của họ. Điều này thường liên quan đến việc sử dụng Bảng trắng và biểu đồ có thể mất ý nghĩa nếu chúng được lật trong video.

Tại sao tôi nhìn thấy một Camera được phản chiếu?

Giống như hầu hết các smartphone và webcam, Google tự động lật bản xem trước video cho bạn. Đây là một xu hướng đang diễn ra trong thập kỷ gần đây liên quan nhiều đến sự phổ biến của ảnh tự chụp và sự ra đời của camera selfie chuyên dụng trên smartphone.

Con người đã quen với việc nhìn thấy hình ảnh bị lật của họ do việc sử dụng gương thật trong cuộc sống của chúng ta hàng ngày. Hầu hết chúng ta thường nhìn vào hình ảnh được lật của mình, vì vậy việc nhìn thấy một hình ảnh không được chỉnh sửa của chính mình thường có thể gây khó chịu cho nhiều người dùng.

Để chống lại trải nghiệm chói tai này và để cung cấp một môi trường thân thiện với ảnh tự chụp và thẩm mỹ hơn, các công ty bắt đầu phản chiếu các bản xem trước video trên smartphone để chúng giống như một tấm gương hàng ngày. Xu hướng này đã sớm bắt đầu và hiện hầu như có sẵn trong mọi dịch vụ quay video từ bất kỳ thiết bị điện tử nào, có thể là smartphone, máy tính bảng, laptop hoặc Camera chuyên dụng.

19. Google Meet Có Chia Nhóm Được Không

Tháng 11/2020 Google đã ra mắt tính năng Breakout rooms trong Google Meet cho khách hàng Google Workspace for Education. Tính năng này nó giúp các lớp học online hoặc cuộc họp của bạn hiệu quả hơn, cho phép người kiểm duyệt chia những người tham gia cuộc họp thành các nhóm nhỏ hơn.

Tính năng Breakout Rooms ( chia nhóm ) trong Google Meet giúp tạo 1 hoặc nhiều video call riêng biệt trong video chính, nơi mỗi nhóm không thể nhìn thấy hoặc nghe thấy các nhóm khác.Tạo điều kiện cho việc dạy và học từ xa thông qua các ứng dụng công nghệ trở nên thuận lợi và hiệu quả hơn.

Tạo breakout rooms trong Google meet chỉ mất một phút và có thể thay đổi cách bạn nghĩ về các cuộc meeting trực tuyến. Dưới đây Adtimin sẽ hướng dẫn cụ thể cùng theo dõi nhé.

Cách tạo breakout rooms trong Google Meet (với tư cách là người kiểm duyệt)

Bạn có thể tạo tối đa 100 breakout rooms trong Google Meet.

1. Bắt đầu video call trong Google Meet.

2. Nhấp vào biểu tượng “Activities” (biểu tượng hình tròn, hình vuông và hình tam giác) ở góc trên cùng bên phải.

3. Nhấp “Breakout rooms.”

4. Nhấp vào biểu tượng bút chì “Edit” và chọn số lượng breakout rooms bạn muốn tạo.

5. Những người tham gia sau đó được phân bổ khắp các phòng. Người kiểm duyệt có thể di chuyển mọi người đến các phòng khác nhau bằng cách nhập tên của ai đó vào phòng hoặc nhấp và kéo vào đó. Nút trộn sẽ trộn các nhóm một cách ngẫu nhiên.

6. Nhấp vào “Open Rooms” ở dưới cùng bên phải để kích hoạt các phòng.

Bạn cũng có thể đặt hẹn giờ cho breakout rooms bằng cách truy cập đầu bảng điều khiển và nhấp vào biểu tượng đồng hồ cát. Bạn có thể thay đổi hoặc loại bỏ bộ hẹn giờ bất kỳ lúc nào.

20. Google Meet Có Cần Gmail Không

Google Meet có sẵn cho người dùng G Suite (trong giáo dục, kinh doanh…). Nếu bạn là người dùng G Suite, bạn có thể tạo lớp học để người khác tham gia. Nếu chỉ có tài khoản Gmail cá nhân, bạn chỉ có thể tham gia cuộc họp mà người khác tạo.

Tuy nhiên, hiện Google đang miễn phí truy cập tính năng cao cấp của Google Meet mùa dịch Covid-19. Bạn có thể tham khảo: Kích hoạt Google Hangouts Meeting miễn phí trên G Suite

1. Mở Gmail bằng cách vào Gmail.

2. Trong thanh bên, chọn Start a meeting.

Lưu ý: Nếu bạn không thấy tùy chọn này thì hãy liên hệ với quản trị viên G Suite của mình.

3. Trong cửa sổ Meet, chọn tùy chọn tham gia cuộc họp.

  • Nếu tham gia bằng máy tính, bạn có thể tùy chọn bật / tắt webcam, audio và ấn Join now.
  • Nếu tham gia sử dụng điện thoại để nghe âm thanh, click vào Join and use a phone for audio và sau đó làm theo lời nhắc trên màn hình. Khi sử dụng lựa chọn này, bạn vẫn có thể dùng máy tính để quay video.

4. Khi bạn đang ở trong cuộc họp, có thể thêm người khác vào cuộc họp của mình:

  • Để chia sẻ mã cuộc họp với ai đó, nhấp vào Copy joining info sau đó gửi cho người khác.
  • Nếu muốn mời ai đó bằng cách gửi email cho họ, nhấp vào Add people, nhập tên hoặc địa chỉ email của họ, nhấp vào Send invite.
  • Nếu muốn mời ai đó tham gia cuộc họp bằng điện thoại, click Add people sau đó click Call và nhập số điện thoại.

21. Google Meet Có Đổi Tên Được Không

Google Meet cho phép bạn tùy ý đổi tên hiển thị và ảnh đại diện, tuy vậy, Meet được liên kết thẳng với tài khoản Google của bạn, do đó bạn phải đổi tên và ảnh đại diện trực tiếp trên tài khoản Google. Thay đổi này cũng sẽ áp dụng lên các dịch vụ khác của Google như Drive, Photo và Gmail.

Cách thay đổi tên trên Google Meet từ trình duyệt web

Cách nhanh nhất và dễ nhất để thay đổi tên trên Google Meet là từ trình duyệt web và bạn có thể thực hiện việc này trong bất kỳ trình duyệt web nào bạn sử dụng.

1. Truy cập tài khoản Google (Thường là Gmail) và đăng nhập vào tài khoản (nếu cần).

2. Chọn Personal Info

3. Trong Name, hãy chọn mũi tên hướng sang phải.

4. Nhập họ và/hoặc tên mới của bạn vào các trường được cung cấp.

22. Google Meet Có Kết Nối Tivi Được Không

Dưới đây sẽ là cách kết nối Google Meet với tivi để học và họp online trên màn hình lớn được thuận tiện nhất.

Cách kết nối Google Meet với tivi để học và họp online trên màn hình lớn như thế nào?

Bạn có thể đưa màn hình máy tính lên tivi hay các máy chiếu màn hình lớn với Google Chromecast. Các bước tiến hành như sau:

Bước 1: Bạn cài đặt Google Chromecast hoặc sử dụng TV có tích hợp sẵn Chromecast.

Bước 2: Trên máy tính, bạn sử dụng trình duyệt Chrome để truy cập vào cuộc họp.

Bước 3: Click chuột vào biểu tượng dấu ba chấm ở góc dưới bên phải màn hình, và chọn Truyền cuộc họp này .

Bước 4: Chọn Chromecast để chuyển toàn bộ màn hình cuộc gọi lên TV.

The post Cách Sử Dụng Google Meet Trên Máy Tính first appeared on Techacademy.

source https://techacademy.edu.vn/cach-su-dung-google-meet-tren-may-tinh/

Các Toán Tử Trong Java

Một chương trình thực tế bao hàm việc tạo ra các biến. Các toán tử kết hợp các giá trị đơn giản hoặc các biểu thức con thành những biểu thức mới, phức tạp hơn và có thể trả về các giá trị. Điều này có hàm ý tạo ra các toán tử luận lý, số học, quan hệ và so sánh trên các biểu thức.

Toán tử trong java là 1 ký hiệu được dùng để thực hiện 1 phép tính/chức năng nào đấy. Techacademy sẽ giới thiệu đến bạn các toán tử cơ bản (Basic Operators) trong Java

I. Toán Tử New Trong Java

1. Từ khóa new trong Java là gì?

Đầu tiên, phải khẳng định luôn “new” trong Java là 1 … từ khóa (keyword). Vâng, chính vì vậy, chúng ta không được đặt tên hàm, phương thức, biến hay bất cứ thứ gì trùng với từ khóa new. Từ khóa new được dùng để cấp phát bộ nhớ cho đối tượng.

Nói rõ hơn đó là:

Lúc ta định nghĩa ra 1 đối tượng, chúng ta chỉ mới tạo ra nó trong “kế hoạch”, trong “tưởng tượng”. Đối tượng chưa thực sự tồn tại vì chưa được cấp phát vùng nhớ trên máy tính.

Tiếp đó, chúng ta dùng new để chính thức cấp phát vùng nhớ cho đối tượng. Đến lúc này thì đối tượng mới thực sự tồn tại trong chương trình của chúng ta.

Lưu ý: Trong Java có 1 số lớp đặc trưng không cần dùng từ khóa “new” để tạo đối tượng cho nó, do đó cách dùng của nó khá giống với 1 kiểu dữ liệu, điển hình trong trường hợp này là String.

2. Những cách dùng từ khóa new trong Java?

Từ khóa new được dùng chủ yếu trong việc tạo ra đối tượng, giúp ta có thể thao tác với đối tượng đó.

Cú pháp đơn giản của nó:

ViDuNew obj = new ViDuNew();

Nó thường được dùng bằng 1 số cách sau đây:

Cách 1: Các dùng từ khóa new để tạo đối tượng đơn giản

public class ViDuTuKhoaNew1 {
    void hienThiThongTin()
    {
        System.out.println("Gọi phương thức hienThiThongTin");  
    }
    public static void main(String[] args) {
        // Tạo đối tượng mới
        ViDuTuKhoaNew1 obj = new ViDuTuKhoaNew1();
        // Truy cập phương thức của đối tượng
        obj.hienThiThongTin();
    }  
}

Như các bạn thấy, sau khi tạo 1 class và định nghĩa phương thức hienThiThongTin() thì chúng ta chưa truy cập được phương thức đó ngay.

Mà phải tạo 1 đối tượng (thể hiện) của class đó thì mới truy cập được:

ViDuTuKhoaNew1 obj = new ViDuTuKhoaNew1();

Sau đó, các bạn có thể dùng đối tượng (thể hiện) vừa tạo để truy cập các phương thức, biến đối tượng của nó.

obj.hienThiThongTin();

Kết quả nhận được là:

Gọi đến phương thức hienThiThongTin

Cách 2: dùng từ khóa new và tham chiếu đến constructor tương ứng.

Như các bạn đã biết, khi tạo đối tượng, chương trình sẽ tự động gọi đến constructor tương ứng (nếu có định nghĩa rõ ràng constructor) hoặc nếu không có thì tự tạo và gọi đến constructor mặc định.

public class ViDuTuKhoaNew2 {

    ViDuTuKhoaNew2() {
        System.out.println("Gọi đến constructor tương ứng");
    }

    public static void main(String[] args) {
        // Tạo đối tượng mới
        ViDuTuKhoaNew2 obj = new ViDuTuKhoaNew2();
    }
}

Khi chạy chương trình, chúng ta nhận được kết quả là:

Gọi đến constructor tương ứng

Cách 3: Gọi từ khóa new để khởi tạo đối tượng mới có đối số.

Ví dụ, ở đây mình định nghĩa 1 class là Student và thực hiện get / set cho class này.

class Student {
    private String MSSV;
    private String ten;

    // Hàm (constructor) khởi tạo đối tượng
    public Student(String MSSV, String ten) {
        this.MSSV = MSSV;
        this.ten = ten;
    }

    // Các hàm get, set thuộc tính của đối tượng
    public String LayMSSV() {
        return this.MSSV;
    }

    public String LayTen() {
        return this.ten;
    }

    public void DatMSSV(String MSSV) {
        this.MSSV = MSSV;
    }

    public void DatTen(String ten) {
        this.ten = ten;
    }
}

Tiếp đó mình tạo 1 class Main (trong cùng file Main.java) để thực hiện 1 số hành động dùng class Student.

class Main {
    public static void main(String[] args) {
        // Khai báo 1 đối tượng Student và khởi tạo nó luôn, cùng 1 dòng lệnh
        Student student = new Student("B1714757", "Tran Thanh Tam");
        // Thao tác với đối tượng vừa được khởi tạo
        System.out.println("Trước khi chỉnh sửa:");
        System.out.println("Mã số sinh viên: " + student.LayMSSV());
        System.out.println("Tên sinh viên: " + student.LayTen());

        student.DatMSSV("B1704948");
        student.DatTen("Nguyen Viet Tu");

        System.out.println("Sau khi chỉnh sửa:");
        System.out.println("Mã số sinh viên: " + student.LayMSSV());
        System.out.println("Tên sinh viên: " + student.LayTen());
    }
}

Khi định nghĩa xong class Student thì bạn chưa dùng được chúng, chưa gọi đến được các phương thức của nó.

Bởi vì bạn mới chỉ lập 1 bản kế hoạch thôi.

Sau khi dùng từ khóa new, ví dụ như thế này:

Student student = new Student("B1714757", "Tran Thanh Tam");

Thì 1 sinh viên thực thụ mới được tạo ra (được cấp phát bộ nhớ)

Ở đây, mình truyền đối số trong khi new đối tượng để tận dụng constructor tạo ra các thông tin ban đầu của sinh viên luôn.

Kết quả có được như thế này:

Trước khi chỉnh sửa:
Mã số sinh viên: B1714757
Tên sinh viên: Tran Thanh Tam
Sau khi chỉnh sửa:
Mã số inh viên: B1704948
Tên sinh viên: Nguyen Viet Tu

Nếu bạn không tạo đối tượng, thì bạn không thể truy cập, chỉnh sửa như thế này được đâu:

student.DatMSSV("B1704948");
student.DatTen("Nguyen Viet Tu");

Cách 4: dùng từ khóa new để tạo mảng

Đúng vậy, bạn có thể tạo 1 mảng bằng cách dùng từ khóa new:

public class ViDuTuKhoaNew4 {  

    // Tạo 1 đối tượng mảng
    static int arr[]=new int[5];
    
    public static void main(String[] args) {  
        System.out.println("Độ dài của mảng là: "+ arr.length);  
    }
}

Lưu ý, ta dùng từ khóa static khi tạo mảng đối tượng để truy cập mà không cần tạo đối tượng mới.

Kết quả nhận được là:

Độ dài của mảng là: 5

Hoặc nếu bạn tạo đối tượng mảng mới trong phương thưc main thì không cần static, ví dụ:

public class ViDuTuKhoaNew4 {  

    public static void main(String[] args) {
        // Tạo 1 đối tượng mảng
        int arr[]=new int[5];
        System.out.println("Độ dài của mảng là: "+ arr.length);  
    }
}

Khi chạy chương trình, chúng ta cũng nhận được kết quả tương tự:

Độ dài của mảng là: 5

II. Toán Tử Bit Trong Java

Các toán tử dạng bit cho phép mọi người thao tác trên từng bit riêng biệt trong các kiểu dữ liệu nguyên thuỷ. Toán tử Bit có thể áp dụng cho kiểu số nguyên integer, long, short, char, byte.

Giả sử A = 60, B = 13

Chuyển qua dạng nhị phân

A = 0011 1100

B = 0000 1101

Toán tử Mô tả Ví dụ
& Bitwise and A & B = 0000 1100
| Bitwise or A || B = 0011 1101
^ Bitwise xor A ^ B = 0011 0001
~ Bitwise đảo bit ~A = 1100 0011
<< Left shift A << 2 = 1111 0000
>> Right shift A >> 2 = 1111
>>> Righ shift fill zero A >> 2 = 0000 1111

dùng hàm Integer.toBinaryString() để chuyển 1 số nguyên sang số dạng bit.

public class Main {
    public static void main(String[] args) {
        int a = 60, b = 13;
        int c;
        System.out.println("bit a: " + Integer.toBinaryString(a));
        System.out.println("bit b: " + Integer.toBinaryString(b));
        c = a & b;
        System.out.println("Ket qua phep (&): " + Integer.toBinaryString(c));
        c = a | b;
        System.out.println("Ket qua phep (|): " + Integer.toBinaryString(c));
        c = a ^ b;
        System.out.println("Ket qua phep (^): " + Integer.toBinaryString(c));
        c = ~a;
        System.out.println("Ket qua phep (~): " + Integer.toBinaryString(c));
        c = a << 2;
        System.out.println("Ket qua phep (<<): " + Integer.toBinaryString(c));
        c = a >>2;
        System.out.println("Ket qua phep (>>): " + Integer.toBinaryString(c));
        c = a >>>2;
        System.out.println("Ket qua phep (>>>): " + Integer.toBinaryString(c));
    }
}

III. Toán Tử Instanceof Trong Java

Toán tử instanceof trong Java là 1 toán tử được dùng để kiểm tra xem đối tượng này có phải là instance của 1 class hay interface nào đấy hay không? Kết quả trả về của toán tử này sẽ là true nếu đối tượng đấy là thể hiện của class mà bạn đang check, ngược lại thì false.

Ví dụ, mình có 1 class Application dưới đây:

package com.huongdanjava.java;

public class Application {

public static void main(String[] args) {
Application application = new Application();
System.out.println(application instanceof Application);
}

Trong hàm main() của class này, mình initialize 1 đối tượng của class Application và dùng toán tử instanceof để kiểm tra xem đối tượng này có phải là instance của class Application này hay không? bạn sẽ thấy kết quả sẽ dưới đây:

Nếu bạn viết code dưới đây:

package com.huongdanjava.java;

public class Application {

public static void main(String[] args) {
Application application = new Application();
System.out.println(application instanceof String);
}

}

thì IDE sẽ báo lỗi ngay:

Đây là trong trường hợp quá tường minh, quá rõ ràng, IDE có thể báo lỗi cho bạn biết ngay.

Nhưng nếu bạn có 1 interface với 2 implementation dưới đây:

package com.huongdanjava.java;

public interface Shape {

}
package com.huongdanjava.java;

public class Triangle implements Shape {

}
package com.huongdanjava.java;

public class Rectangle {

}

thì lúc này nếu bạn initialize đối tượng của class Triangle nhưng lại đi kiểm tra đối tượng này có phải là thể hiện của class Rectangle,

package com.huongdanjava.java;

public class Application {

public static void main(String[] args) {
Shape shape = new Triangle();

System.out.println(shape instanceof Rectangle);
}

}

IDE sẽ không thể detect lỗi lúc compile time nhưng khi chạy bạn sẽ thấy kết quả dưới đây:

Chúng ta sẽ thường dùng toán tử instanceof trong trường hợp kiểm tra xem tham số truyền vào của 1 phương thức có phải là instance của 1 class nào đấy hay không? Ví dụ như:

private void check(Shape shape) {
    if (shape instanceof Triangle) {
        Triangle triangle = (Triangle) shape;

        System.out.println("This is triangle: " + triangle.toString());
    }
}

Trong phương thức trên, tham số interface Shape có nhiều implementation khác nhau, trong phần body của phương thức, chúng ta sẽ check xem là instance được truyền vào phương thức này có phải là Triangle hay không? Nếu đúng thì xử lý code tiếp.
Kết quả:

package com.huongdanjava.java;

public class Application {

private void check(Shape shape) {
if (shape instanceof Triangle) {
Triangle triangle = (Triangle) shape;

System.out.println("This is triangle: " + triangle.toString());
}
}

public static void main(String[] args) {
Application application = new Application();
application.check(new Triangle());
}

}

Từ Java 14, bạn có thể viết lại phương thức check() dùng pattern matching instanceof, đơn giản dưới đây:

private void check(Shape shape) {
    if (shape instanceof Triangle triangle) {
        System.out.println("This is triangle: " + triangle.toString());
    }
}

Với cách viết mới, chúng ta không cần viết thêm 1 dòng code để cast instance về đối tượng mà chúng ta muốn nữa. Tất cả sẽ được thực hiện trong dòng lệnh if.

Kết quả vẫn như vậy:

IV. Toán Tử Gán Trong Java

Chương trình ví dụ đơn giản như sau minh họa những toán tử gán trong Java. Copy và paste chương trình Java này trong Test.java file và sau đó biên dịch và thực thi chương trình này:

TOÁN TỬ MIÊU TẢ VÍ DỤ: B = 20, A = 10
= Toán tử gán đơn giản. Gán giá trị toán hạng bên phải cho toán hạng trái. C = A + B sẽ gán giá trị của A + B vào cho C
+= Thêm giá trị toán hạng phải tới toán hạng trái và gán giá trị đó cho toán hạng trái. C += A là tương đương với C = C + A
-= Trừ đi giá trị toán hạng phải từ toán hạng trái và gán giá trị này cho toán hạng trái. C -= A là tương đương với C = C – A
*= Nhân giá trị toán hạng phải với toán hạng trái và gán giá trị này cho toán hạng trái. C *= A là tương đương với C = C * A
/= Chia toán hạng trái cho toán hạng phải và gán giá trị này cho toán hạng trái. C /= A là tương đương với C = C / A
%= Lấy phần dư của phép chia toán hạng trái cho toán hạng phải và gán cho toán hạng trái. C %= A là tương đương với C = C % A
<<= Dịch trái toán hạng trái sang số vị trí là giá trị toán hạng phải. C <<= 2 là giống như C = C << 2
>>= Dịch phải toán hạng trái sang số vị trí là giá trị toán hạng phải. C >>= 2 là giống như C = C >> 2
&= Phép AND bit C &= 2 là giống như C = C & 2
^= Phép OR loại trừ bit C ^= 2 là giống như C = C ^ 2
|= Phép OR bit. C |= 2 là giống như C = C | 2
public class Test {

  public static void main(String args[]) {
     int a = 10;	
     int b = 20;
     int c = 0;

     c = a + b;
     System.out.println("c = a + b = " + c );

     c += a ;
     System.out.println("c += a  = " + c );

     c -= a ;
     System.out.println("c -= a = " + c );

     c *= a ;
     System.out.println("c *= a = " + c );

     a = 10;
     c = 15;
     c /= a ;
     System.out.println("c /= a = " + c );

     a = 10;
     c = 15;
     c %= a ;
     System.out.println("c %= a  = " + c );

     c <<= 2 ;
     System.out.println("c <<= 2 = " + c );

     c >>= 2 ;
     System.out.println("c >>= 2 = " + c );

     c >>= 2 ;
     System.out.println("c >>= a = " + c );

     c &= a ;
     System.out.println("c &= 2  = " + c );
  
     c ^= a ;
     System.out.println("c ^= a   = " + c );

     c |= a ;
     System.out.println("c |= a   = " + c );
  }
}

Nó sẽ cho kết quả như sau:

c = a + b = 30
c += a  = 40
c -= a = 30
c *= a = 300
c /= a = 1
c %= a  = 5
c <<= 2 = 20
c >>= 2 = 5
c >>= 2 = 1
c &= a  = 0
c ^= a   = 10
c |= a   = 10

Các bạn không được dùng toán tử gán này để gán giá trị boolean cho 1 biến có kiểu dữ liệu là char, byte, short, int, long hay float, hay double và ngược lại. Nếu cố gắng làm điều đó thì sẽ bị lỗi compile ngay.

Bạn không thể gán 1 biến mà kiểu dữ liệu của nó có khoảng giá trị lớn hơn sang 1 biến có kiểu giá trị có khoảng giá trị nhỏ hơn.

Ví dụ, chúng ta không thể gán 1 biến có kiểu long sang biến có kiểu int như sau:

đó là bởi vì khoảng giá trị của kiểu long lớn hơn int rất nhiều.

– Các toán tử còn lại bao gồm “+=“, “-=“, “*=“, “/=” là dạng viết tắt của của phép tính cộng trừ nhân chia với toán tử gán.

“+=”: đầu tiên là cộng sau đó là gán.

“-=”: đầu tiên là trừ sau đó là gán.

“*=”: đầu tiên là nhân sau đó là gán.

“/=”: đầu tiền là chia sau đó là gán.

Ví dụ chúng ta có phép tính như sau:

   
a += b;

có nghĩa là

1
a = a + b;

Hay

Java
a -= b;
1
a -= b;

có nghĩa là

Toán Tử Xor

Phép toán thao tác bit XOR lấy hai dãy bit có cùng độ dài và thực hiện phép toán logic bao hàm XOR trên mỗi cặp bit tương ứng. Kết quả ở mỗi vị trí là 1 chỉ khi bit đầu tiên là 1 hoặc nếu chỉ khi bit thứ hai là 1, nhưng sẽ là 0 nếu cả hai là 0 hoặc cả hai là 1. Ở đây ta thực hiện phép so sánh hai bit, kết quả là 1 nếu hai bit khác nhau và là 0 nếu hai bit giống nhau. Ví dụ:

0101 (số thập phân 5)

XOR 0011 (số thập phân 3)

0110 (số thập phân 6)

(cách nhớ dễ nhất là: 2 bit giống nhau trả về 0, 2 bit khác nhau trả về 1)

Bảng chân trị cho XOR:

Phép toán thao tác bit XOR có thể được dùng để đảo ngược các bit được lựa chọn trong thanh ghi (còn được gọi là bật (set) hoặc lật (flip)). Bất kỳ bit nào được bật bằng cách thực hiện phép toán thao tác bit XOR nó với 1. Ví dụ: cho dãy bit 0010 (số 2 thập phân), bit thứ hai và thứ tư có thể được kích hoạt bằng cách dùng phép toán thao tác bit XOR với 1 dãy bit có chứa 1 ở vị trí thứ hai và thứ tư:

0010 (số thập phân 2) XOR 1010 (số thập phân 10) = 1000 (số thập phân 8)

Kỹ thuật này có thể được dùng để điều khiển dãy bit biểu hiện các bộ chứa phép toán logic đúng sai (boolean).

Trong C, C++, Java, C#, toán tử thao tác bit XOR được biểu diễn bằng ký hiệu “^” (dấu mũ). Trong Pascal, toán tử này là “xor”. Ví dụ:

x = y ^ z; // C

Hay:

x:= y xor z;

Câu lệnh trên sẽ gáp trình thienmaonline.vnên hợp ngữ (Assembly) thường dùng toán tử XOR để gán giá trị của 1 thanh ghi (register) về 0. Khi thực hiện phép toán XOR cho 1 mẫu bit với chính bản thân nó, mẫu nhị phân nhận được sẽ toàn bit 0. Trên nhiều kiến trúc máy tính, dùng XOR để gán 0 cho 1 thanh ghi sẽ được CPU xử lý nhanh hơn so với chuỗi thao tác tương ứng để nạp và lưu giá trị 0 vào thanh ghi.

Toán Tử Or

Phép toán trên thao tác bit OR lấy hai dãy bit có độ dài bằng nhau và thực hiện phép toán lý luận bao hàm OR trên mỗi cặp bit tương ứng. Kết quả ở mỗi vị trí sẽ là 0 nếu cả hai bit là 0, ngược lại thì kết quả là 1. Ví dụ:

0101 (số thập phân 5)

OR 0011 (số thập phân 3)

= 0111 (số thập phân 7)

Bảng chân trị cho OR:

Phép toán thao tác bit XOR có thể được dùng để đảo ngược các bit được lựa chọn trong thanh ghi (còn được gọi là bật (set) hoặc lật (flip)). Bất kỳ bit nào được bật bằng cách thực hiện phép toán thao tác bit XOR nó với 1. Ví dụ: cho dãy bit 0010 (số 2 thập phân), bit thứ 2 và thứ tư có thể được kích hoạt bằng cách dùng phép toán thao tác bit XOR với 1 dãy bit có chứa 1 ở vị trí thứ hai và thứ tư:

0010 (số thập phân 2)

XOR 1010 (số thập phân 10)

= 1000 (số thập phân 8)

Kỹ thuật này có thể được dùng để điều khiển dãy bit biểu hiện các bộ chứa phép toán logic đúng sai (boolean).

Trong C, C++, Java, C#, toán tử thao tác bit XOR được biểu diễn bằng ký hiệu “^” (dấu mũ). Trong Pascal, toán tử này là “xor”. Ví dụ:

x = y ^ z; // C

Hay:

x:= y xor z; { Pascal }

Câu lệnh trên sẽ gáp trình viên hợp ngữ (Assembly) thường dùng toán tử XOR để gán giá trị của 1 thanh ghi (register) về 0. Khi thực hiện phép toán XOR cho 1 mẫu bit với chính bản thân nó, mẫu nhị phân nhận được sẽ toàn bit 0. Trên nhiều kiến trúc máy tính, dùng XOR để gán 0 cho 1 thanh ghi sẽ được CPU xử lý nhanh hơn so với chuỗi thao tác tương ứng để nạp và lưu giá trị 0 vào thanh ghi.

XIV. Toán Tử Logic Trong Java

Toán tử logic được sử dụng để kiểm tra tính đúng đắn của một hoặc nhiều biểu thức. Giá trị trả về của các biểu thức này là 1 giá trị kiểu boolean, true hoặc false. Trong Java, ta có các toán tử logic như sau:

AND (&&)

OR (||)

NOT (!)

Toán tử AND

Toán tử AND được sử dụng trong trường hợp chúng ta có hai hay nhiều biểu thức và chúng ta cần tất cả các biểu thức đó đều đúng, có nghĩa là kết quả trả về của chúng đều là true.

Ví dụ:

int a = 10;
int b = 15;
int c = 200;
System.out.println(c > a && c > b);

Ở đây ta có hai biểu thức là c > a và c > b và toán tử AND được sử dụng để chắc chắn rằng giá trị của c đều lớn hơn hai giá trị của hai biến còn lại là a và b.

Toán tử OR

Toán tử OR cũng được sử dụng trong trường hợp chúng ta có hai hay nhiều biểu thức và chúng ta chỉ cần 1 trong các biểu thức đó là đúng, nghĩa là giá trị của nó là true. Các biểu thức còn lại true hay false đều được nhưng ít nhất phải có 1 cái là true.

Ví dụ:

int a = 10;
int b = 15;
int c = 200;
System.out.println(c > a || b > c);

Trong ví dụ này, ta chỉ cần c lớn a là được rồi, b có lớn hơn c hay không cũng ko sao. 😀

Toán tử NOT

Toán tử NOT dùng để đảo ngược kết quả của một hay nhiều biểu thức trả về giá trị boolean. Có nghĩa nếu 1 biểu thức bất kỳ trả về giá trị true, sử dụng toán tử NOT thì kết quả cuối cùng sẽ là ngược lại với true, là false.

Ví dụ:

int a = 10;
int b = 15;
System.out.println(!(a > b));

Kết quả của ví dụ này là true bởi vì a không lớn hơn b, false, đảo ngược lại sẽ là true.

Để bạn hiểu rõ hơn về kết quả của các biểu thức sử dụng với toán tử logic, mình đưa ra bảng dưới đây, ta thường gọi nó là bảng chân trị:

Toán tử AND (&&) Toán tử OR (||)  Toán tử NOT (!) 
true && true => true true || true => true !true => false
true && false => false true || false => true !false => true
false && true => false false || true => true
false && false => false false || false => false
true && true && false => false false || false || true => true

Nhìn vào bảng trên ta có thể thấy

Toán tử AND chỉ có thể trả về true nếu tất cả các kết quả của biểu thức đều là true, nếu một trong số chúng là false thì kết quả sẽ là false.

Toán tử OR chỉ trả về false nếu tất cả các kết quả của biểu thức là false, ngược lại, chỉ cần một biểu thức là true thì kết quả sẽ là true.

Toán tử NOT thì đảo ngược kết quả có giá trị boolean.

XV. Thứ Tự Ưu Tiên Toán Tử Trong Java

Toán tử trong lập trình cũng có những thứ tự ưu tiên giống như các phép toán của chúng ta ngoài đời thực (vd: nhân chia trước cộng trừ sau). Trong Java độ ưu tiên các toán tử sẽ được sắp xếp như sau (Toán tử nào có độ ưu tiên cao hơn sẽ được thực thi trước).

Bảng dưới đây liệt kê thứ tự ưu tiên của các toán tử. Những toán tử với quyền ưu tiên cao nhất xuất hiện trên cùng của bảng, và các toán tử có quyền ưu tiên thấp nhất thì ở bên dưới cùng của bảng. Trong 1 biểu thức, các toán tử có quyền ưu tiên cao nhất được tính toán đầu tiên.

Cùng xem ảnh sau để biết thứ tự ưu tiên của các loại toán tử trong Java:

Thứ Tự Ưu Tiên Toán Tử Trong Java
Thứ Tự Ưu Tiên Toán Tử Trong Java

The post Các Toán Tử Trong Java first appeared on Techacademy.

source https://techacademy.edu.vn/cac-toan-tu-trong-java/

Extends Trong Java

Khi chúng ta nói về tính kế thừa, từ khóa thường xuyên nhất được sử dụng là extends trong java và implements trong java. Những từ khóa này có thể định nghĩa 1 kiểu là loại IS-A của loại khác. Sử dụng những từ khóa, chúng ta có thể tạo 1 đối tượng sử dụng thuộc tính của đối tượng khác.

Chúng ta sử dụng từ khóa extends của lớp con để có thể kế thừa những thuộc tính của lớp cha trừ những thuộc tính private của lớp cha. Bài viết này mình sẽ giới thiệu cho các bạn hiểu về tính kế thừa trong java. Qua đây hi vọng các bạn có thể tự viết được 1 class kế thừa từ class khác để giải quyết 1 bài toán.

I. Extends Trong Java Là Gì

Tính kế thừa trong Java là 1 kỹ thuật mà trong đó 1 đối tượng thu được tất cả thuộc tính và hành vi của đối tượng cha. Ý tưởng đằng sau tính kế thừa trong Java là bạn có thể tạo những lớp mới mà được xây dựng dựa trên những lớp đang tồn tại.

Khi các bạn kế thừa từ 1 lớp đang tồn tại, bạn có thể tái sử dụng những phương thức và những trường của lớp cha, và các bạn cũng có thể bổ sung thêm những phương thức và những trường khác. Tính kế thừa biểu diễn mối quan hệ IS-A, còn được gọi là mối quan hệ cha-con.

Như vậy, để hiểu 1 cách thực tế, giả sử đầu tiên chúng ta có 1 lớp nào đó, lớp này có thể là do chúng ta viết ra, hay “lượm lặt” ở đâu đó, mình tạm gọi tên lớp sẵn có này là A. Sau đó, để tận dụng lại những hàm hay những thuộc tính của A mà không cần phải viết lại (hoặc copy lại, có thể vi phạm bản quyền), thì chúng ta xây dựng 1 lớp mới kế thừa từ A, mình gọi lớp mới này là B.

Khi đó B của chúng ta sẽ có sẵn những phương thức và thuộc tính mà A có. Cũng có lúc không vì mục đích dùng lại những giá trị của A, mà là vì 1 vài giá trị của A không phù hợp với nhu cầu của B, thế là việc kế thừa từ A còn giúp cho B có cơ hội được hoàn thiện lại (hay còn gọi là mở rộng) những giá trị chưa phù hợp đó của A mà không làm thay đổi bản chất của A.

Vì sao sử dụng tính kế thừa trong Java?

  • Để ghi đè phương thức (Method Overriding), do đó có thể thu được tính đa hình tại runtime.
  • Để làm tăng tính tái sử dụng của code.

II. Cách Sử Dụng Extends?

Cú pháp của kế thừa trong Java

Sử dụng từ khóa extends để kế thừa.

class Subclass-name extends Superclass-name {  
   //methods and fields
}

Từ khóa extends có ý nghĩa rằng các bạn đang tạo 1 lớp mới và kế thừa từ 1 lớp đang tồn tại. Trong Java, 1 lớp mà được kế thừa được gọi là lớp cha, lớp kế thừa là lớp con.

Cách sử dụng Extends

Hãy cùng Techacademy xem qua 1 ví dụ sau:

Tạo 1 tập tin là: myClass.java

public class myClass {
        
        public myClass() {
            // Construct
        }
        
        int number = 200;
    }

Tiếp theo tạo file TwoClass.java

public class TwoClass extends myClass {
    public TwoClass() {
        // Constructor
    }
    public static void main(String[] args) {
        
        TwoClass obj = new TwoClass();
        System.out.println(obj.number);
    }
}

Ví dụ chúng ta có các class A,B.Class A có 1 phương thức để hiển thị là show(). Class B gồm hai phương thức display() và show() nhưng Class B kế thừa từ class A. Sau đó chúng ta sẽ tạo ra đối tượng dựa vào class B rồi gọi phương thức show, kết quả trả về sẽ là “better show” chứ không phải là “show”. Lý do vì class B đã extends từ class A thì nếu có 2 phương thức của lớp cha trùng tên thì sẽ ghì đè lên phương thức trùng tên của lớp con.

Dưới đây là 1 ví dụ của extends trong Java:

class A {
  public void show() {
    System.out.println("show");
  }
}

class B extends A {
  public void display() {
    System.out.println("display");
  }

  public void show() {
    System.out.println("better show");
  }
}

public class Main {

  public static void main(String[] args) {

    A a = new B(); // possible because B extends A
    a.show(); // this will now call to show() method of class B
  }
}

Output
better show

III. Ví Dụ Extends Trong Java

Có 3 kiểu kế thừa trong java là đơn kế thừa, kế thừa nhiều cấp, kế thừa thứ bậc.

Khi 1 class được kế thừa từ nhiều class đươc gọi là đa kế thừa. Trong java, đa kế thừa chỉ được support thông qua interface, như đã được nói đến trong bài interface trong java

Ví dụ về đơn kế thừa

File: TestInheritance1.java

class Animal {
    void eat() {
        System.out.println("eating...");
    }
}
 
class Dog extends Animal {
    void bark() {
        System.out.println("barking...");
    }
}
 
public class TestInheritance1 {
    public static void main(String args[]) {
        Dog d = new Dog();
        d.bark();
        d.eat();
    }
}

Output:

barking...
eating...

Ví dụ về kế thừa nhiều cấp

File: TestInheritance2.java

class Animal {
    void eat() {
        System.out.println("eating...");
    }
}
 
class Dog extends Animal {
    void bark() {
        System.out.println("barking...");
    }
}
 
class BabyDog extends Dog {
    void weep() {
        System.out.println("weeping...");
    }
}
 
public class TestInheritance2 {
    public static void main(String args[]) {
        BabyDog d = new BabyDog();
        d.weep();
        d.bark();
        d.eat();
    }
}

Kết quả là:

weeping...
barking...
eating...

Ví dụ về kế thừa thứ bậc

File: TestInheritance3.java

class Animal {
    void eat() {
        System.out.println("eating...");
    }
}
 
class Dog extends Animal {
    void bark() {
        System.out.println("barking...");
    }
}
 
class Cat extends Animal {
    void meow() {
        System.out.println("meowing...");
    }
}
 
public class TestInheritance3 {
    public static void main(String args[]) {
        Cat c = new Cat();
        c.meow();
        c.eat();
        // c.bark(); // compile error
    }
}

Kết quả là:

meowing...
eating...

III. Phân Biệt Extends Và Implements Trong Java

Phân biệt Extends và Implements trong Java là một trong những câu hỏi trong phỏng vấn thường xuyên gặp. Extends và Implements là 2 từ khóa được sử dụng rất nhiều trong Java. Tuy nhiên 1 số lập trình viên mới học chưa nắm được sự khác biệt thì ở bài viết này sẽ cụ thể hóa vấn đề này.

Extends: kế thừa các class

Implements: kế thừa các interface

Mặc dù cả 2 Extends và Implements trong Java được sử dụng để thực hiện kế thừa nhưng có các sự khác biệt giữa chúng. Extends được sử dụng để kế thứ từ 1 class khác trong khi đó Implements cũng được sử dụng để kế từ các Interface

Cách sử dụng Extends ?

Ví dụ chúng ta có các class A,B.Class A có một phương thức để hiển thị là show(). Class B gồm hai phương thức display() và show() nhưng Class B kế thừa từ class A. Sau đó chúng ta sẽ tạo ra đối tượng dựa vào class B rồi gọi phương thức show, kết quả trả về sẽ là “better show” chứ không phải là “show”. Lý do vì class B đã extends từ class A thì nếu có hai phương thức của lớp cha trùng tên thì sẽ ghì đè lên phương thức trùng tên của lớp con.

Dưới đây là một ví dụ của Extends trong Java:

class A {
  public void show() {
    System.out.println("show");
  }
}

class B extends A {
  public void display() {
    System.out.println("display");
  }

  public void show() {
    System.out.println("better show");
  }
}

public class Main {

  public static void main(String[] args) {

    A a = new B(); // possible because B extends A
    a.show(); // this will now call to show() method of class B
  }
}

Output
better show

Cách sử dụng Implements ?

Ở ví dụ dưới chúng ta có 1 class R và implements từ interface Runnable thì bắt buộc rằng class R phải orver @Override tất cả các phương thức trừu tượng của interface Runnable.Ở đây là method run().

class R implements Runnable{
public void run(){
   System.out.println("do nothing");
  }
}

Điểm khác biệt quan trọng :

Dưới đây là 1 số điểm khác biệt quan trọng của Extends và Implements trong Java :

1) Một class có thể kế thừa từ 1 class khác, không thể Extends từ 1 Interface.

interface I{

}

class A{
}

class B extends A{

}

class C extends I{

}

Khi bạn chương trình chạy và biên dịch thì sẽ xuất hiện lỗi sau:

$ javac Main.java
Main.java:27: no interface expected here
class C extends I{
^
1 error

2) Khi sử dụng Extends, 1 class chỉ có thể kế thừa từ một class khác, dưới đây là code thông báo lỗi khi cố gắng Extends từ nhiều class:

class C extends A, B{

}

$ javac Main.java
Main.java:27: '{' expected
class C extends A, B{
^
1 error

3) Một Interface có thể Extends từ một Interface khác.

interface J extends I{

}

4) Một class có thể kế thừa từ nhiều Interface khác bằng cách sử dụng Implements, đoạn code dưới đây thể hiện :

class D implements I, J, K{

}

5) Strong một lớp có thể sử dụng Extends và Implements.

class E extends A implements I, J{

}

6) Một Interface không thể Implements từ một  Interface, nó không thể xảy ra cho nên lúc này khi chạy chương trình, nó sẽ xảy ra ngoại lệ :

interface L implements J{

}

javac Main.java
Main.java:49: '{' expected
interface L implements J{
^
1 error

Đó là tất cả về sự khác biệt giữa Extends và Implements trong Java. Bài viết nói lên những sự khác biết là kinh nghiệm trong lập trình của Techacademy có được, hy vọng bạn đọc xem và áp dụng được ở thực tế.

Phân Biệt Extends Và Implements Trong Java
Phân Biệt Extends Và Implements Trong Java

The post Extends Trong Java first appeared on Techacademy.

source https://techacademy.edu.vn/extends-trong-java/