java学习笔记

Java概述

第一代 打孔机
第二代 汇编
第三代 高级


微信截图_20180819092639.png

Java的特点

  1. 面向对象
  2. 和平台无关
    3.健壮语言

核心机制

Java虚拟机
垃圾收集机制


微信截图_20180819093240.png

微信截图_20180819093336.png

Java 解释型语言 拿一行解释一行
jre 运行环境


微信截图_20180819094043.png

环境变量

系统默认到path里面找敲的命令
添加到bin目录
Java-version 看版本
切换盘d:回车
java 运行程序是对Java虚拟机说的 区分大小写
dir 显示当前目录的列表
clathpath 配置能让机器找到类
每一个类对应了一个class 文件

Java关键字

不同的数据类型分配不同的长度
Java用Unicode编码每个字符2个字节16进制
long a = 888888888888L
i++先取值再自己+1
三目运算符
x?y:z
for( ; ; ){} while(){} do{}while()
break; 强行退出 continue; 下一次


微信截图_20180819105438.png
微信截图_20180819105705.png
微信截图_20180819111229.png
微信截图_20180819112130.png
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;
            }
        }
    }
}
微信截图_20180819112357.png

面向对象编程

成员变量默认为0 局部变量要初始化

构造方法

new +构造方法 创建一个新的对象
构造函数和类名相同没有返回值例如

pubulic class Person{
 int id,int age;
    Person (int n,int b){
     id=n;
     age=b; 
   }
}

系统默认有个无参的构造方法

方法执行完成之后局部变量消失
类名首字母大写
变量名小写 有驼峰标识

方法的重载

一个类中有相同的名字相同的返回值 但是参数不同的多个方法

this关键字

一般出现在方法声明里
指的是对哪个对象调用方法指的就是谁 即为当前对象的引用
在内存里在堆内存里的一个变量

static 关键字

在类中 用static修饰的成员变量为该类的公用变量只有一份
存在数据区 可以用类名去引用 Cat类名
Cat.sid= 100
不用new对象
字符串也分配在数据区
String name = "mimi"
name 是一个引用
静态方法
Cat.方法
静态方法不能访问非静态成员(调用静态方法时不会将对象的引用传给他 )

包名

packge com.xy.ni;
编译出来的类要位于正确的目录下面
一个类要用另外一个类
要么导入类的包名包 要么再用的时候写入类的包名

QQ截图20180820113750.png

QQ截图20180820113954.png
Cat可以换成* 表示引入包里全部类
注意 :class 文件最上层包的父目录 位于 classpath下面
QQ截图20180820115222.png

运行的程序要有main入口

有包的类 要运行 要加上全路径
QQ截图20180820112559.png

QQ截图20180820112836.png

(操作小技巧)
Java.lang里面的包不需要引入直接用
jdk自带jir包
把自己的类打成jar包


QQ截图20180820121117.png

设置 jir包为clathpath路径

继承

只有一个父类

访问控制符
QQ截图20180820124142.png
QQ截图20180820124323.png

不能new这个类

重写

是子类对父类的方法不满意
重写方法不能用比被重写方法更小的权限
(重载是一个类里)

super关键字

super

super一般用在

子类的方法中要用 父类继承了来的成员变量或者方法

Object的常用方法

直接打印对象 返回 对象@+hash码
(hash码记录对象的位置)



默认的equals方法和==是一样的 即为比较了两个对象的引用![]


对象转型


(父类转型子类之后就可以看到整个 对象就能够调用子类的属性和方法了)



(不用写一个一个的方法了)

动态绑定和多态

是对于方法来说 执行方法时调用的代码是跟据实际的类型来确定的 不是引用的类型


QQ截图20180820161716.png

多态
    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   ");
    }

}

(自己写的小程序纪念一下 哈哈)

抽象类
QQ截图20180820171524.png

QQ截图20180820172130.png

接口

QQ截图20180820173209.png

