日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java就_GitHub - IammyselfYBX/This_is_how_Java_should_be_learned: 《Java就应该这样学》

發布時間:2025/3/11 java 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java就_GitHub - IammyselfYBX/This_is_how_Java_should_be_learned: 《Java就应该这样学》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java就該這么學

說明

這里使用 centos7 的openjdk,不是Oracle的JDK

yum search java|grep jdk

yum install java-1.8.0-openjdk

#set Java environment

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64

export CALSSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

第一部分 認識Java程序

1.java純粹的面向對象語言,程序是由一個一個類組成的

java不能直接寫主函數,因為基于面向對象。

java中類名大寫

MyTest.java

通俗理解函數調用:

你吃早飯,喊一聲我要吃早飯,早飯就來了,你不用知道早飯是怎么做的,只要調用一下就可以了。

2.類名與文件名相同

源文件中有類名值 public 的話,文件名與該類同名。

3.java語言不能直接畫在窗體上,必須是畫布上才行,好在存在畫布類

Frame fr = new Frame();

Paint p = new Paint();

w.add(p);

4.80%思考任務,20%思考知識

5.Math.random() 產生的是0-1之間的數字

6.傳數值的時候,需要考慮是否需要強制類型轉換

7.不要寫成——T1.6

int x[] = new int[300] ;

int y[] = new int[300] ;

//類里面不要直接寫語句,應該放到方法里面

for(int i = 0 ; i < 300 ; i ++){

x[i] = (int)(Math.random()*1024) ;

y[i] = (int)(Math.random()*768) ;

}

正確關系

所以應該寫成

class MyPanel{

int x[] = new int[300] ;

int y[] = new int[300] ;

public MyPanel(){

for(int i = 0 ; i < 300 ; i ++){

x[i] = (int)(Math.random()*1024) ;

y[i] = (int)(Math.random()*768) ;

}

}

}

8.Ctrl+Shift+Alt+R——30s

gsettings set org.gnome.settings-daemon.plugins.media-keys max-screencast-length 60

以秒為單位將’60’值替換為您想要的長度,例如300分鐘5分鐘,600分鐘10分鐘等等。

9.一般java API規律

得到信息是 get 開頭

eg:getKeyCode()

改變信息是 set 開頭

eg:f.setSize(300, 400);

11.將字符轉換成字符串方法

將字符c變成對象 new Character(c)

然后調用 toString() 方法

new Character(c[i]).toString()

12.線程與進程的區別

線程是通過利用CPU的輪轉,讓程序中不同的代碼段同時執行的機制。

進程:獨立運行的程序,一個運行的記事本和瀏覽器是兩個進程,啟動兩個記事本也是兩個進程。

線程:在一個進程里面能夠共同運行的代碼。

13.接口需要實現,任何類都可以實現接口 implements Runnable

class MyPanel extends Panel implements Runnable{//實現接口Runnable

public void run(){//計算機在合適的時間片就輪轉到 run() 執行

}

}

public static void main(String args[]){

MyPanel mp = new MyPanel();

Thread t = new Thread(mp);//讓線程 t 與 mp 關聯。

t.start();//啟動線程,調用內部的 run() 方法。

}

14.實現鍵盤監控接口

import java.awt.event;

class MyPanel extneds Panel implements KeyListener{

public void keyPressed(KeyEvent e){

if(e.getKeyCode() == 37){

x--;

}

repaint();

}

public void keyReleased(KeyEvent arg0){

}

public void keyTyped(KeyEvent arg0){

}

}

public static void main(String args[]){

Frame f = new Frame();

MyPanel mp = new MyPanel();

f.addKeyListener(mp);

mp.addKeyListener(mp);

}

15.常見ASCII碼

空格——32

0~9——48~57

A——65

a——97

第二部分 開始一個項目

一、頁面的3種布局

1.BorderLayout——邊框布局管理器

NORTH——北

SOUTH——南

WEST——西

