Java類(lèi)和對(duì)象全面解析
1,面向?qū)ο蟮某醪秸J(rèn)識(shí)
Java是??純?向?qū)ο蟮恼Z(yǔ)?(ObjectOrientedProgram,簡(jiǎn)稱(chēng)OOP),在?向?qū)ο蟮氖澜?,?切皆為對(duì)象。?向?qū)ο笫墙鉀Q問(wèn)題的?種思想,主要依靠對(duì)象之間的交互完成?件事情。??向?qū)ο蟮乃枷雭?lái)設(shè)計(jì)程序,更符合?們對(duì)事物的認(rèn)知,對(duì)于?型程序的設(shè)計(jì)、擴(kuò)展以及維護(hù)都?常友好。
相比于面向過(guò)程,面向?qū)ο蟾镁S護(hù)
個(gè)人認(rèn)為面向?qū)ο笫前延嘘P(guān)對(duì)象的所有事物寫(xiě)在類(lèi)里面
2, 類(lèi)
類(lèi)的格式
class ClassName{
field;//字段(屬性)或者成員變量
method;// ?為或者成員?法
}class為類(lèi)定義的關(guān)鍵字,Classname為類(lèi)名,{}里是類(lèi)的主體
類(lèi)中包含的內(nèi)容稱(chēng)為類(lèi)的成員。屬性主要是?來(lái)描述類(lèi)的,稱(chēng)之為類(lèi)的成員屬性或者類(lèi)成員變量。?法主要說(shuō)明類(lèi)具有哪些功能,稱(chēng)為類(lèi)的成員?法。
以豌豆射手為例

