java学习随手笔记(更新)

java学习随手笔记(更新)

注: 该笔记中的知识点不具备连续性,这是我在学习Java中随手记下的东西,该笔记不是事无巨细的将所有的知识点一一记录,只是记录了我在听课过程中自我感觉需要记录的知识点。故此笔记不具备参考价值,如果您看到了这篇笔记,请将此略过。
向上转型是为了参数类型的统一
向下转型是为了调用子类中的特殊方法
java学习随手笔记(更新)_第1张图片
工厂模式,耦合,
代理设计模式
java学习随手笔记(更新)_第2张图片
java学习随手笔记(更新)_第3张图片

包和访问控制权限

  • import语句只能出现在package语句之下,class定义的语句之上。
  • 但是,在idea里编辑时却没有这些问题,不晓得是什么原因。
    有时设置set classpath不起作用,可以看一下cmd的表头是不是有系统无法在消息文件中为 Application 找到消息号为 0x2350 的消息文本。如果有这个的话,应该在win+r里面直接控制cmd,这样问题才会解决
    jar的一些命令
用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
    -c  创建新档案
    -t  列出档案目录
    -x  从档案中提取指定的 (或所有) 文件
    -u  更新现有档案
    -v  在标准输出中生成详细输出
    -f  指定档案文件名
    -m  包含指定清单文件中的清单信息
    -n  创建新档案后执行 Pack200 规范化
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储; 不使用任何 ZIP 压缩
    -P  保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 'm', 'f' 和 'e' 标记的指定顺序相同。

示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:
       jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 'mymanifest' 并
           将 foo/ 目录中的所有文件归档到 'classes.jar' 中:
       jar cvfm classes.jar mymanifest -C foo/ .

比如说我要把包cn整成一个jar文件,我可以这样写
jar -cvf my.jar cn
这样就会生成一个jar文件。
比如我要看my.jar的内容,我应该
jar -tvf my.jar 会出现像下面这样的目录结构

 0 Fri Jan 31 16:34:48 CST 2020 META-INF/
    69 Fri Jan 31 16:34:48 CST 2020 META-INF/MANIFEST.MF
     0 Fri Jan 31 16:34:20 CST 2020 cn/
     0 Fri Jan 31 16:34:20 CST 2020 cn/suyuesheng/
     0 Fri Jan 31 16:34:20 CST 2020 cn/suyuesheng/demo/
   406 Fri Jan 31 16:34:20 CST 2020 cn/suyuesheng/demo/Demo.class

要解压my.jar就用jar -xf my.jar
注意,使用jar文件前必须设置CLASSPATH

  • java的访问控制权限
  • java的访问控制权限的表格
序号 范围 private default protexted public
1 同一类
2 同一包中的类
3 不同包中的子类
4 其他包中的类

命名规范

一、命名规范
1、项目名全部小写,就是如果项目名是多个英语单词组成的,每个单词都要全部小写。
如:doubanssm。
2、包名全部小写。
3、类名首字母大写,也就是帕斯卡命名法,首字母大写,如果类名是多个单词拼成的,每个单词的首字母都要大写。
4、变量名、方法名首字母小写,也就是驼峰命名法,如果名称有多个单词组成,每个单词的首字母都要大写。
如:public int testJava(){}
5、常量名全部大写
如:public static final int ANIMAL_NUMBER=15;
二、命名规则
1、名称只能由字母、数字、下划线、$符号组成
2、不能以数字开头
3、名称不能使用JAVA中的关键字。
4、坚决不允许出现中文及拼音命名。

异常的处理流程

package cn.suyuesheng.errordemo;
//error 的标准用法
class MyMath{
    public int div(int i,int j) throws Exception{//异常交给调用处
        System.out.println("开始计算>>>>>>>>>>>>>>");
        int temp=0;
        try{
            temp=i/j;
        }catch (Exception e){//捕捉异常
            throw e;//抛出异常,异常到了方法这里,随即到了方法调用出
        }finally {
            System.out.println("计算结束>>>>>>>>>>>>>>>>");
        }
        return temp;
    }
}
//自定义异常
class MyException extends Exception{
    public MyException(String msg){
        super(msg);
    }
}
public class ErrorLaw001 {
    public static void main(String[] args) {
        try{
            System.out.println(new MyMath().div(12,3));
        }catch (Exception e){
            e.printStackTrace();
        }
        //
        System.out.println(">-----------------------");
        //检测自定义
        try{
            throw new MyException("haha");
        }catch (MyException e){
            e.printStackTrace();
            System.out.println(e);
        }
    }
}