EAST——東

CENTER——中間

2.GridLayout

事先算好行列的個數,從左到右,從上到下

3.FlowLayout

往中間排,一排不夠換下一排

二、常用組件

Java采用布局的方式,而不是根據坐標

下面的所有組件最終都要放在 JFrame 上面。

1.JPanel——畫布

JPanel可以放在JFrame上面,也可以放在JPanel上面

2.JLabel——文本提示

3.JTextField——單行文本輸入

4.JPasswordField——密碼

5.JComboBox——下拉框

6.JTextArea——多行文本輸入

7.JScrollpane——滾動條

注冊事件

參數應該是實現接口的類的對象

QQLogin e = new QQLogin();

btnLogin.addActionListener(e);

btnReg.addActionListener(e);

btnCancel.addActionListener(e);

僅事件相應分不清到底是哪一個

細化具體是什么相應

想看是不是一個對象加個 . 實驗一下。

equal比較內容

== 比較是否同一個

== 實例

使用 new 得到的是地址, 所以是 false

equal實例

哈希碼——hashCode()

構造方法一般用于初始化

public class QQLogin extends JFrame{

QQLogin(){

//w.setSize(300, 400);

this.setSize(300, 400);

}

}

開始QQ項目

Java分為 客戶端 與 服務器端 編程,這兩者被互聯網隔開,只能依賴簡單的消息傳遞讓兩者一起工作。所以,不一定使用同一種技術開發兩端,前端使用HTML(其實是HTML, CSS, JavaScript的統稱), 后端使用Java。

早期java也負責前端有一個組件——Applet,他可以嵌入到HTML里面,但后來Flash成功以后,Applet就沒落了。

如果 getActionCommand 的內容和聲明的時候不一致就會出錯

三、面向對象

1.super 與 this

super 與 this 一樣都是引用

super 是指向父類的引用

this 是指向當前的引用

2.繼承注意事項

A c = new B();

這句話之后,結果是父類的成員變量,子類的方法。

3.面向對象思想來編寫代碼

假定用戶名是 aaa, 密碼是123,登入響應

4.面向對象中不應該引用另一個 class 中的成員變量,而應該是成員方法

將聊天信息發送到服務器在 test1引用變量中引用變量不符合面向對象的思想

//QQMain.java

Socket s

//QQLogin.java

QQMain w = new QQMain();

w.s = s;//錯誤用法

w.setVisible(true);

正確用法

//QQMain

private Socket s;

public void setSocket(Socket value){

s = value;

}

//QQLogin.java

QQMian w = new QQMain();

w.setSocket(s);

w.setVisible(true);

四、I/O流

變量——new是對內存的操作

語句——是對CPU的操作

語句是對CPU的操作,程序是在內存里面,操作內存比較方便,但是操作外設(鍵盤,硬盤,打印機,網絡)就比較麻煩,程序想與他們打交道,需要用到I/O流

到內存——入、到內存外面——出

對I/O流的操作一般3步

1.定位

對于硬盤:到那個硬盤,那個目錄大那個文件

對于網絡:網絡地址的那個端口

2.建立管道

就是數據源的方向

3.操作管道

所有離開內存的操作都是存在隱患的,需要try{} ... catch(){}

文件不存在

硬盤損壞

網絡不通

數據庫服務器沒啟動

import java.io.*;

public class MyReadFile {

public static void main(String args[]){

try{

//Step1:定位數據源

File f = new File("./test.txt");//使用 File類 定位文件

//Step2:建立管道

FileInputStream fis = new FileInputStream(f);//用 FileinputEtream類 確定方向是到內存里面。

//Step3:操作管道

int length = fis.available() ;//操作管道,管道對象是——fis。

for (int i = 0; i < length ; i ++ ) {

System.out.print((char)fis.read());//.read()方法是操作 管道fis 讀一個字符。

}

}catch(Exception e){}

}

}

