四個許可權修飾符
public > protected > 空的 > private
使用範圍
本類中 | 本包中 | 不同包的子類中 | 不同包中 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
空的 | √ | √ | ||
private | √ |
package com.a;
public class AAA {
//public
public void method1(){
}
//protected
protected void method2(){
}
//空的
void method3(){
}
//private
private void method4(){
}
public void method(){
method1();
method2();
method3();
method4();
}
}
public class BBB {
public void method(){
//建立物件
AAA a = new AAA();
a.method1();
a.method2();
a.method3();
//a.method4(); //private不能用
}
}
package com.a;
import com.itheima_01.AAA;
public class CCC extends AAA {
public void method(){
method1();
method2();
//method3(); //空的
//method4(); //private
}
}
public class DDD {
public void method(){
//建立物件
AAA a = new AAA();
a.method1();
//a.method2(); //protected
//a.method3(); //空的
//a.method4(); //private
}
}
程式碼塊就是一對兒大括號,不用呼叫能自動執行。
格式:
類中方法外:
static{
靜態程式碼塊;
}
執行時機:
使用場景:
格式:
類中方法外:
{
構造程式碼塊;
}
執行時機:
使用場景:
格式:
在方法中:
{
區域性程式碼塊;
}
作用:
package com.a;
public class Student {
String name;
int age;
static String country = "中國";
//靜態程式碼塊
static{
System.out.println("靜態程式碼塊");
}
//構造程式碼塊
{
System.out.println("構造程式碼塊");
}
//空參構造
public Student(){
System.out.println("空參構造");
}
//有參構造
public Student(String name, int age) {
this.name = name;
this.age = age;
System.out.println("有參構造");
}
}
public class Test01 {
public static void main(String[] args) {
Student s = new Student();
Student s2 = new Student("張灑",23);
System.out.println(Student.country);
}
}
/*
靜態程式碼塊
構造程式碼塊
空參構造
構造程式碼塊
有參構造
中國
*/
Object是所有類的父類別,所以類都繼承了Object的方法。
作用:
回顧==號:
int a = 10;
int b = 10;
String c = new String("abc");
String d = new String("abc");
System.out.println(a == b); //true
System.out.println(c == d); //false
==比較基本型別時,比較的是值是否相同
==比較參照型別時,比較的是地址值是否相同
檢視equals()原始碼:
public boolean equals(Object obj) {
return (this == obj);
}
Object中的equals方法判斷的也是地址值。
idea重寫equals()方法的解析:
public boolean equals(Object o) {
//如果地址值相同,說明成員變數值肯定相同
if (this == o) {
return true;
}
//判斷兩個物件是否是同種型別
if (o == null || this.getClass() != o.getClass()) {
return false;
}
//向下轉型
Student s = (Student) o;
//判斷年齡和姓名
return this.age == s.age &&
Objects.equals(this.name, s.name);
//this.name.equals(s.name);
}
Objects是Object的一個工具類
Objects的equals()原始碼解析:
作用:
原始碼:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
優點:
作用:
輸出語句:
檢視原始碼:
public String toString() {
// 包名 + 類名 + "@" + 地址值的十六進制形式
return this.getClass().getName() + "@" + Integer.toHexString(hashCode());
}
使用idea完成方法重寫:
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
被native所修飾的方法叫本地方法。
這些方法的底層用到了一些別的語言,比如說C語言,原始碼無法在java中顯示,所以這些方法不能檢視原始碼。
方法 | 說明 |
---|---|
public Date() | 用當前時間建立時間物件 |
public Date(long date) | 用毫秒值建立時間物件,毫秒值代表距離基準時間的差值時間 |
標準基準時間(稱爲「曆元(epoch)」,即1970年1月1日00:00:00 GMT)
範例程式碼:
public class Test01 {
public static void main(String[] args) {
//Date的構造方法
//new Date():代表當前時間
Date d = new Date();
System.out.println(d);
//new Date(long date):代表距離基準時間的差值時間
//1970年1月1日8點0分1秒
Date d2 = new Date(1000);
System.out.println(d2);
//1970年1月1日9點0分0秒
Date d3 = new Date(1000*60*60);
System.out.println(d3);
}
}
常用方法:
方法 | 說明 |
---|---|
getTime() | 獲取時間的毫秒值 |
setTime(long time) | 設定時間的毫秒值 |
before(Date date) | 判斷在某個時間之前 |
after(Date date) | 判斷在某個時間之後 |
package com.a;
import java.util.Date;
public class Test02 {
public static void main(String[] args) {
//建立物件
Date d = new Date();
Date d2 = new Date();
//getTime()
//獲取時間的毫秒值
long time = d.getTime();
System.out.println(time); //1597027887127 1970年1月1日到現在的毫秒值差值
//setTime(long time)
//設定時間的毫秒值
d.setTime(235252352377L);
System.out.println(d);
//判斷
System.out.println(d.after(d2)); //1977是否在2020之後 false
System.out.println(d.before(d2)); //1977是否在2020之前 true
}
}
概述:
建立物件:
SimpleDateFormat sdf = new SimpleDateFormat("日期格式");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒");
格式:
y 年
M 月
d 日
H 時
m 分
s 秒
DateFormat常用方法:
方法 | 說明 |
---|---|
String format(Date date) | 把日期按照指定格式轉成字串 |
Date parse(String s) | 把字串按照指定格式轉成日期 |
package com.a;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test03 {
public static void main(String[] args) throws ParseException {
//SimpleDateFormat構造方法
// 2020年08月10日 11時07分24秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒");
Date d = new Date();
System.out.println(d);
//String format(Date date)
//把日期按照指定格式轉成字串
String s = sdf.format(d);
System.out.println(s);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
//Date parse(String s)
//把字串按照指定格式轉成日期
String str = "2000/07/04";
//parse()這個方法會報錯,叫異常。解決辦法:在方法上按alt+enter enter
Date d2 = sdf2.parse(str);
System.out.println(d2);
//ParseException 解析異常,如果格式不匹配會出現
}
}
有一個字串「2000年01月01日」,要轉成「2000/01/01「的格式的字串
package com.a;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test04 {
//練習一
public static void main(String[] args) throws ParseException {
//字串
String s1 = "2000年07月08日";
//日期格式化
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日");
Date date = sdf1.parse(s1);
//日期格式化
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
String s2 = sdf2.format(date);
//要轉成"2000/01/01"
System.out.println(s2);
}
}
鍵盤輸入一個字串型別的時間,列印來到世界多少天。
比如:
請輸入你的出生日期:
2000/01/01
你來到這個世界7300天!
package com.a;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Test05 {
public static void main(String[] args) throws ParseException {
//鍵盤輸入一個字串生日
Scanner sc = new Scanner(System.in);
System.out.println("請輸入出生日期:(格式:xxxx/xx/xx)");
String s = sc.nextLine();
//轉成Date型別
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date birthDate = sdf.parse(s);
//現在時間
Date nowDate = new Date();
//獲取毫秒值
long time1 = birthDate.getTime();
long time2 = nowDate.getTime();
//計算
System.out.println("你來到這個世界"+ (time2-time1)/1000/60/60/24 +"天啦!");
}
}
方法 | 說明 |
---|---|
int get(int field) | 獲取某個欄位的值 |
void set(int field,int value) | 設定某個欄位的值 |
void add(int field,int amount) | 偏移某個欄位的值(在原有的基礎上加減) |
setTime(Date date) | 把Date物件的時間賦值給Calendar |
可以使用Calender中定義的常數來表示:
範例程式碼:
package com.a;
import java.util.Calendar;
public class Test06 {
//建立Calendar物件
public static void main(String[] args) {
//建立物件
Calendar c = Calendar.getInstance(); //預設代表當前時間
//get()
//獲取年 1 = YEAR
System.out.println(c.get(Calendar.YEAR)); //2020
//獲取月
System.out.println(c.get(Calendar.MONTH)+1); //8 特殊:Calendar類中月份儲存的是0-11
//獲取日
System.out.println(c.get(Calendar.DAY_OF_MONTH)); //10
//小時
System.out.println(c.get(Calendar.HOUR_OF_DAY));
//分鐘
System.out.println(c.get(Calendar.MINUTE));
//秒
System.out.println(c.get(Calendar.SECOND));
//星期
int n = c.get(Calendar.DAY_OF_WEEK);
System.out.println(week(n)); //星期一 出來的是2 特殊:美國週日是一週的第一天
// 1代表週日 2代表週一
}
//把數位轉成對應的星期
public static String week(int n){
String[] arr = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
return arr[n];
}
}
package com.a;
import java.util.Calendar;
public class Test07 {
public static void main(String[] args) {
//建立物件
Calendar c = Calendar.getInstance();
//set() :設定某個欄位的值
//把年設定爲2021年
c.set(Calendar.YEAR,2021);
//把月設定爲5月
c.set(Calendar.MONTH,4);
//把日設定成20日
c.set(Calendar.DAY_OF_MONTH,20);
//把年減10年
c.add(Calendar.YEAR,-10);
//把日加20天
c.add(Calendar.DAY_OF_MONTH,20);
//獲取
System.out.println(c.get(Calendar.YEAR) +"年"+(c.get(Calendar.MONTH)+1) + "月" + c.get(Calendar.DAY_OF_MONTH) + "日");
}
}
public class Test08 {
public static void main(String[] args) throws ParseException {
String str = "2000/07/04";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
//Date parse(String s)
//把字串按照指定格式轉成日期
Date d2 = sdf2.parse(str); //parse()這個方法會報錯,叫異常。解決辦法:在方法上按alt+enter enter
Calendar c = Calendar.getInstance();
//setTime(Date date) :把Date的時間設定給日曆物件
c.setTime(d2);
//c他就代表了2000年7月4日
}
}
方法 | 說明 |
---|---|
static int abs(int a) | 絕對值 |
static double ceil(double a) | 向上取整 |
static double floor(double a) | 向下取整 |
static double pow(double a, double b) | a的b次方 |
static long round(double a) | 四捨五入 |
public class Test01_Math {
public static void main(String[] args) {
//圓周率
System.out.println(Math.PI);
//static int abs(int a)
//絕對值
System.out.println(Math.abs(-4)); //4
//static double ceil(double a)
//向上取整
System.out.println(Math.ceil(3.2)); //4.0
//static double floor(double a)
//向下取整
System.out.println(Math.floor(3.8)); //3.0
//static double pow(double a, double b)
//a的b次方
System.out.println(Math.pow(2,3)); //8.0
//static long round(double a)
//四捨五入
System.out.println(Math.round(4.45)); //4
}
}
方法 | 說明 |
---|---|
static void exit(int status) | 退出虛擬機器 |
static long currentTimeMillis() | 獲取當前時間毫秒值 |
static void arrayCopy(五個參數) | 陣列內容拷貝 |
package com.a;
import java.util.Date;
public class Test02_System {
public static void main(String[] args) {
//static void exit(int status)
//退出虛擬機器
//0代表正常退出 其他數位代表不正常退出
//System.exit(0);
//static long currentTimeMillis()
//獲取當前時間毫秒值
long time2 = new Date().getTime();
System.out.println(time2);
long time = System.currentTimeMillis();
System.out.println(time);
//static void arrayCopy(五個參數)
//陣列內容拷貝
int[] arr = {11,22,33,44,55,66};
int[] brr = new int[6];
/*
Object src 代表源陣列
int srcPos 代表源陣列要複製的起始索引
Object dest 代表目標陣列
int destPos 代表目標陣列的起始索引
int length 代表要複製的元素個數
*/
//把arr陣列中22 33 44元素複製到brr陣列的前三個位置
System.arraycopy(arr,1,brr,0,3);
//把brr陣列的33 44複製到brr的最後
System.arraycopy(brr,1,brr,4,2);
//列印
for (int i = 0; i < brr.length; i++) {
System.out.print(brr[i]+" ");
}
//22 33 44 0 33 44
}
}
概述:
構造方法:
方法 | 說明 |
---|---|
BigInteger(String value) | 可以把字串整數變成物件 |
常用方法:
方法 | 說明 |
---|---|
add(BigInteger value) | 加法運算 |
subtract(BigInteger value) | 減法運算 |
multiply(BigInteger value) | 乘法運算 |
divide(BigInteger value) | 除法運算 |
程式碼範例:
package com.a;
import java.math.BigInteger;
public class Test03_BigInteger {
public static void main(String[] args) {
//建立物件
BigInteger b1 = new BigInteger("1000000000000000000000000");
BigInteger b2 = new BigInteger("100000000000000000000000");
//加法
System.out.println(b1.add(b2));
//減法
System.out.println(b1.subtract(b2));
//乘法
System.out.println(b1.multiply(b2));
//除法
System.out.println(b1.divide(b2));
}
}
方法 | 說明 |
---|---|
BigDecimal(double val) | 把小數數值變成BigDecimal物件 |
BigDecimal(String val) | 把字串值變成BigDecimal物件 |
方法 | 說明 |
---|---|
BigDecimal add(BigDecimal value) | 加法運算 |
BigDecimal subtract(BigDecimal value) | 減法運算 |
BigDecimal multiply(BigDecimal value) | 乘法運算 |
BigDecimal divide(BigDecimal value) | 除法運算 |
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) | 除法運算 |
scale代表保留小數點後位數,roundingMode代表儲存方式
package com.a;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Test04_BigDecimal {
public static void main(String[] args) {
//double不精確
//double d1 = 0.09;
//double d2 = 0.01;
//System.out.println(d1+d2); //0.09999999999999999 基本型別的小數底層儲存不精確
//建立物件
BigDecimal b1 = new BigDecimal("0.09");
BigDecimal b2 = new BigDecimal("0.01");
//加
System.out.println(b1.add(b2)); //0.10
//減
System.out.println(b1.subtract(b2));//0.08
//乘
System.out.println(b1.multiply(b2));//0.0009
//除
System.out.println(b1.divide(b2)); //9
System.out.println(10/3); //3
System.out.println(10/3.0); //3.3333333333333335
BigDecimal d3 = new BigDecimal("10.0");
BigDecimal d4 = new BigDecimal("3.0");
//除法
//第二個參數表示小數點後儲存位數,第三個參數表示省略方式
System.out.println(d3.divide(d4,2, RoundingMode.HALF_UP)); //ArithmeticException數學異常
}
}