只能为public static final 修饰成员变量
方法只能是public


QQ截图20180820180039.png

不只是成员变量 方法的访问也有局限
(idea的重写的快捷键 Alt+Ins) 也能写构造方法
总结


QQ截图20180820182504.png

异常处理

(注意重写的方法不能抛出比被重写方法不同的异常)

(异常是一个类)
try{} catch(){}

QQ截图20180820192808.png

QQ截图20180820201252.png

QQ截图20180820202836.png

QQ截图20180820201322.png

Error 虚拟机出错
Runtime Exception 可以不catch
QQ截图20180820203116.png

QQ截图20180820210529.png

用try ,,catch异常时 先小再大

自定义异常
QQ截图20180820211152.png

QQ截图20180820211814.png
QQ截图20180820212352.png

快捷键 格式化代码 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 和定义的类重名了 叫师傅改的哈哈

数组

Screenshot_2018-08-20-23-25-09-607_com.tencent.ed.png
Screenshot_2018-08-20-23-26-38-425_com.tencent.ed.png
Screenshot_2018-08-20-23-30-54-396_com.tencent.ed.png
Screenshot_2018-08-20-23-36-52-748_com.tencent.ed.png
Screenshot_2018-08-20-23-38-33-706_com.tencent.ed.png
Screenshot_2018-08-20-23-44-28-847_com.tencent.ed.png
Screenshot_2018-08-20-23-45-48-378_com.tencent.ed.png
Screenshot_2018-08-20-23-49-00-761_com.tencent.ed.png
Screenshot_2018-08-20-23-54-11-249_com.tencent.ed.png
Screenshot_2018-08-20-23-54-57-992_com.tencent.ed.png
Screenshot_2018-08-20-23-55-30-764_com.tencent.ed.png
Screenshot_2018-08-20-23-55-40-100_com.tencent.ed.png

Screenshot_2018-08-20-23-56-55-124_com.tencent.ed.png

a[i] Integer . parseInt (args[i]) ;
把从命令行输入的字符换成数字

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 +"  ");
    }
}
基础数据类型包装类
QQ截图20180821120244.png

QQ截图20180821121130.png

QQ截图20180821122038.png

解析字符串

file类

QQ截图20180821122834.png

lastModified 上次修改时间 用long类型存时间 mkdir 创建目录

例子
QQ截图20180821123803.png
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();
            }
        }
    }
}

(模仿模仿)
打印指定目录下的文件列表


QQ截图20180821145213.png

谷歌到的listFile()和list
返回了字符类型的数组

 
    public static void main(String[] args) {
        
        //创建File对象
        File file = new File("D:\\Android");
        //获取该目录下的所有文件
        String[] files = file.list();
        
        for (String f : files){
            System.out.println(f);
        }
        
        //listFiles是获取该目录下所有文件和目录的绝对路径
        File[] fs = file.listFiles();
        for (File f : fs){
            System.out.println(f);
        }
    }
    
    

枚举类型 java.lang.Enum类

枚举类比于类 用来定义类


QQ截图20180821150622.png

容器

QQ截图20180821151640.png

下面是实现接口的类
set没有顺序不可重复
list有顺序可以 重复(eqals)

map存了key和value
QQ截图20180821152100.png
QQ截图20180821152712.png
  • 只能传入对象
  • 依次调用了每个元素的toString方法
    重写eqals方法必须重写hashCode方法


    QQ截图20180821154018.png

    firstname是一个字符串的索引
    字符串的hashCode已经实现了hash方法


    QQ截图20180821155139.png

    底层的容器实现不同 遍历的方法就不一样 所以用Iterator来统一实现
    QQ截图20180821160656.png
    增强for循环
    QQ截图20180821163511.png

    set接口


    QQ截图20180821163858.png
    set不可重复
    List接口
    QQ截图20180821165121.png

    QQ截图20180821165914.png

    不是Collection接口
    QQ截图20180821165821.png

Comparable接口