如果有時間可以看看 java 家目錄里面的 src.zip 里面的java代碼,都是開源人寫的不錯的代碼

方法——動作,變量——承擔動作的對象

eg:洗(衣服)???#動作需要參入參數

復制大文件

首先對于 read 方法一共有3中方式重載

對于 write 方法也有3中方式重載

分析如果采用 方式1 的話需要復制21103945 次,浪費資源,時間

缺點就是因為不是整除,所以復制的結果會更大一些,

建議數組長度采用2的n次方

先用方式2大塊復制減少時間,在用方式1 處理剩余的

字節流操作FileInputStream、FileOutputStream不能直接操作 Unicode 字符,不符合 Java “一次編寫,處處運行”

為了解決這個問題,需要提出——字符流

字符流FileReader、BufferedReader、FileWriter、PrintWriter

需要 flush、close

// 字符流適應不同的操作系統

import java.io.*;

public class MyReadFile {

public static void main(String args[]){

try{

File inFile = new File("C:/work/test.txt") ;

File outFile = new File("c:/work/test1.txt") ;

FileReader fr = new FileReader(inFile) ;

BufferedReader br = new BufferedReader(fr) ;

FileWriter fw = new FileWriter(outFile) ;

PrintWriter pw = new PrintWriter(fw) ;

while(br.ready()){

pw.println(br.readLine()) ;

}

pw.close();//close()會自動調用 flush() 把緩沖區的內容寫入文件。

}catch(Exception e){}

}

}

建立網絡通信

協議——我寫的是漢語、你能看懂我寫的是什么,漢語就是協議,大家都認同的規則。

防止堵塞

1.令牌環

2.以太網

以太網原理:看線路上有沒有信號,有就等待,沒有就發送

3.隔離

使用交換機建立虛擬電路,

其他概念

1.網關——將兩個網絡連在一起

網關——一臺有兩塊網卡裝有網關軟件的計算機,下圖當中方塊就是網關。

假設左側的子網掩碼是 255.255.255.0,右側的子網掩碼是 255.255.0.0,則網關連接 159.226.43 與 226.196兩個網絡。

2.子網掩碼

子網掩碼——區分主機號和網絡號

一個IP是 159.226.43.26,如果子網掩碼是 255.255.0.0,那么網絡號是 159.226, 主機號是 43.26;

如果子網掩碼是 255.255.255.0,那么網絡號是 159.226.43,主機號是26;

3.端口

對于計算機網絡需要找到對應的進程——端口

80是http協議的端口、25是發送郵件的端口、1433是 SQLServer、3306是MySQL、1521是Oracle、8080是網絡服務器飾演端口

上傳消息

服務器并不是一個強大的計算機,只是一直監聽而已

import java.net.*;

public class MyServer{

public static void main(String args[]){

try{

ServerSocket ss = new ServerSocket(8000);

System.out.println("Listening ....");

Socket s = ss.accept();

System.out.println("Listened.");

}catch(Exception e){}

}

}

客戶端就是發送請求的計算機

import java.net.*;

public class MyClient{

public static void main(String args[]){

try{

Socket s = new Socket("localhost", 8000);

}catch(Exception e){}

}

}

I/O字節流

//Server

import java.net.*;

public class MyServer{

public static void main(String args[]){

try{

ServerSocket ss = new ServerSocket(8000);

System.out.println("Listening ... ");

Socket s = ss.accept();

System.out.println(s.getInputStream().read());

//System.out.println("Listened");

}catch(Exception e){}

}

}

//Client

import java.net.*;

public class MyClient{

public static void main(String args[]){

try{

Socket s = new Socket("localhost", 8000);

s.getOutputStream().write(122);

}catch(Exception e){}

}

}

字節流缺點:

只能發送數字

不能發送大于 255 的數字

I/O字符流

//Server

import java.io.*;

import java.net.*;

