欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)俄羅斯方塊游戲簡(jiǎn)單版

 更新時(shí)間:2022年01月16日 10:48:04   作者:NGC?2237號(hào)  
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)俄羅斯方塊游戲簡(jiǎn)單版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Java實(shí)現(xiàn)俄羅斯方塊游戲的具體代碼,供大家參考,具體內(nèi)容如下

游戲頁(yè)面效果如下:

俄羅斯方塊游戲本身的邏輯:

俄羅斯方塊游戲的邏輯是比較簡(jiǎn)單的。它就類似于堆砌房子一樣,各種各樣的方地形狀是不同的。但是,俄羅斯方塊游戲的界面被等均的分為若干行和若干列,因此方塊的本質(zhì)就是占用了多少個(gè)單元。

首先來(lái)考慮一下數(shù)據(jù)的問題。對(duì)于界面來(lái)說(shuō),需要一個(gè)二維的 int 型數(shù)組,它保存著那些地方應(yīng)該有著色,哪些沒有;然后是方塊本身,盡管它們的形狀不統(tǒng)一,但是它們可以用一個(gè)4X4比例的方塊所包圍,因此用16個(gè)字節(jié)就可以把一個(gè) 方塊的信息保存者,

注意:其實(shí)方塊的數(shù)據(jù)也可以用int 數(shù)組表示,但是涉及到效率問題,用位操作比用普通的算術(shù)運(yùn)算要快一點(diǎn)。

接下來(lái)思考一下動(dòng)作具體有下面幾點(diǎn):

(1)方塊的誕生。它的誕生是需要用隨機(jī)原理的,另外,它如何初始化的被放置在游戲界面的頂部?

(2)方塊是需要自動(dòng)的往下掉的,它在掉的過(guò)程中,還需要判斷它是否與周圍的環(huán)境是否發(fā)生了沖突,能不能繼續(xù)往下。

(3)方塊本身還可以變形,變形以后的方塊具有不同的數(shù)據(jù),判斷的方式又會(huì)不一樣。(4)當(dāng)用戶一直按住s鍵的時(shí)候,方塊還需要持續(xù)往下掉。

然后就是過(guò)程,玩家主要操作的地方有以下幾個(gè)方面:

(1) 左右操作。需要監(jiān)聽KeyEvent,讓方塊左右移動(dòng),直到碰到邊界。

(2) 變形操作。也要監(jiān)聽KeyEvent,讓方塊自動(dòng)的變形。

(3) 下降操作。也要監(jiān)聽KeyEvent,讓方塊快速的下降。

至于游戲的結(jié)束,只有一種情況, 那就是誕生的方塊出世就與其他方塊沖突了。

源程序代碼如下:注釋詳細(xì)

