Java概述
第一代 打孔機(jī)
第二代 匯編
第三代 高級(jí)
Java的特點(diǎn)
- 面向?qū)ο?/li>
- 和平臺(tái)無(wú)關(guān)
3.健壯語(yǔ)言
核心機(jī)制
Java虛擬機(jī)
垃圾收集機(jī)制
Java 解釋型語(yǔ)言 拿一行解釋一行
jre 運(yùn)行環(huán)境
環(huán)境變量
系統(tǒng)默認(rèn)到path里面找敲的命令
添加到bin目錄
Java-version 看版本
切換盤d:回車
java 運(yùn)行程序是對(duì)Java虛擬機(jī)說(shuō)的 區(qū)分大小寫
dir 顯示當(dāng)前目錄的列表
clathpath 配置能讓機(jī)器找到類
每一個(gè)類對(duì)應(yīng)了一個(gè)class 文件
Java關(guān)鍵字
不同的數(shù)據(jù)類型分配不同的長(zhǎng)度
Java用Unicode編碼每個(gè)字符2個(gè)字節(jié)16進(jìn)制
long a = 888888888888L
i++先取值再自己+1
三目運(yùn)算符
x外盯?y:z
for( ; ; ){} while(){} do{}while()
break吱雏; 強(qiáng)行退出 continue岳颇; 下一次
public class deda {
public static void main(String args[]){
for(int i = 101;i <= 200;i++,i++){
for(int a = 2;a < i;a++){
if(i%a == 0){
System.out.printf(i+" ");
break;
}
}
}
}
}
public static void main(String args[]){
int a = 0; int c = 0;
for(int i=1;i<=100;i++){
if(i%3 == 0){
System.out.printf(i+" ");
c++;
}
if(c == 5){
break;
}
}
}
}
面向?qū)ο缶幊?/h3>
成員變量默認(rèn)為0 局部變量要初始化
構(gòu)造方法
new +構(gòu)造方法 創(chuàng)建一個(gè)新的對(duì)象
構(gòu)造函數(shù)和類名相同沒(méi)有返回值例如
pubulic class Person{
int id,int age;
Person (int n,int b){
id=n;
age=b;
}
}
系統(tǒng)默認(rèn)有個(gè)無(wú)參的構(gòu)造方法
方法執(zhí)行完成之后局部變量消失
類名首字母大寫
變量名小寫 有駝峰標(biāo)識(shí)
方法的重載
一個(gè)類中有相同的名字相同的返回值 但是參數(shù)不同的多個(gè)方法
this關(guān)鍵字
一般出現(xiàn)在方法聲明里
指的是對(duì)哪個(gè)對(duì)象調(diào)用方法指的就是誰(shuí) 即為當(dāng)前對(duì)象的引用
在內(nèi)存里在堆內(nèi)存里的一個(gè)變量
static 關(guān)鍵字
在類中 用static修飾的成員變量為該類的公用變量只有一份
存在數(shù)據(jù)區(qū) 可以用類名去引用 Cat類名
Cat.sid= 100
不用new對(duì)象
字符串也分配在數(shù)據(jù)區(qū)
String name = "mimi"
name 是一個(gè)引用
靜態(tài)方法
Cat.方法
靜態(tài)方法不能訪問(wèn)非靜態(tài)成員(調(diào)用靜態(tài)方法時(shí)不會(huì)將對(duì)象的引用傳給他 )
包名
packge com.xy.ni;
編譯出來(lái)的類要位于正確的目錄下面
一個(gè)類要用另外一個(gè)類
要么導(dǎo)入類的包名包 要么再用的時(shí)候?qū)懭腩惖陌?br>
注意 :class 文件最上層包的父目錄 位于 classpath下面
運(yùn)行的程序要有main入口
(操作小技巧)
Java.lang里面的包不需要引入直接用
jdk自帶jir包
把自己的類打成jar包
設(shè)置 jir包為clathpath路徑
繼承
只有一個(gè)父類
訪問(wèn)控制符
QQ截圖20180820124142.png
QQ截圖20180820124323.png
不能new這個(gè)類
重寫
是子類對(duì)父類的方法不滿意
重寫方法不能用比被重寫方法更小的權(quán)限
(重載是一個(gè)類里)
super關(guān)鍵字
super一般用在
子類的方法中要用 父類繼承了來(lái)的成員變量或者方法
Object的常用方法
直接打印對(duì)象 返回 對(duì)象@+hash碼
(hash碼記錄對(duì)象的位置)
默認(rèn)的equals方法和==是一樣的 即為比較了兩個(gè)對(duì)象的引用![]
對(duì)象轉(zhuǎn)型
(父類轉(zhuǎn)型子類之后就可以看到整個(gè) 對(duì)象就能夠調(diào)用子類的屬性和方法了)
(不用寫一個(gè)一個(gè)的方法了)
動(dòng)態(tài)綁定和多態(tài)
是對(duì)于方法來(lái)說(shuō) 執(zhí)行方法時(shí)調(diào)用的代碼是跟據(jù)實(shí)際的類型來(lái)確定的 不是引用的類型
public static void main(String args[]){
Object b = new Object();
Zidan c =new Zidan();
Feiji d = new Feiji();
Duotai m= new Duotai();
m.fangfa(d);m.fangfa(c);m.fangfa(b);
}
public void fangfa(Object a){
a.draw();
}
}
class Object{
public void draw(){
System.out.printf("wuti ");
}
}
class Zidan extends Object{
public void draw() {
System.out.printf("zidan ");
}
}
class Feiji extends Object{
public void draw() {
System.out.printf("feiji ");
}
}
(自己寫的小程序紀(jì)念一下 哈哈)
抽象類
QQ截圖20180820171524.png
接口
只能為public static final 修飾成員變量
方法只能是public
不只是成員變量 方法的訪問(wèn)也有局限
(idea的重寫的快捷鍵 Alt+Ins) 也能寫構(gòu)造方法
總結(jié)
異常處理
(注意重寫的方法不能拋出比被重寫方法不同的異常)
(異常是一個(gè)類)
try{} catch(){}
Error 虛擬機(jī)出錯(cuò)
Runtime Exception 可以不catch
用try ,部服,catch異常時(shí) 先小再大
自定義異常
快捷鍵 格式化代碼 ctrl+alt+L
public class Exception {
int l=-1 ;
public static void main(String[] args) {
try {
Exception p = new Exception();
p.shangpao();
} catch (MyException e) {
System.out.printf("gaochulai");
}
}
void dengji(int a) throws MyException {
if (a < 0) {
throw new MyException("hao");
}
System.out.printf(a + "dengji");
}
void shangpao() throws MyException {
dengji(l);
}
}
class MyException extends java.lang.Exception {
private String id;
public MyException(String id) {
super();
this.id = id;
}
public String getId() {
return id;
}
}
注意 上面class MyException extends java.lang.Exception
開始寫成了 Exception 和定義的類重名了 叫師傅改的哈哈
數(shù)組
a[i] Integer . parseInt (args[i]) ;
把從命令行輸入的字符換成數(shù)字
public class yinyouarray {
public static void main(String[] args) {
Date[] nihao = new Date[3];
for (int i = 0; i < 3; i++) {
nihao[i] = new Date(i + 3, 8, 2017);
Date.mm();
}
}
}
class Date {
static int year, month, date;
public Date(int a, int b, int c) {
this.date = a;
this.month = b;
this.year = c;
}
public static void mm() {
System.out.printf(year + " " + month + " " + date +" ");
}
}
基礎(chǔ)數(shù)據(jù)類型包裝類
解析字符串
file類
lastModified 上次修改時(shí)間 用long類型存時(shí)間 mkdir 創(chuàng)建目錄
import java.io.File;
public class file {
public static void main(String[] args) {
File f = new File("path1/path2", "filename");
if (f.exists()) {
System.out.printf("" + f.getAbsolutePath() + " " + f.length());
} else {
f.getParentFile().mkdirs();
try {
f.createNewFile();
} catch (java.lang.Exception e) {
System.out.printf("exception");
e.printStackTrace();
}
}
}
}
(模仿模仿)
打印指定目錄下的文件列表
谷歌到的listFile()和list
返回了字符類型的數(shù)組
public static void main(String[] args) {
//創(chuàng)建File對(duì)象
File file = new File("D:\\Android");
//獲取該目錄下的所有文件
String[] files = file.list();
for (String f : files){
System.out.println(f);
}
//listFiles是獲取該目錄下所有文件和目錄的絕對(duì)路徑
File[] fs = file.listFiles();
for (File f : fs){
System.out.println(f);
}
}
枚舉類型 java.lang.Enum類
枚舉類比于類 用來(lái)定義類
容器
下面是實(shí)現(xiàn)接口的類
set沒(méi)有順序不可重復(fù)
list有順序可以 重復(fù)(eqals)
- 只能傳入對(duì)象
-
依次調(diào)用了每個(gè)元素的toString方法
重寫eqals方法必須重寫hashCode方法
QQ截圖20180821154018.png
firstname是一個(gè)字符串的索引
字符串的hashCode已經(jīng)實(shí)現(xiàn)了hash方法
QQ截圖20180821155139.png
底層的容器實(shí)現(xiàn)不同 遍歷的方法就不一樣 所以用Iterator來(lái)統(tǒng)一實(shí)現(xiàn)
QQ截圖20180821160656.pngQQ截圖20180821163511.png
set接口
QQ截圖20180821163858.png
List接口
QQ截圖20180821165121.png
QQ截圖20180821165914.png
不是Collection接口
QQ截圖20180821165821.png
Comparable接口
重寫的toString 方法
name類要實(shí)現(xiàn)的排序
String類實(shí)現(xiàn)了排序
map
自動(dòng)打包解包
泛型
類的后面跟< > 表示制定的類型 即為返回值的類型
在定義集合的時(shí)候去指定所放的類型
省去了強(qiáng)制轉(zhuǎn)換
流
讀取文件內(nèi)容
復(fù)制文件內(nèi)容
import java.io.*;
public class Io {
public static void main(String[] args) {
FileInputStream in = null;
FileOutputStream out = null;
try {
out = new FileOutputStream("E:\\workspaces\\imooc\\.idea\\22.txt");
in = new FileInputStream("E:\\workspaces\\imooc\\.idea\\11.txt");
} catch (FileNotFoundException e) {
System.out.printf("找不到制定文件");
e.printStackTrace();
System.exit(-1);
}
try {
int b = 0;
int a = 0;
do {
b = in.read();
System.out.printf(b + " ");
out.write((char) b);
}
while (in.read() != -1);
} catch (IOException p) {
System.out.printf(" aaa");
p.printStackTrace();
}
try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
(模仿的復(fù)制)
數(shù)據(jù)流
print流Object流

Serialzable 接口 要序列化必須實(shí)現(xiàn)的接口
線程
進(jìn)程是一個(gè)靜態(tài)的概念
一個(gè)cpu在一個(gè)時(shí)間只有一個(gè)進(jìn)程
一個(gè)時(shí)間執(zhí)行一下這個(gè)進(jìn)程再換為另外的進(jìn)程 多個(gè)就支持多線程
starte方法和run方法的區(qū)別 run就是個(gè)方法的調(diào)用 state是創(chuàng)建新的線程
兩種方法創(chuàng)建新的線程
- 實(shí)現(xiàn)runable接口
-
繼承于Thread
本身Thread也實(shí)現(xiàn)了runable接口 都要重寫run方法
(推薦接口)
QQ截圖20180822104309.pngQQ截圖20180822110029.png
線程的stop方法 比較 暴力 不用
結(jié)束線程的方法 定義一個(gè)布爾類型的變量 放在while里 要結(jié)束時(shí)就調(diào)用那個(gè)變量改為false
設(shè)置優(yōu)先級(jí))
兩個(gè)線程指向同一個(gè)對(duì)象
num在數(shù)據(jù)區(qū) 計(jì)數(shù)用的
兩種鎖定當(dāng)前對(duì)象的方法 第二種是 執(zhí)行方法時(shí)鎖定當(dāng)前對(duì)象
死鎖
import java.io.*;
public class Io {
public static void main(String[] args) {
FileWriter out = null;
FileReader in = null;
// String m = out.getEncoding();
// System.out.printf(m+" ");
try {
out = new FileWriter("E:\\workspaces\\imooc\\.idea\\22.txt");
} catch (IOException e) {
e.printStackTrace();
}
try {
in = new FileReader("E:\\workspaces\\imooc\\.idea\\11.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
int b = 0;
int a = 0;
for (int i = 0; i < 6000; i++) {
out.write(i);
}
do {
b = in.read();
System.out.printf((char) b + " ");
}
while (in.read() != -1);
} catch (IOException p) {
System.out.printf(" aaa");
p.printStackTrace();
}
try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
干不出來(lái)漢字呀 (流)
import java.util.*;
public class ThreadTest {
public static void main(String[] a) {
MyThread oo = new MyThread();
oo.start();
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
}
oo.i = false;
}
}
class MyThread extends Thread {
Boolean i = true;
public void run() {
while (i) {
System.out.println("==l=" + "=====");
try {
sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
return;
}
}
}
}
寫了些啥哦
時(shí)間和日期、
-
image.png
image.png
得到 long 表示的時(shí)間
System.out.print(" "+now);
@Override
public int hashCode() {
return super.hashCode();
}
};
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yy-MM-dd hh;mm;ss");
String s= simpleDateFormat.format(data);
System.out.print(s+" ");
```為啥不對(duì)呀 好像Data類變了