public class MyServer{

public static void main(String args[]){

try{

ServerSocket ss = new ServerSocket(8000);

System.out.println("Listening ... ");

Socket s = ss.accept();

InputStream is = s.getInputStream();

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);

System.out.println(br.readLine());

}catch(Exception e){}

}

}

//Client

import java.net.*;

import java.io.*;

public class MyClient{

public static void main(String args[]){

try{

Socket s = new Socket("localhost", 8000);

OutputStream os = s.getOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(os);

PrintWriter pw = new PrintWriter(osw, true);//自動刷新

pw.println("YBX is the most handsome man in NCEPU");

}catch(Exception e){}

}

}

面向對象編程不建議使用變量,而是方法。

對于 A a = new B();,a.變量是A 的變量,a.方法是B 的方法。

五、數據庫操作

關于數據庫訪問是屬于 javaEE 的內容,在 javaSE 里面找不到

問題

訪問權限

解決方案

MariaDB [(none)]> grant all privileges on QQ.* TO 'tony'@'%' identified by '12345' with GRANT OPTION;

Query OK, 0 rows affected (0.00 sec)

使用docker

$> docker exec -it mariadb /bin/bash

索引

數據庫本身存放數據有一個原始順序——原表排序

但是這些數據可以根據不同的條件重新排序,這些排序結果放在——索引表

在不同的產品里面對原表排序和索引表的稱呼不同

SQLServer:

聚集索引——原表排序

非聚集索引——索引表

Oracle:

索引組織表——原表排序

索引——索引表

數據庫的表就是二維表

表的特點是——列固定、行增加或減少。

表太多了,為了方便管理,把相關的表組織成為庫。

數據類型

因為數據庫需要分配空間,所以需要給分配的內容定義數據類型以便于分配空間。

因為數據庫很專業,所以數據類型種類很多,但是不超過三類——數字、字符串、日期

Mysql 支持存儲文章(text)和圖片(blob),但是其他數據庫可能不支持。

數字

1.整數——int

一般大小自己用數字定義。eg:int(10)——占10位的整數

2.小數——float、double

大小自己用數字定義。eg:float(5, 2)——一共5位,小數點后2位小數

字符串

1.char()

2.varchar()

區別:

char(5)存放'ab',varchar(5)存放'ab',在取出的時候,char的是'ab '(ab加上3個空格); varchar的是'ab'

字符穿這里使用'',與C語言java語言不同,雖然Myql支持" ",但是需要照顧其他數據庫。

日期——一般用于存放學生的生日

1.datetime——存放 年/月/日/時/分/秒

2.date——存放 年/月/日/

習慣一般存放人員生日而不是年齡,因為每年新年就要把所有人年齡加1,很麻煩。

權限管理——GRANT

新建的普通用戶是沒有權限建立數據庫的

使用root用戶授權

MariaDB [(none)]> GRANT create

-> ON *.*

-> TO tony@'%'

-> IDENTIFIED BY '12345';

這時在使用create就可以了。

第一范式——得到純粹二維表

第二范式——消除主鍵依賴

第三范式——消除函數依賴

2.JDBC

放在 $JAVA_HOME/jre/lib/ext/ 下面

3.訪問數據庫

查詢

import java.sql.*;

public class TestSQL{

public static void main(String[] args) {

try{

Class.forName("org.mariadb.jdbc.Driver");

Connection cn = DriverManager.getConnection("jdbc:mysql://192.168.122.104:3306/test", "tony", "12345");

Statement st = cn.createStatement();

ResultSet rs = st.executeQuery("SELECT id, name FROM student");

while(rs.next()){

String id = rs.getString("id");

String name = rs.getString("name");

System.out.println(id+" "+name);

}

}catch(Exception e){}

}

}

增刪改

import java.sql.*;