package tetris;
?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
?
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
?
public class Main extends JFrame implements KeyListener {
?? ?private JTextArea[][] grids;// 把整個(gè)界面變?yōu)橐粋€(gè)文本區(qū)域,整個(gè)游戲在里面進(jìn)行
?? ?private int data[][]; // 對(duì)于每個(gè)格子的數(shù)據(jù),1代表有方塊,0代表為空白區(qū)
?? ?private int[] allRect; // 所有的方塊類型,用16個(gè)字節(jié)來(lái)存儲(chǔ),俄羅斯方塊圖形都是在4*4格子里
?? ?private int rect; // 當(dāng)前游戲下落的方塊類型;
?? ?private int x, y; // 當(dāng)前方塊的坐標(biāo)位置,x代表行,y代表列
?? ?private int score = 0; // 記錄當(dāng)前游戲得分情況,每消一層得10分
?? ?private JLabel label; // 顯示分?jǐn)?shù)的標(biāo)簽
?? ?private JLabel label1;// 顯示游戲是否結(jié)束
?? ?private boolean running; // 用于判斷游戲是否結(jié)束
?? ?/*無(wú)參構(gòu)造函數(shù)*/
?? ?public Main() {
?? ??? ?grids = new JTextArea[26][12];//設(shè)置游戲區(qū)域行和列
?? ??? ?data = new int[26][12];//開辟data數(shù)組空間與游戲區(qū)域行和列一致
?? ??? ?allRect = new int[] { 0x00cc, 0x8888, 0x000f, 0x0c44, 0x002e, 0x088c, 0x00e8, 0x0c88, 0x00e2, 0x044c, 0x008e,
?? ??? ??? ??? ?0x08c4, 0x006c, 0x04c8, 0x00c6, 0x08c8, 0x004e, 0x04c4, 0x00e4 };//19種方塊形狀,如0x00cc就是 ? 0000 表示一個(gè)2*2的正方形方塊
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//0000?
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//1100?
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//1100
?? ??? ?label = new JLabel("score: 0"); //此標(biāo)簽存放得分情況,初始化為0分
?? ??? ?label1 = new JLabel("開始游戲"); //此標(biāo)簽為提示游戲狀態(tài):開始還是結(jié)束
?? ??? ?running = false; //為標(biāo)志變量,false為游戲結(jié)束,true為游戲正在進(jìn)行
?? ??? ?init(); // 游戲界面初始化
?? ?}
?? ?/*游戲界面初始化函數(shù)*/
?? ?public void init() {
?? ??? ?JPanel center = new JPanel(); //此面板為游戲核心區(qū)域
?? ??? ?JPanel right = new JPanel(); //此面板為游戲說(shuō)明區(qū)域
?? ??? ?center.setLayout(new GridLayout(26, 12, 1, 1)); //給游戲核心區(qū)域劃分行、列共26行,12列
?? ??? ?for (int i = 0; i < grids.length; i++) {//初始化面板
?? ??? ??? ?for (int j = 0; j < grids[i].length; j++) {
?? ??? ??? ??? ?grids[i][j] = new JTextArea(20, 20);
?? ??? ??? ??? ?grids[i][j].setBackground(Color.WHITE);
?? ??? ??? ??? ?grids[i][j].addKeyListener(this);// 添加鍵盤監(jiān)聽事件
?? ??? ??? ??? ?//初始化游戲邊界
?? ??? ??? ??? ?if (j == 0 || j == grids[i].length - 1 || i == grids.length - 1) {
?? ??? ??? ??? ??? ?grids[i][j].setBackground(Color.PINK);
?? ??? ??? ??? ??? ?data[i][j] = 1;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?grids[i][j].setEditable(false);// 文本區(qū)域不可編輯
?? ??? ??? ??? ?center.add(grids[i][j]); //把文本區(qū)域添加到主面板上
?? ??? ??? ?}
?? ??? ?}
?? ??? ?//初始化游戲說(shuō)明面板
?? ??? ?right.setLayout(new GridLayout(4, 1));
?? ??? ?right.add(new JLabel(" a : left ? ? ? ?d : right"));
?? ??? ?right.add(new JLabel(" s : down ? w : change"));
?? ??? ?right.add(label);
?? ??? ?label1.setForeground(Color.RED);// 設(shè)置標(biāo)簽內(nèi)容為紅色字體
?? ??? ?right.add(label1);
?? ??? ?//把主面板和說(shuō)明面板添加到窗體中
?? ??? ?this.setLayout(new BorderLayout());
?? ??? ?this.add(center, BorderLayout.CENTER);
?? ??? ?this.add(right, BorderLayout.EAST);
?? ??? ?running = true; //初始化running狀態(tài)為true,表示程序運(yùn)行即游戲開始
?? ??? ?this.setSize(600, 850);// 設(shè)置窗體大小
?? ??? ?this.setVisible(true);// 窗體可見
?? ??? ?this.setLocationRelativeTo(null);// 設(shè)置窗體居中
?? ??? ?this.setResizable(false);// 窗體大小不可改變
?? ??? ?this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 釋放窗體
?? ?}
?? ?/*主函數(shù)*/
?? ?public static void main(String[] args) {
?? ??? ?Main m = new Main(); //創(chuàng)建Main對(duì)象,主要用于初始化數(shù)據(jù)
?? ??? ?m.go();// 開始游戲
?? ?}
?? ?/*開始游戲*/
?? ?public void go() {// 開始游戲
?? ??? ?while (true) {//游戲開始直到游戲失敗才結(jié)束,否則一直執(zhí)行
?? ??? ??? ?if (running == false) {//如果游戲失敗
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ??? ?ranRect();// 繪制下落方格形狀
?? ??? ??? ?start();// 開始游戲
?? ??? ?}
?? ??? ?label1.setText("游戲結(jié)束!");//則游戲結(jié)束
?? ?}
?? ?/*繪制下落方格形狀*/
?? ?public void ranRect() {
?? ??? ?rect = allRect[(int) (Math.random() * 19)];// 隨機(jī)生成方塊類型(共7種,19個(gè)形狀)
?? ?}
?? ?/*游戲開始函數(shù)*/
?? ?public void start() {
?? ??? ?x = 0;
?? ??? ?y = 5; //初始化下落方塊的位置
?? ??? ?for (int i = 0; i < 26; i++) {//共26層,一層一層下落
?? ??? ??? ?try {
?? ??? ??? ??? ?Thread.sleep(1000);//每層延時(shí)1秒
?? ??? ??? ??? ?if (canFall(x, y) == false) {// 如果不可以掉落
?? ??? ??? ??? ??? ?saveData(x, y);//把此方塊區(qū)域data[][]標(biāo)志為1,表示有數(shù)據(jù)
?? ??? ??? ??? ??? ?for (int k = x; k < x + 4; k++) {//循環(huán)遍歷4層,看是否有哪一層都有方塊的情況,以便消除那一行方格和統(tǒng)計(jì)得分
?? ??? ??? ??? ??? ??? ?int sum = 0;
?? ??? ??? ??? ??? ??? ?for (int j = 1; j <= 10; j++) {
?? ??? ??? ??? ??? ??? ??? ?if (data[k][j] == 1) {
?? ??? ??? ??? ??? ??? ??? ??? ?sum++;
?? ??? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?if (sum == 10) {//如果k層都有方塊,則消除k層方塊
?? ??? ??? ??? ??? ??? ??? ?removeRow(k);
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?for (int j = 1; j <= 10; j++) {//游戲最上面的4層不能有方塊,否則游戲失敗
?? ??? ??? ??? ??? ??? ?if (data[3][j] == 1) {
?? ??? ??? ??? ??? ??? ??? ?running = false;
?? ??? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?// 如果可以掉落
?? ??? ??? ??? ?x++;// 層加一
?? ??? ??? ??? ?fall(x, y);// 掉下來(lái)一層
?? ??? ??? ?} catch (InterruptedException e) {
?? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ?}
?
?? ??? ?}
?? ?}
?? ?/*判斷正下落的方塊是否可以下落*/
?? ?public boolean canFall(int m, int n) {
?? ??? ?int temp = 0x8000;//表示1000 0000 0000 0000
?? ??? ?for (int i = 0; i < 4; i++) {//循環(huán)遍歷16個(gè)方格(4*4)
?? ??? ??? ?for (int j = 0; j < 4; j++) {
?? ??? ??? ??? ?if ((temp & rect) != 0) {// 此處有方塊時(shí)
?? ??? ??? ??? ??? ?if (data[m + 1][n] == 1)// 如果下一個(gè)地方有方塊,則直接返回false
?? ??? ??? ??? ??? ??? ?return false;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?n++;//列加一
?? ??? ??? ??? ?temp >>= 1;
?? ??? ??? ?}
?? ??? ??? ?m++;// 下一行
?? ??? ??? ?n = n - 4;// 回到首列
?? ??? ?}
?? ??? ?return true;//可以掉落返回true
?? ?}
?? ?/*把不可下降的方塊的對(duì)應(yīng)的data存儲(chǔ)為1,表示此坐標(biāo)有方塊*/
?? ?public void saveData(int m, int n) {
?? ??? ?int temp = 0x8000;//表示1000 0000 0000 0000
?? ??? ?for (int i = 0; i < 4; i++) {//循環(huán)遍歷16個(gè)方格(4*4)
?? ??? ??? ?for (int j = 0; j < 4; j++) {
?? ??? ??? ??? ?if ((temp & rect) != 0) {// 此處有方塊時(shí)
?? ??? ??? ??? ??? ?data[m][n] = 1;//data數(shù)組存放為1
?? ??? ??? ??? ?}
?? ??? ??? ??? ?n++;//下一列
?? ??? ??? ??? ?temp >>= 1;
?? ??? ??? ?}
?? ??? ??? ?m++;// 下一行
?? ??? ??? ?n = n - 4;// 回到首列
?? ??? ?}
?? ?}
?? ?/*移除row行所有方塊,以上的依次往下降*/
?? ?public void removeRow(int row) {
?? ??? ?for (int i = row; i >= 1; i--) {
?? ??? ??? ?for (int j = 1; j <= 10; j++) {
?? ??? ??? ??? ?data[i][j] = data[i - 1][j];//
?? ??? ??? ?}
?? ??? ?}
?? ??? ?reflesh();// 刷新移除row行方塊后的游戲主面板區(qū)域
?? ??? ?score += 10;// 分?jǐn)?shù)加10;
?? ??? ?label.setText("score: " + score);//顯示得分
?? ?}
?? ?/* 刷新移除row行方塊后的游戲主面板區(qū)域*/
?? ?public void reflesh() {
?? ??? ?for (int i = 1; i < 25; i++) {
?? ??? ??? ?for (int j = 1; j < 11; j++) {
?? ??? ??? ??? ?if (data[i][j] == 1) {//有方塊的地方把方塊設(shè)置為綠色
?? ??? ??? ??? ??? ?grids[i][j].setBackground(Color.GREEN);
?? ??? ??? ??? ?} else {//無(wú)方塊的地方把方塊設(shè)置為白色
?? ??? ??? ??? ??? ?grids[i][j].setBackground(Color.WHITE);
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?/*方塊掉落一層*/
?? ?public void fall(int m, int n) {
?? ??? ?if (m > 0)// 方塊下落一層時(shí)
?? ??? ??? ?clear(m - 1, n);// 清除上一層有顏色的方塊
?? ??? ?draw(m, n);// 重新繪制方塊圖像
?? ?}
?? ?/*清除方塊掉落之前有顏色的地方*/
?? ?public void clear(int m, int n) {
?? ??? ?int temp = 0x8000;//表示1000 0000 0000 0000
?? ??? ?for (int i = 0; i < 4; i++) {//循環(huán)遍歷16個(gè)方格(4*4)
?? ??? ??? ?for (int j = 0; j < 4; j++) {
?? ??? ??? ??? ?if ((temp & rect) != 0) {// 此處有方塊時(shí)
?? ??? ??? ??? ??? ?grids[m][n].setBackground(Color.WHITE);//清除顏色,變?yōu)榘咨?
?? ??? ??? ??? ?}
?? ??? ??? ??? ?n++;//下一列
?? ??? ??? ??? ?temp >>= 1;
?? ??? ??? ?}
?? ??? ??? ?m++;//下一行
?? ??? ??? ?n = n - 4;//回到首列
?? ??? ?}
?? ?}
?? ?/*繪制掉落后方塊圖像*/
?? ?public void draw(int m, int n) {
?? ??? ?int temp = 0x8000;//表示1000 0000 0000 0000
?? ??? ?for (int i = 0; i < 4; i++) {//循環(huán)遍歷16個(gè)方格(4*4)
?? ??? ??? ?for (int j = 0; j < 4; j++) {
?? ??? ??? ??? ?if ((temp & rect) != 0) {// 此處有方塊時(shí)
?? ??? ??? ??? ??? ?grids[m][n].setBackground(Color.GREEN);//有方塊的地方變?yōu)榫G色
?? ??? ??? ??? ?}
?? ??? ??? ??? ?n++;//下一列
?? ??? ??? ??? ?temp >>= 1;
?? ??? ??? ?}
?? ??? ??? ?m++;//下一行
?? ??? ??? ?n = n - 4;//回到首列
?? ??? ?}
?? ?}
?
?? ?@Override
?? ?public void keyPressed(KeyEvent e) {
?? ?}
?
?? ?@Override
?? ?public void keyReleased(KeyEvent e) {
?? ?}
?
?? ?@Override
?? ?public void keyTyped(KeyEvent e) {
?? ??? ?if (e.getKeyChar() == 'a') {// 方格進(jìn)行左移
?? ??? ??? ?if (running == false) {
?? ??? ??? ??? ?return;
?? ??? ??? ?}
?? ??? ??? ?if (y <= 1)//碰到左邊墻壁時(shí)
?? ??? ??? ??? ?return;
?? ??? ??? ?int temp = 0x8000;//表示1000 0000 0000 0000
?? ??? ??? ?for (int i = x; i < x + 4; i++) {//循環(huán)遍歷16個(gè)方格(4*4)
?? ??? ??? ??? ?for (int j = y; j < y + 4; j++) {
?? ??? ??? ??? ??? ?if ((rect & temp) != 0) {// 此處有方塊時(shí)
?? ??? ??? ??? ??? ??? ?if (data[i][j - 1] == 1) {//如果左移一格有方塊時(shí)
?? ??? ??? ??? ??? ??? ??? ?return;
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?temp >>= 1;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?clear(x, y);//可以進(jìn)行左移操作時(shí),清除左移前方塊顏色
?? ??? ??? ?y--;
?? ??? ??? ?draw(x, y);//然后重新繪制左移后方塊的圖像
?? ??? ?}
?? ??? ?if (e.getKeyChar() == 'd') {//方塊進(jìn)行右移操作
?? ??? ??? ?if (running == false) {
?? ??? ??? ??? ?return;
?? ??? ??? ?}
?? ??? ??? ?int temp = 0x8000;
?? ??? ??? ?int m = x, n = y;
?? ??? ??? ?int num = 7;
?? ??? ??? ?for (int i = 0; i < 4; i++) {
?? ??? ??? ??? ?for (int j = 0; j < 4; j++) {
?? ??? ??? ??? ??? ?if ((temp & rect) != 0) {
?? ??? ??? ??? ??? ??? ?if (n > num) {
?? ??? ??? ??? ??? ??? ??? ?num = n;
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?temp >>= 1;
?? ??? ??? ??? ??? ?n++;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?m++;
?? ??? ??? ??? ?n = n - 4;
?? ??? ??? ?}
?? ??? ??? ?if (num >= 10) {
?? ??? ??? ??? ?return;
?? ??? ??? ?}
?? ??? ??? ?temp = 0x8000;
?? ??? ??? ?for (int i = x; i < x + 4; i++) {
?? ??? ??? ??? ?for (int j = y; j < y + 4; j++) {
?? ??? ??? ??? ??? ?if ((rect & temp) != 0) {
?? ??? ??? ??? ??? ??? ?if (data[i][j + 1] == 1) {
?? ??? ??? ??? ??? ??? ??? ?return;
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?temp >>= 1;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?clear(x, y);//可以進(jìn)行右移操作時(shí),清除右移前方塊顏色
?? ??? ??? ?y++;
?? ??? ??? ?draw(x, y);//然后重新繪制右移后方塊的圖像
?? ??? ?}
?? ??? ?if (e.getKeyChar() == 's') {//方塊進(jìn)行下移操作
?? ??? ??? ?if (running == false) {
?? ??? ??? ??? ?return;
?? ??? ??? ?}
?? ??? ??? ?if (canFall(x, y) == false) {
?? ??? ??? ??? ?saveData(x, y);
?? ??? ??? ??? ?return;
?? ??? ??? ?}
?? ??? ??? ?clear(x, y);//可以進(jìn)行下移操作時(shí),清除下移前方塊顏色
?? ??? ??? ?x++;
?? ??? ??? ?draw(x, y);//然后重新繪制下移后方塊的圖像
?? ??? ?}
?? ??? ?if (e.getKeyChar() == 'w') {//改變方塊形狀
?? ??? ??? ?if (running == false) {
?? ??? ??? ??? ?return;
?? ??? ??? ?}
?? ??? ??? ?int i = 0;
?? ??? ??? ?for (i = 0; i < allRect.length; i++) {//循環(huán)遍歷19個(gè)方塊形狀
?? ??? ??? ??? ?if (allRect[i] == rect)//找到下落的方塊對(duì)應(yīng)的形狀,然后進(jìn)行形狀改變
?? ??? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ??? ?if (i == 0)//為正方形方塊無(wú)需形狀改變,為方塊圖形種類1
?? ??? ??? ??? ?return;
?? ??? ??? ?clear(x, y);
?? ??? ??? ?if (i == 1 || i == 2) {//為方塊圖形種類2
?? ??? ??? ??? ?rect = allRect[i == 1 ? 2 : 1];
?? ??? ??? ??? ?if (y > 7)
?? ??? ??? ??? ??? ?y = 7;
?? ??? ??? ?}
?? ??? ??? ?if (i >= 3 && i <= 6) {//為方塊圖形種類3
?? ??? ??? ??? ?rect = allRect[i + 1 > 6 ? 3 : i + 1];
?? ??? ??? ?}
?? ??? ??? ?if (i >= 7 && i <= 10) {//為方塊圖形種類4
?? ??? ??? ??? ?rect = allRect[i + 1 > 10 ? 7 : i + 1];
?? ??? ??? ?}
?? ??? ??? ?if (i == 11 || i == 12) {//為方塊圖形種類5
?? ??? ??? ??? ?rect = allRect[i == 11 ? 12 : 11];
?? ??? ??? ?}
?? ??? ??? ?if (i == 13 || i == 14) {//為方塊圖形種類6
?? ??? ??? ??? ?rect = allRect[i == 13 ? 14 : 13];
?? ??? ??? ?}
?? ??? ??? ?if (i >= 15 && i <= 18) {//為方塊圖形種類7
?? ??? ??? ??? ?rect = allRect[i + 1 > 18 ? 15 : i + 1];
?? ??? ??? ?}
?? ??? ??? ?draw(x, y);
?? ??? ?}
?? ?}
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談Java中ThreadLocal引發(fā)的內(nèi)存泄漏

    淺談Java中ThreadLocal引發(fā)的內(nèi)存泄漏

    本文主要介紹了淺談Java中ThreadLocal引發(fā)的內(nèi)存泄漏,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • IntelliJ IDEA創(chuàng)建maven多模塊項(xiàng)目(圖文教程)

    IntelliJ IDEA創(chuàng)建maven多模塊項(xiàng)目(圖文教程)

    這篇文章主要介紹了IntelliJ IDEA創(chuàng)建maven多模塊項(xiàng)目(圖文教程),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09
  • JPA中@ElementCollection使用示例詳解

    JPA中@ElementCollection使用示例詳解

    在JPA中,@ElementCollection注解主要用于映射集合屬性,例如List、Set或數(shù)組等集合屬性,以及Map結(jié)構(gòu)的集合屬性,每個(gè)屬性值都有對(duì)應(yīng)的key映射,這篇文章主要介紹了JPA中@ElementCollection使用,需要的朋友可以參考下
    2023-11-11
  • Fluent Mybatis實(shí)際開發(fā)中的優(yōu)勢(shì)對(duì)比

    Fluent Mybatis實(shí)際開發(fā)中的優(yōu)勢(shì)對(duì)比

    本文給大家介紹如何通過(guò)IQuery和IUpdate定義強(qiáng)大的動(dòng)態(tài)SQL語(yǔ)句,給大家分享Fluent Mybatis實(shí)際開發(fā)中的優(yōu)勢(shì)講解,感興趣的朋友一起看看吧
    2021-08-08
  • 使用mybatis格式化查詢出的日期

    使用mybatis格式化查詢出的日期

    這篇文章主要介紹了使用mybatis格式化查詢出的日期,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot基于Swagger2構(gòu)建API文檔過(guò)程解析

    SpringBoot基于Swagger2構(gòu)建API文檔過(guò)程解析

    這篇文章主要介紹了SpringBoot基于Swagger2構(gòu)建API文檔過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Spring實(shí)戰(zhàn)之調(diào)用實(shí)例工廠方法創(chuàng)建Bean操作示例

    Spring實(shí)戰(zhàn)之調(diào)用實(shí)例工廠方法創(chuàng)建Bean操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之調(diào)用實(shí)例工廠方法創(chuàng)建Bean操作,結(jié)合實(shí)例形式分析了實(shí)例工廠方法創(chuàng)建Bean相關(guān)配置、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • Elasticsearch8.1中的Script使用實(shí)例深入解讀

    Elasticsearch8.1中的Script使用實(shí)例深入解讀

    這篇文章主要為大家介紹了Elasticsearch8.1中的Script使用實(shí)例深入解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Java加密算法RSA代碼實(shí)例

    Java加密算法RSA代碼實(shí)例

    這篇文章主要介紹了Java加密算法RSA代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • spring boot 配置動(dòng)態(tài)刷新實(shí)現(xiàn)詳解

    spring boot 配置動(dòng)態(tài)刷新實(shí)現(xiàn)詳解

    這篇文章主要介紹了spring boot 配置動(dòng)態(tài)刷新實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論