QQ截图20180821171341.png

重写的toString 方法


QQ截图20180821172005.png

name类要实现的排序
String类实现了排序


QQ截图20180821172629.png

map

QQ截图20180821173151.png

QQ截图20180821173600.png

自动打包解包


QQ截图20180821174123.png

泛型

QQ截图20180821180645.png

类的后面跟< > 表示制定的类型 即为返回值的类型
在定义集合的时候去指定所放的类型


QQ截图20180821180007.png

省去了强制转换

QQ截图20180821191849.png
QQ截图20180821193447.png
QQ截图20180821193550.png
QQ截图20180821193605.png
QQ截图20180821193616.png
QQ截图20180821193652.png
QQ截图20180821193702.png
QQ截图20180821193715.png
QQ截图20180821193756.png

读取文件内容
QQ截图20180821194936.png

复制文件内容


QQ截图20180821195651.png

QQ截图20180821200405.png
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();
        }
    }
}

(模仿的复制)

QQ截图20180821200441.png

QQ截图20180821200619.png
QQ截图20180821201336.png
QQ截图20180821201758.png
QQ截图20180821203318.png
QQ截图20180821203337.png

数据流

QQ截图20180821211920.png
QQ截图20180821213026.png

print流Object流

QQ截图20180821214210.png

![QQ截图20180821214920.png](https://upload-images.jianshu.io/upload_images/12298757-a6af713d54d9d542.png?imageMogr2/auto-or
ient/strip%7CimageView2/2/w/1240)
Serialzable 接口 要序列化必须实现的接口

QQ截图20180821215420.png

线程

进程是一个静态的概念
一个cpu在一个时间只有一个进程
一个时间执行一下这个进程再换为另外的进程 多个就支持多线程


QQ截图20180822102808.png
QQ截图20180822103243.png

starte方法和run方法的区别 run就是个方法的调用 state是创建新的线程


QQ截图20180822103728.png

两种方法创建新的线程

  • 实现runable接口
  • 继承于Thread
    本身Thread也实现了runable接口 都要重写run方法
    (推荐接口)


    QQ截图20180822104309.png
    QQ截图20180822110029.png

    线程的stop方法 比较 暴力 不用

结束线程的方法 定义一个布尔类型的变量 放在while里 要结束时就调用那个变量改为false


QQ截图20180822111611.png
QQ截图20180822112436.png

QQ截图20180822112659.png
QQ截图20180822112823.png

设置优先级)

QQ截图20180822113509.png

两个线程指向同一个对象
num在数据区 计数用的


QQ截图20180822114646.png

两种锁定当前对象的方法 第二种是 执行方法时锁定当前对象


QQ截图20180822115948.png

死锁
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();
        }
    }
}

干不出来汉字呀 (流)

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;
            }
        }
     } 
}

写了些啥哦

时间和日期、

  • image.png

    image.png

    得到 long 表示的时间

        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+" ");
```为啥不对呀 好像Data类变了














 



































最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

  • 基础篇 final 修饰符——修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的...
    Darkmoss阅读 409评论 0 0
  • 1 面向对象程序设计基础 1.对象object:在Java中,对象由数据以及对数据进行操作的方法构成。 2.类cl...
    persist阅读 313评论 0 0
  • 1.十进制-->二进制:十进制转为二进制主要是对十进制数进行除2运算 2.二进制-->十进制:二进制乘以2的过程 ...
    晨星资源阅读 392评论 0 0
  • 春天刚刚来,垂柳刚抽出了叶芽。窗外却飘起了雪,一片两片。天暗了,雪花愈来愈密,尚稚嫩的春风从窗口钻进来,带着冬天的...
    微风轻扬晓月寒阅读 1,246评论 25 33
  • 最近遇到个爱写作的小伙伴,因为坚持日更,耗费时间心力,在某一天的清晨醒来后,晕倒了! 她说,写作初衷本是希望生活越...
    曼草阅读 329评论 8 4