class PeaShooter {
//類(lèi)的成員變量
public int HP; //生命值
public int cost; //費(fèi)用
public int ATK; //攻擊
public double firingInterval; //射擊間隔
//類(lèi)的成員方法
public void attackTheZombies() { //攻擊僵尸
System.out.println("攻擊僵尸");
}
}- 類(lèi)名采用大駝峰(單詞首字母都大寫(xiě))定義
- 類(lèi)的成員方法名采用小駝峰(第一個(gè)單詞首字母小寫(xiě),其余首字母大寫(xiě))
注意
- 一個(gè)文件當(dāng)中只定義一個(gè)類(lèi)
- public修飾的類(lèi)必須要和文件名相同
- 不要輕易去修改public修飾的類(lèi)的名稱(chēng),如果要修改,通過(guò)開(kāi)發(fā)?具修改
類(lèi)的實(shí)例化
定義了?個(gè)類(lèi),就相當(dāng)于在計(jì)算機(jī)中定義了?種新的類(lèi)型,?類(lèi)類(lèi)型創(chuàng)建對(duì)象的過(guò)程,稱(chēng)為類(lèi)的實(shí)例化,在java中采?new關(guān)鍵字,配合類(lèi)名來(lái)實(shí)例化對(duì)象。說(shuō)白了就是創(chuàng)建一個(gè)類(lèi)。
public static void main(String[] args) {
PeaShooter bob = new PeaShooter();
PeaShooter dave = new PeaShooter();
}訪(fǎng)問(wèn)對(duì)象中的成員
PeaShooter bob = new PeaShooter(); //new實(shí)例化 bob.HP = 300; bob.cost = 100; bob.ATK = 20; bob.firingInterval = 1.4; bob.AttackTheZombies();
- 通過(guò) . 來(lái)訪(fǎng)問(wèn)對(duì)象中的屬性和?法
- 同?個(gè)類(lèi)可以創(chuàng)建多個(gè)實(shí)例
3, 對(duì)象
this關(guān)鍵字
為什么要有this引??
如下代碼定義了?個(gè)Date類(lèi),Date類(lèi)中包含3個(gè)屬性分別是year,month,day。分別使?setDay和 printDate對(duì)進(jìn)?設(shè)置和打印?期
public class Date {
public int year;
public int month;
public int day;
public void setDay(int y, int m, int d){
year = y;
month = m;
day = d;
}
public void printDate(){
System.out.println(year + "/" + month + "/" + day);
}
public static void main(String[] args) {
//構(gòu)造三個(gè)?期類(lèi)型的對(duì)象d1 d2 d3
Date d1 = new Date();
Date d2 = new Date();
Date d3 = new Date();
//對(duì)d1,d2,d3的?期設(shè)置
d1.setDay(2026,5,15);
d2.setDay(2026,5,16);
d3.setDay(2026,5,17);
//打印?期中的內(nèi)容
d1.printDate();
d2.printDate();
d3.printDate();
}
}如果形參名和成員變量名相同會(huì)發(fā)生什么?
public void setDay(int year, int month, int day){
year = year;
month = month;
day = day;
}結(jié)果是year = 0,month = 0,day = 0,局部?jī)?yōu)先,所有year = year都是形參,成員變量就會(huì)使用默認(rèn)值0。
三個(gè)對(duì)象都在調(diào)?setDate和printDate函數(shù),但是這兩個(gè)函數(shù)中沒(méi)有任何有關(guān)對(duì)象的說(shuō)明, setDate和printDate函數(shù)如何知道打印的是那個(gè)對(duì)象的數(shù)據(jù)呢?
this引?指向當(dāng)前對(duì)象(成員?法運(yùn)?時(shí)調(diào)?該成員?法的對(duì)象),在成員?法中所有成員變量的操作, 都是通過(guò)該引?去訪(fǎng)問(wèn)。只不過(guò)所有的操作對(duì)??是透明的,即用戶(hù)不需要來(lái)傳遞,編譯器?動(dòng)完成。
public class Date {
public int year;
public int month;
public int day;
public void setDay(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(this.year + "/" + this.month + "/" + this.day);
}
public static void main(String[] args) {
Date d = new Date();
d.setDay(2026,5,19);
d.printDate();
}
}this引用當(dāng)前對(duì)象d
this引用的特性
- this的類(lèi)型:對(duì)應(yīng)類(lèi)類(lèi)型引?,即哪個(gè)對(duì)象調(diào)?就是哪個(gè)對(duì)象的引?類(lèi)型
- this只能在"成員?法"中使?
- 在"成員?法"中,this只能引?當(dāng)前對(duì)象,不能再引?其他對(duì)象
- this是“成員?法”第?個(gè)隱藏的參數(shù),編譯器會(huì)?動(dòng)傳遞,在成員?法執(zhí)?時(shí),編譯器會(huì)負(fù)責(zé)將調(diào)?成員?法對(duì)象的引?傳遞給該成員?法,this負(fù)責(zé)來(lái)接收
public void setDay(Date this,int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(Date this){
System.out.println(this.year + "/" + this.month + "/" + this.day);
}形參里面的this一般是隱藏的
對(duì)象的構(gòu)造及初始化
在Java?法內(nèi)部定義?個(gè)局部變量時(shí),必須要初始化,否則會(huì)編譯失敗,那么類(lèi)對(duì)象怎樣初始化呢?
1.用方法傳值
public static void main(String[] args) {
Date d = new Date();
d.printDate();
d.setDate(2026,5,20);
d.printDate();
}每次對(duì)象創(chuàng)建好后調(diào)?SetDate?法設(shè)置具體?期,比較麻煩,那對(duì)象該如何初始化?
局部變量必須要初始化才能使?,為什么字段聲明之后沒(méi)有給值依然可以使??
默認(rèn)初始化
對(duì)于成員變量來(lái)說(shuō),如果沒(méi)有進(jìn)?初始化,會(huì)有?個(gè)對(duì)應(yīng)的默認(rèn)值
| 類(lèi)型 | 默認(rèn)值 |
|---|---|
| byte | 0 |
| short | 0 |
| int | 0 |
| long | 0 |
| float | 0.0f |
| double | 0.0 |
| char | /u0000 |
| boolean | false |
| reference | null |
缺省參數(shù)(默認(rèn)值)初始化
public class Date {
public int year = 1900;
public int month = 1;
public int day = 1;
public Date(){
}
public Date(int year, int month, int day) {
}
public static void main(String[] args) {
Date d1 = new Date(2026,5,20);
Date d2 = new Date();
}
}沒(méi)有傳參數(shù)的就用上面的默認(rèn)值初始化
構(gòu)造方法初始化
構(gòu)造?法(也稱(chēng)為構(gòu)造器)是?個(gè)特殊的成員?法,名字必須與類(lèi)名相同,在創(chuàng)建對(duì)象時(shí),由編譯器?動(dòng)調(diào)?,并且在整個(gè)對(duì)象的?命周期內(nèi)只調(diào)??次。
public class Date {
public int year;
public int month;
public int day;
public Date(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
System.out.println("Date(int,int,int)?法被調(diào)?了 ");
}
public void printDate(Date this){
System.out.println(this.year + "/" + this.month + "/" + this.day);
}
public static void main(String[] args) {
//此處創(chuàng)建了?個(gè)Date類(lèi)型的對(duì)象,并沒(méi)有顯式調(diào)?構(gòu)造?法
Date d = new Date(2026,5,20); //輸出Date(int,int,int)?法被調(diào)?了
d.printDate(); // 2026/5/20
}
}注意事項(xiàng):
- 名字必須和類(lèi)名相同
- 沒(méi)有返回值類(lèi)型,設(shè)置為void也不?
- 創(chuàng)建對(duì)象時(shí)由編譯器?動(dòng)調(diào)?,并且在對(duì)象的?命周期內(nèi)只調(diào)??次(相當(dāng)于?的出?,每個(gè)?只能出??次)
- 構(gòu)造?法可以重載(用戶(hù)根據(jù)??的需求提供不同參數(shù)的構(gòu)造?法)
根據(jù)參數(shù)不同調(diào)用不同的構(gòu)造(如果有的話(huà))
public class Date {
public int year;
public int month;
public int day;
public Date() {
this.year = 2026;
this.month = 1;
this.day = 1;
System.out.println("Date()?法被調(diào)?了 ");
}
public Date(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
System.out.println("Date(int,int,int)?法被調(diào)?了 ");
}
public void printDate(Date this){
System.out.println(this.year + "/" + this.month + "/" + this.day);
}
public static void main(String[] args) {
//此處創(chuàng)建了?個(gè)Date類(lèi)型的對(duì)象,并沒(méi)有顯式調(diào)?構(gòu)造?法
Date d1 = new Date(2026,5,20); //輸出Date(int,int,int)?法被調(diào)?了
Date d2 = new Date();
d1.printDate(); // 2026/5/20
d2.printDate(); // 2026/1/1
}
}
如果用戶(hù)沒(méi)有顯式定義,編譯器會(huì)?成?份默認(rèn)的構(gòu)造?法,?成的默認(rèn)構(gòu)造?法?定是?參的,
數(shù)值全是取的默認(rèn)值,如果用戶(hù)顯式定義了構(gòu)造方法就不會(huì)調(diào)用默認(rèn)構(gòu)造
構(gòu)造?法中,可以通過(guò)this調(diào)?其他構(gòu)造?法來(lái)簡(jiǎn)化代碼
public Date(){
this(1900, 1, 1);
}
// 帶有三個(gè)參數(shù)的構(gòu)造?法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}- this(...)必須是構(gòu)造方法的第一條語(yǔ)句
- 不能形成環(huán)的調(diào)用(a調(diào)用b,b同時(shí)調(diào)用a)
對(duì)象的打印
public class Person {
String name;
String gender;
int age;
public Person(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
public static void main(String[] args) {
Person person = new Person("Jim"," 男 ", 18);
System.out.println(person);//Person@4eec7777
}
}如果我們直接打印對(duì)象的引?,此時(shí)輸出的結(jié)果為:類(lèi)路徑名@對(duì)象的hashcode值
如果想要默認(rèn)打印對(duì)象中的屬性該如何處理呢?答案:重寫(xiě)toString?法即可
public class Person {
String name;
String gender;
int age;
public Person(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
@Override
public String toString() {
return "[" + name + "," + gender + "," + age + "]";
}
public static void main(String[] args) {
Person person = new Person("Jim","男", 18);
System.out.println(person);
}
}重寫(xiě)會(huì)在多態(tài)講到
4,包
4.1 定義
包(Package)是Java中一個(gè)組織類(lèi)的方式,用于防止類(lèi)名沖突和提高代碼的可讀性。包允許將類(lèi)組織在一個(gè)層次中,類(lèi)似于文件系統(tǒng)中的目錄。文件夾
包是對(duì)類(lèi),接口等的封裝機(jī)制的體現(xiàn),是一種對(duì)類(lèi)或者接口等的很好的組織方式。
4.2 導(dǎo)入包
Java中提供了很多現(xiàn)成的類(lèi)供我們使用。例如Date類(lèi),可以使用java.util.Date導(dǎo)入java.util這個(gè)包中的Date類(lèi),指定類(lèi)的路徑。
public class Test {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();
//得到?個(gè)毫秒級(jí)別的時(shí)間戳
System.out.println(date.getTime());
}
}常用import語(yǔ)句導(dǎo)入包
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date.getTime());
}
}如果需要使用java.util中的其他類(lèi),可以用import java.util.*,*是通配符
import java.util.*;
但是還是顯示指定要導(dǎo)入的類(lèi)名,否則可能會(huì)出現(xiàn)沖突的情況
import java.util.*;
import java.sql.*;
public class Test {
public static void main(String[] args) {
// util 和 sql 中都存在?個(gè) Date 這樣的類(lèi), 此時(shí)就會(huì)出現(xiàn)歧義, 編譯出錯(cuò)
Date date = new Date();
System.out.println(date.getTime());
}
}不同包里如果有相同名字的類(lèi)就會(huì)出錯(cuò),這種情況就要寫(xiě)出完整的類(lèi)名
使用import static導(dǎo)入包中靜態(tài)的方法和字段
import static java.lang.Math.*;
public class Test {
public static void main(String[] args) {
double x = 30;
double y = 40;
// 靜態(tài)導(dǎo)?的?式寫(xiě)起來(lái)更?便?些
// double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
double result = sqrt(pow(x, 2) + pow(y, 2));
System.out.println(result);
}
}不建議使用這種方法
4.3 自定義包
4.3.1 基本規(guī)則
- 在文件的最上方加上一個(gè)package語(yǔ)句指定該代碼在哪個(gè)包中
- 包名需要盡量指定成唯一的名字,通常會(huì)用公司的域名的顛倒形式(例如net.csdn.blog)
- 包名要和代碼路徑相匹配,創(chuàng)建net.csdn.blog的包就會(huì)存在一個(gè)對(duì)應(yīng)的路徑net/csdn/blog來(lái)存儲(chǔ)代碼
- 如果一個(gè)類(lèi)沒(méi)有package語(yǔ)句,類(lèi)會(huì)放在一個(gè)默認(rèn)包中
idea中新建包