public class TestSQL{

public static void main(String[] args) {

try{

//注冊驅動

String driver ="org.mariadb.jdbc.Driver";

Class.forName(driver);

//獲取數據庫連接

String url="jdbc:mysql://192.168.122.104:3306/test";

String user = "tony";

String password = "12345";

Connection connection = DriverManager.getConnection(url, user, password);

System.out.println("Connection Success!!!");

//Select

System.out.println("\nThe original data:");

Statement statement = connection.createStatement();

ResultSet result1 = statement.executeQuery("SELECT id, name FROM student");

while(result1.next()){

String id = result1.getString("id");

String name = result1.getString("name");

System.out.println("id: "+id+"\t"+"name: "+name+" ");

}

//Insert

System.out.println("\nInsert");

String sql1 = "INSERT INTO student VALUES(2, 'Jerry')";

int result_insert = statement.executeUpdate(sql1);

System.out.println("Change Line: "+result_insert);

//Select

System.out.println("\nAfter Insert:");

ResultSet result2 = statement.executeQuery("SELECT id, name FROM student");

while(result2.next()){

String id = result2.getString("id");

String name = result2.getString("name");

System.out.println("id: "+id+"\t"+"name: "+name+" ");

}

//Update

String sql2 = "UPDATE student SET name='tony' WHERE id=2";

int result_update = statement.executeUpdate(sql2);

System.out.println("Change Line: "+result_update);

//Select

System.out.println("\nAfter Update:");

ResultSet result3 = statement.executeQuery("SELECT id, name FROM student");

while(result3.next()){

String id = result3.getString("id");

String name = result3.getString("name");

System.out.println("id: "+id+"\t"+"name: "+name+" ");

}

//Delete

String sql3 = "DELETE FROM student WHERE id=2";

int result_delete = statement.executeUpdate(sql3);

System.out.println("Change Line: "+result_delete);

//Select

System.out.println("\nAfter Delete:");

ResultSet result4 = statement.executeQuery("SELECT id, name FROM student");

while(result4.next()){

String id = result4.getString("id");

String name = result4.getString("name");

System.out.println("id: "+id+"\t"+"name: "+name+" ");

}

}catch(Exception e){

e.printStackTrace();

}finally{

try{

result1.close();

result2.close();

result3.close();

result4.close();

statement.close();

connection.close();

}catch(Exception e){}

}

}

}

4.反射

只有一個類被使用,而不是聲明,其對應的靜態語句塊才會執行

class A{

static {

System.out.println("aaaaaaaaaaaaaaaaaaaa");

}

}

public class MyTest{

public static void main(String[] args){

A a; //是聲明不會執行

}

}

Class.forName 能自動調用運行類的靜態語句塊,返回值是 Class,Class.forName 提供使用字符串來new對象的途徑。

public class Demo{

public static void main(String args[]){

String choice = "YBX";

try{

Class a = Class.forName(choice);

Object o = a.newInstance();

Hero h = (Hero) o;

h.function(); //父類引用指向子類對象,執行依照 子類(YBX)方法。

}

}

}

增加靈活性這樣以后只需要更改SQL.ini就可以實現數據庫切換,密碼更改等操作。

第三部分 獲得邏輯能力

一、鏈表

在C語言結構體只有數據,沒有方法,但是可以使用 Java 的類來替代。

//定義結構體

class Node{

public char value = ' ';

public Node next = NULL;

}

二、面向對象與面向過程

無論編程技術發展到那一天,面向過程都是必要的基礎。

面向對象進行封裝,這樣兩個人進行合作,一個人負責寫類,一個人負責寫計算機內部實現邏輯,這樣類內部與外部進行完美的隔離。

這樣對于代碼用數組實現記事本與用鏈表實現記事本,只需要改動一句話

ArrayList al = new ArrayList();

//只需要該定義其他的都不需要變

LinkedList ll = new LinkedList();

三、泛型

四、Set

沒有二分查找就沒有二叉樹。

點擊按鈕彈出目錄對話框——JFileChooser

本書實例

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java就_GitHub - IammyselfYBX/This_is_how_Java_should_be_learned: 《Java就应该这样学》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。