java学习随手笔记(更新)_第4张图片
选择工作区,eciplse中所有的项目都是以工作区为主的,一个工作区中包含多个项目
eclipse的所有配置都是以工作区为主的。每一个工作区的配置都是独立的。如果发现某一个工作区坏了(或者说你的工作区被整的乱七八糟了),重开一个工作区,一切都会好的
JDT的使用(重点
java学习随手笔记(更新)_第5张图片

jdk1.5新特性

package cn.suyuesheng.new01;

//java1.5 新特性
public class HelloDemo {
    public static void main(String[] args) {
        System.out.println(add(new int[] {1,2,3,354,54524,3}));
        System.out.println(">================");
        System.out.println(addone(1,2,3,4345,45,232453,2435,42534));//这样就能直接输入整形数据
        System.out.println(addForEach(1,2,3,4,5,6,7,8,9,10));
    }

    /**
     * 实现多个数据类型的累加操作
     * 
     * @param data 使用数组完成接收
     * @return 多个整形数据累加的结果
     */
    public static int add(int data[]) {
        int sum = 0;
        for(int i=0;i

泛型

package cn.suyuesheng.fanxing;
//泛型的目的是解决向下转型的安全隐患
class Point {// T是自定义的泛型标识
    private T x;// 此变量的类型由外部确定
    private T y;

    public T getX() {
        return x;
    }

    public void setX(T x) {
        this.x = x;
    }

    public T getY() {
        return y;
    }

    public void setY(T y) {
        this.y = y;
    }

    public String toString() {
        return "Point [x=" + x + ", y=" + y + "]";
    }

}

public class FanXingDemoOne {
    /**
     * 
     * @param args
     */
    public static void main(String[] args) {
        Point x = new Point();// T类型自动变为Integer
        x.setX(30);// 这时用到了自动封装
        x.setY(20);// 这时用到了自动封装
        System.out.println("(" + x.getX().intValue() + "," + x.getY().intValue() + ")");
        Point pp = new Point();
        pp.setX("东经10");
        pp.setY("北纬25");
        System.out.println(pp.toString());
//      ありがとう
        Point cp = new Point<>();// JDK1.7之后可以这样设置
        Point cf = new Point();// 这样默认设置类型为Object
        cf.setX(14);
        cf.setX(49);
        System.out.println((Integer) cf.getX());
        System.out.println(">++++++++++++++");
        cp.setX(12);
        cp.setY(16);
        System.out.println(cp.toString());
    }

}

一个类中多个泛型的情况

package cn.suyuesheng.fanxing;

public class FanXingDemoTwo {// 指定多个泛型类型
    private T age;
    private V name;

    // 泛型里面的构造方法
    public FanXingDemoTwo() {
        this.setAge((T) new Integer(12));
        this.setName((V) "Amy");
    }

    public FanXingDemoTwo(T age, V name) {
        super();
        this.age = age;
        this.name = name;
    }

    public T getAge() {
        return age;
    }

    public void setAge(T age) {
        this.age = age;
    }

    public V getName() {
        return name;
    }

    public void setName(V name) {
        this.name = name;
    }

    public String toString() {
        return "FanXingDemoTwo [age=" + age + ", name=" + name + "]";
    }
    

}
package cn.suyuesheng.fanxing;

public class FanXingDemoTwoTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        FanXingDemoTwo cc = new FanXingDemoTwo();
        cc.setAge(12);
        cc.setName("hah");
        System.out.println(cc.toString());
        System.out.println(">=================");
        FanXingDemoTwo bb = new FanXingDemoTwo(20, "JJK");
        System.out.println(bb.toString());
        System.out.println(new FanXingDemoTwo(40, "lili"));
        System.out.println(cc);
        System.out.println(">================");
        fun(cc);
        fun(new FanXingDemoTwo(120, "kkl"));
    }

    // 泛型的上限和下限
    /* 泛型的上限和下限
     * extends 定义上限
     * super 定义下限
     * ?表示全部类型(任意类型)
     * */
    public static void fun(FanXingDemoTwo temp) {
        
        System.out.println(temp.getName());
        System.out.println(temp);
        
    }
    public static void hun(FanXingDemoTwo temp) {
        temp.setAge("qqq");//这是错误的
        //错误的原因是:实例化对象设定的age的数据类型是Int。hun方法里却改数据类型为String。
        
    }

}

泛型的接口

package cn.suyuesheng.fanxing;
//泛型接口

interface Imessage{
    void print(T t);
}
class Message implements Imessage{//这种定义方法把泛型类型也给继承了了
    public void print(T t) {
        System.out.println(t);
    }
}
class Lmessage implements Imessage{//这种方式在继承的同时注明了接口泛型的类型
    public void print(Integer t) {//这里参数类型必须是Integer
        System.out.println(t);
    }
}
public class FanXingInterface {
    public static void main(String[] args) {
        Imessage cc = new Message();
        cc.print("hello");
        Imessage bb = new Lmessage();
        bb.print(12);
    }
}

枚举

枚举可以限制一个类对象产生的范围

package cn.suyuesheng.meijv;

//枚举
//枚举实现接口
interface IColor{
    public abstract void jj();
}
enum Color implements IColor{
    RED("red"){
        public void fun() {
            System.out.println("红色");//每一个枚举对象都要覆写抽象方法
        }
        public void jj() {//每一个枚举对象都要覆写实现的接口的抽象方法
            System.out.println("枚举能不用就不用");
        }
    },GREEN("green"){
        public void fun() {
            System.out.println("绿色");
        }
        public void jj() {
            System.out.println("每一个枚举对象都要覆写实现的接口的抽象方法");
        }
    },BLUE("blue"){
        public void fun() {
            System.out.println("蓝色");
        }
        public void jj() {
            System.out.println("每一个枚举对象都要覆写实现的接口的抽象方法");
        }
    };
    //枚举中为对象的属性赋值
    private Color(String name){//构造方法必须private
        System.out.println("001");//会被执行三遍
        this.setName(name);
    }
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    //枚举中的抽象方法
    public abstract void fun();
}

public class MeiJvDemoOne {
    public static void main(String[] args) {
        Color c = Color.BLUE;
        System.out.println(c);
        System.out.println(">==================");
        for (Color c1 : Color.values()) {
            System.out.println(c1);
            System.out.println(c1.ordinal());// 返回编号
            System.out.println(c1.name());// 返回数据
            System.out.println(c1.getName());
        }
        c.setName("hh");
        System.out.println(c.getName());
        Color.RED.fun();
        System.out.println(">++++++++++++++");
        for(Color b:Color.values()) {
            b.fun();
            b.jj();
            System.out.println(b.getName());
            System.out.println(b.name());
        }

    }
}

你可能感兴趣的:(java学习随手笔记(更新))