4.3.2 常見(jiàn)的包
java.lang: 系統(tǒng)常?基礎(chǔ)類(lèi) (String 、 Object), 此包從 JDK1.1 后?動(dòng)導(dǎo)?。 java.lang.reflect:java 反射編程包 ;
java.net: 進(jìn)??絡(luò)編程開(kāi)發(fā)包。
java.sql: 進(jìn)?數(shù)據(jù)庫(kù)開(kāi)發(fā)的?持包。
java.util: 是 java 提供的?具程序包。 ( 集合類(lèi)等 )
java.io:I/O 編程開(kāi)發(fā)包。
4.4 包的訪(fǎng)問(wèn)權(quán)限
如果我們?cè)诙?個(gè)類(lèi)的時(shí)候,如果沒(méi)有指定成員變量/成員?法的訪(fǎng)問(wèn)權(quán)限,此時(shí)默認(rèn)的訪(fǎng)問(wèn)權(quán)限就是包訪(fǎng)問(wèn)權(quán)限
private String cpu; private String memory; public String screen; String brand;
像brand就是默認(rèn)權(quán)限(包訪(fǎng)問(wèn)權(quán)限),在下面訪(fǎng)問(wèn)限定符中會(huì)具體講解
5,封裝
5.1 封裝的概念
面向?qū)ο蟮娜筇匦裕?strong>封裝,繼承,多態(tài)。封裝簡(jiǎn)單來(lái)說(shuō)就是套殼屏蔽細(xì)節(jié)(封閉包裝)
封裝:將數(shù)據(jù)和操作數(shù)據(jù)的?法進(jìn)?有機(jī)結(jié)合,隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外公開(kāi)接?來(lái)和對(duì)象進(jìn)?交互
class Student{
private String name; //使? private 修飾
private int age; //使? private 修飾
public void eat() {
System.out.println(this.name + " 正在吃飯!");
}
public void show() {
System.out.println("name: "+name+" 年齡:"+age);
}
}
public class Test {
public static void main(String[] args) {
Student stu= new Student();
}
}上述代碼使?private修飾之后,在Test類(lèi)中?法通過(guò)person引?來(lái)進(jìn)?訪(fǎng)問(wèn)數(shù)據(jù),這?封裝就起到 了作?! 如果要想訪(fǎng)問(wèn),此時(shí)只能?動(dòng)提供get和set?法作為公開(kāi)的接口來(lái)進(jìn)?訪(fǎng)問(wèn)。
idea中快速生成get和set方法
- 右鍵點(diǎn)生成


2.會(huì)在光標(biāo)處自動(dòng)生成
5.2 封裝的好處
1.降低代碼的耦合性
封裝可以降低對(duì)象和對(duì)象之間的耦合度,當(dāng)對(duì)象內(nèi)部發(fā)?變化時(shí),只需要修改對(duì)象內(nèi)部即可,不會(huì)影響到外部程序,因?yàn)楣_(kāi)的接口是不會(huì)發(fā)?改變的
2.降低代碼的復(fù)雜性
封裝是隱藏了對(duì)象內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),只提供了公開(kāi)的接口給外部,使?起來(lái)更加簡(jiǎn)單
3.提高安全性
封裝可以隱藏對(duì)象的具體實(shí)現(xiàn)細(xì)節(jié),阻?外部程序直接訪(fǎng)問(wèn)對(duì)象的內(nèi)部狀態(tài),從?保護(hù)數(shù)據(jù)不被意外修改或破壞
5.3 訪(fǎng)問(wèn)限定符詳解
Java中主要通過(guò)類(lèi)和訪(fǎng)問(wèn)權(quán)限來(lái)實(shí)現(xiàn)封裝:類(lèi)可以將數(shù)據(jù)以及封裝數(shù)據(jù)的?法結(jié)合在?起,更符合?類(lèi)對(duì)事物的認(rèn)知,?訪(fǎng)問(wèn)權(quán)限?來(lái)控制?法或者字段能否直接在類(lèi)外使?。Java中提供了四種訪(fǎng)問(wèn)限定符:
| 編號(hào) | 范圍 | 私有(private) | 默認(rèn)(default) | 保護(hù)(protected) | 公有(public) |
|---|---|---|---|---|---|
| 1 | 同一包中的同一類(lèi) | √ | √ | √ | √ |
| 2 | 同一包中的不同類(lèi) | √ | √ | √ | |
| 3 | 不同包中的子類(lèi) | √ | √ | ||
| 4 | 不同包中的非子類(lèi) | √ |
- public修飾的成員變量,在所指情況下都是可以正常訪(fǎng)問(wèn)的
- private只能在當(dāng)前類(lèi)中使用
- default是什么都不加,只能在包當(dāng)中才能訪(fǎng)問(wèn)
6,static關(guān)鍵字
6.1 修飾成員變量
class Student{
private String name;
private int age;
public static String classRoom = "1-101";
}
public class Test {
public static void main(String[] args) {
Student stu1 = new Student();
Student stu2 = new Student();
Student stu3 = new Student();
}
}被static修飾的成員,稱(chēng)之為靜態(tài)成員,也可以稱(chēng)為類(lèi)成員,其不屬于某個(gè)具體的對(duì)象,是所有對(duì)象所共享的。
靜態(tài)成員變量的特性
- 不屬于某個(gè)具體的對(duì)象,是類(lèi)的屬性,所有對(duì)象共享,不存儲(chǔ)在某個(gè)對(duì)象的空間中,存儲(chǔ)在方法區(qū)
- 既可以通過(guò)對(duì)象訪(fǎng)問(wèn),也可以通過(guò)類(lèi)名訪(fǎng)問(wèn),但?般更推薦使?類(lèi)名訪(fǎng)問(wèn)
- ?命周期伴隨類(lèi)的??(隨類(lèi)的加載?創(chuàng)建,隨類(lèi)的卸載?銷(xiāo)毀)
6.2 修飾成員方法
被static修飾的成員方法稱(chēng)為靜態(tài)成員方法,是類(lèi)的方法,不是某個(gè)對(duì)象所特有的。靜態(tài)成員?般是通過(guò)靜態(tài)方法來(lái)訪(fǎng)問(wèn)的
public class Student{
private static String classRoom = "409";
public static String getClassRoom(){
return classRoom;
}
}
public class TestStudent {
public static void main(String[] args) {
System.out.println(Student.getClassRoom());
}
}靜態(tài)方法特性
- 不屬于某個(gè)具體的對(duì)象,是類(lèi)?法
- 可以通過(guò)對(duì)象調(diào)?,也可以通過(guò)類(lèi)名.靜態(tài)?法名(...)?式調(diào)?,更推薦使?后者
- 不能在靜態(tài)?法中訪(fǎng)問(wèn)任何?靜態(tài)成員變量
- 在靜態(tài)?法中調(diào)?時(shí)候?法傳遞this引?
6.3 static成員變量初始化
靜態(tài)成員變量的初始化分為兩種:就地初始化和靜態(tài)代碼塊初始化
就地初始化
public static String classRoom = "1-101";
7,代碼塊
7.1 概念
就是{}里面的代碼,一共分為4類(lèi)
- 普通代碼塊
- 構(gòu)造塊
- 靜態(tài)塊
- 同步代碼塊
7.2 不同代碼塊的結(jié)構(gòu)
{ //直接使?定義,普通?法塊
int x = 10 ;
System.out.println("x1 = " +x);
}
//實(shí)例代碼塊
{
this.name = "cyy";
this.age = 12;
this.sex = "man";
}
// 靜態(tài)代碼塊
static {
classRoom = "409";
System.out.println("I am static init()!");
}注意
- 靜態(tài)代碼塊不管?成多少個(gè)對(duì)象,其只會(huì)執(zhí)??次
- 靜態(tài)成員變量是類(lèi)的屬性,因此是在JVM加載類(lèi)時(shí)開(kāi)辟空間并初始化的
- 如果?個(gè)類(lèi)中包含多個(gè)靜態(tài)代碼塊,在編譯代碼時(shí),編譯器會(huì)按照定義的先后次序依次執(zhí)?(合并)
- 實(shí)例代碼塊只有在創(chuàng)建對(duì)象時(shí)才會(huì)執(zhí)?
到此這篇關(guān)于Java類(lèi)和對(duì)象全面解析的文章就介紹到這了,更多相關(guān)Java類(lèi)和對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 在Java中如何將Object對(duì)象轉(zhuǎn)換為具體實(shí)體類(lèi)對(duì)象
- Java中類(lèi)與對(duì)象全面解析(附實(shí)例代碼)
- Java從入門(mén)到精通之旅類(lèi)和對(duì)象全面解析
- Java類(lèi)和對(duì)象習(xí)題及詳細(xì)答案解析
- Java如何通過(guò)反射機(jī)制獲取數(shù)據(jù)類(lèi)對(duì)象的屬性及方法
- Java 中 getClass() 方法的使用與原理深入分析(對(duì)象類(lèi)型信息)
- Java8流式API將實(shí)體類(lèi)列表轉(zhuǎn)換為視圖對(duì)象列表的示例
- JAVA面向?qū)ο笤O(shè)計(jì)寵物類(lèi)方式
- java如何將map數(shù)據(jù)存入到實(shí)體類(lèi)對(duì)象中
相關(guān)文章
java定時(shí)任務(wù)的實(shí)現(xiàn)方式
這篇文章主要介紹了java定時(shí)任務(wù)的實(shí)現(xiàn)方式,在應(yīng)用里經(jīng)常都有用到在后臺(tái)跑定時(shí)任務(wù)的需求,如何進(jìn)行java定時(shí)任務(wù),本文為大家進(jìn)行講解,感興趣的小伙伴們可以參考一下2016-02-02
Java數(shù)據(jù)結(jié)構(gòu)之圖的兩種搜索算法詳解
在很多情況下,我們需要遍歷圖,得到圖的一些性質(zhì)。有關(guān)圖的搜索,最經(jīng)典的算法有深度優(yōu)先搜索和廣度優(yōu)先搜索,接下來(lái)我們分別講解這兩種搜索算法,需要的可以參考一下2022-11-11
Java實(shí)現(xiàn)AES/CBC/PKCS7Padding加解密的方法
這篇文章主要介紹了Java實(shí)現(xiàn)AES/CBC/PKCS7Padding加解密的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
SpringBoot實(shí)現(xiàn)excel生成并且通過(guò)郵件發(fā)送的步驟詳解
實(shí)際開(kāi)發(fā)中,特別是在B端產(chǎn)品的開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到導(dǎo)出excel的功能,更進(jìn)階一點(diǎn)的需要我們定期生成統(tǒng)計(jì)報(bào)表,然后通過(guò)郵箱發(fā)送給指定的人員,?今天要帶大家來(lái)實(shí)現(xiàn)的就是excel生成并通過(guò)郵件發(fā)送,需要的朋友可以參考下2023-10-10
一篇文章帶你了解spring事務(wù)失效的多種場(chǎng)景
在日常編碼過(guò)程中常常涉及到事務(wù),在前兩天看到一篇文章提到了Spring事務(wù),那么在此總結(jié)下在Spring環(huán)境下事務(wù)失效的幾種原因.2021-09-09

