JAVA学习笔记

JAVA学习笔记,第1张

JAVA学习笔记

JAVA学习笔记
  • JAVA入门
    • 封装——四个访问控制符
    • 多态
    • 对象的转型
    • 抽象方法_抽象类
    • 接口的定义和实现
    • String类常用方法
    • 异常处理
      • FileReader 读取文件异常处理
      • JDK新特性_try-with-resource(自动关闭Closeable接口的资源)
      • 包装类基本用法
      • StringBuilder和StringBuffer用法
      • 字符序列陷阱_时间和空间效率测试
        • 使用StringBuilder进行字符串的拼接既高效又节省空间
      • Date类用法
      • DateFormat时间格式化类
      • Math类和Random类
      • File类的使用
      • File类_递归_打印目录树结构
      • 枚举_switch语句复习
    • 容器
      • 泛型类
      • 泛型接口
      • 泛型方法_非静态方法
      • 泛型方法_静态方法
      • 泛型方法与可变参数
      • 无界通配符
      • 统配符的上限限定
      • 统配符的上限限定
      • 泛型总结
      • Java中的容器结构

JAVA入门 封装——四个访问控制符



多态



对象的转型

抽象方法_抽象类


接口的定义和实现

String类常用方法
package project02;

public class StringTest1 {
    public static void main(String[] args) {
        String s1 = "core Java";
        String s2 = "Core Java";
        System.out.println(s1.charAt(3)); //提取下标为3的字符
        System.out.println(s2.length());  //字符串的长度
        System.out.println(s1.equals(s2));  //比较两个字符串是否相等
        System.out.println(s1.equalsIgnoreCase(s2)); //比较两个字符串(忽略大小写)
        System.out.println(s1.indexOf("Java"));   //字符串s1中是否包含Java    返回首次出现的位置
        System.out.println(s1.indexOf("apple"));  //字符串s1中是否包含apple

        String s = s1.replace(' ','&');  //将s1中的空格替换成&
        System.out.println("result is "+s);

    }
}

package project02;

public class StringTest2 {
    public static void main(String[] args) {
        String s = "";
        String s1 = "How are you?";
        System.out.println(s1.startsWith("How"));  //是否以How开头
        System.out.println(s1.endsWith("you"));   //是否以you结尾
        s = s1.substring(4); //提取字符串:从下标为4开始到字符串结尾为止
        System.out.println(s);
        s = s1.substring(4,7); //提取字符串 [4,7)   不包括7
        System.out.println(s);
        s = s1.toLowerCase();  //全部转小写
        System.out.println(s);
        s = s1.toUpperCase();   //全部转大写
        System.out.println(s);
        String s2 = " How old are you!  ";
        s = s2.trim();  //去除字符串首尾的空格。 中间空格不能去除
        System.out.println(s);
    }
}

异常处理 FileReader 读取文件异常处理
package project03;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class test01 {
    public static void main(String[] args) {
        FileReader reader = null;
        try {
              reader = new FileReader("C:/Users/kangyi/Desktop/a.txt");
              char[] cbuf  =new char[1000];
              int len = reader.read(cbuf);
              System.out.println(new String(cbuf,0,len));
//            reader = new FileReader("C:/Users/kangyi/Desktop/a.txt");
//            char c = (char)reader.read();
//            char c1 = (char)reader.read();
//            char c2 = (char)reader.read();
//            System.out.println("文本内容为:"+c+c1+c2);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(reader != null)
                {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

JDK新特性_try-with-resource(自动关闭Closeable接口的资源)
package project03;

import java.io.FileReader;
import java.io.IOException;

public class test03 {
    public static void main(String[] args) {
        try(FileReader reader = new FileReader("C:/Users/kangyi/Desktop/a.txt")){
            char[] cbuf = new char[1000];
            int len = reader.read(cbuf);
            System.out.println(new String(cbuf,0,len));
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

包装类基本用法
package project03;

public class test04 {
    public static void main(String[] args) {
        Integer i = new Integer(50);  //从Java9开始被废弃
        Integer j = Integer.valueOf(10);   //官方推荐

        int a = j.intValue();    //把包装类对象转成基本数据类型
        double b = j.doublevalue();

        //把字符串转成数字
        Integer m = Integer.valueOf("456");
    }
}

StringBuilder和StringBuffer用法
package project03;

public class test05 {
    public static void main(String[] args) {

        StringBuilder sb = new StringBuilder("abc");
       // StringBuffer sb2 = new StringBuffer("abc");

        //   StringBuilder
        StringBuilder sb1 = new StringBuilder();
        for (int i =0;i<7;i++){
            sb.append((char)('a' + i )); //追加单个字符
        }
        System.out.println(sb.toString()); //转换成String输出
        sb.append(",I can sing my abc!");  // 追加字符串
        System.out.println(sb.toString());
        //StringBuffer,下面的方法同样适用于StringBuilder

        StringBuffer sb3 = new StringBuffer("北京尚学堂");
        sb3.insert(0,"爱").insert(0,"我"); //插入字符串
        System.out.println(sb3);
        sb3.delete(0,2); //删除字符串
        System.out.println(sb3);
        sb3.deleteCharAt(0).deleteCharAt(0);  //删除某个字符
        System.out.println(sb3.charAt(0));    //获取某个字符
        System.out.println(sb3.reverse());    //字符串逆序
    }
}

字符序列陷阱_时间和空间效率测试 使用StringBuilder进行字符串的拼接既高效又节省空间
package project03;

import java.sql.SQLOutput;

public class test06 {
    public static void main(String[] args) {
        //使用String进行字符串的拼接
        String str = "abc";
        long num1 = Runtime.getRuntime().freeMemory(); // 获取系统剩余内存空间
        long time1 = System.currentTimeMillis(); //获取系统的当前时间
        for(int i = 0;i<5000;i++){
            str = str +i;  //相当于产生了5000个对象
        }
        long num2 = Runtime.getRuntime().freeMemory();
        long time2 = System.currentTimeMillis();
        System.out.println(str.toString());
        System.out.println("String占用内存:"+(num1-num2));
        System.out.println("String占用时间:"+(time2-time1));

        //  使用StringBuilder进行字符串的拼接
        StringBuilder sb1 = new StringBuilder("abc");
        long num3 = Runtime.getRuntime().freeMemory();
        long time3 = System.currentTimeMillis();
        for (int i = 0;i<5000;i++){
            sb1.append(i);
        }
        long num4 = Runtime.getRuntime().freeMemory();
        long time4 = System.currentTimeMillis();
        System.out.println(str.toString());
        System.out.println("String占用内存:"+(num3-num4));
        System.out.println("String占用内存:"+(time4-time3));
    }
}

结果:

Date类用法
package project03;

import java.util.Date;

public class test07 {
    public static void main(String[] args) {
        long time = System.currentTimeMillis();//获取当前计算机时间
        System.out.println(time);

        Date date1 = new Date();//new一个date,获取当前时间
        System.out.println(date1);
        System.out.println(date1.getTime());
        Date date2 = new Date(-21L*365*24*3600*1000);//计算机基点时间为1970,(-21L*365*24*3600*1000)倒回1949年
        System.out.println(date2);
        System.out.println(date2.equals(date1));//比较时间是否相等
        System.out.println(date2.before(date1));//比较两时间前后顺序
        System.out.println(date2.after(date1));//

    }
}
DateFormat时间格式化类

package project03;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

//测试DateFormat时间格式化类
public class DateFormat {
    public static void main(String[] args) throws ParseException {
        //字符串转时间
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//new一个时间格式
        String str = "2049-10-1 10:00:00";
        Date guoqing100 = format.parse(str);
        System.out.println(guoqing100.getTime()); //2516666400000
        System.out.println(guoqing100);   //Fri Oct 01 10:00:00 CST 2049

        //时间转字符串
        SimpleDateFormat format2 = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒");
        Date date2 = new Date(2344551651651L);
        String date2Str = format2.format(date2);
        System.out.println(date2Str);   //2044年04月18日 08时20分51秒

        //小妙招
        Date now = new Date();
        SimpleDateFormat f1 = new SimpleDateFormat("现在是今年的第D天,第w周。");
        String str3 = f1.format(now);
        System.out.println(str3);  //现在是今年的第349天,第51周。


    }
}

Math类和Random类
package project03;

//Math类
public class TestMath {
    public static void main(String[] args) {
        //取整相关 *** 作
        System.out.println(Math.ceil(3.2));   //向上取整
        System.out.println(Math.floor(3.2));  //向下取整
        System.out.println(Math.round(3.2));   //四舍五入
        System.out.println(Math.round(3.8));

        //绝对值,开方,a的b次幂等 *** 作
        System.out.println(Math.abs(-45));   //绝对值
        System.out.println(Math.sqrt(64));    //开方
        System.out.println(Math.pow(5,2));     //5的2次幂
        System.out.println(Math.pow(2,5));     //2的5次幂

        //Math类中常用的常量
        System.out.println(Math.PI);     //3.141592653589793
        System.out.println(Math.E);      //2.718281828459045

        //随机数
        System.out.println(Math.random());  //[0,1)

    }
}

package project03;
import java.util.Random;
//Random类
public class TestRandom {
    public static void main(String[] args) {
        Random rand = new Random();
        //随机生成[0,1)之间的double类型的数据
        System.out.println(rand.nextDouble());
        //随机生成int类型允许范围内的整型数据
        System.out.println(rand.nextInt());
        //随机生成[0,1)之间的float类型的数据
        System.out.println(rand.nextFloat());
        //随机生成false或者true
        System.out.println(rand.nextBoolean());
        //随机生成[0,10)之间的int类型的数据
        System.out.println(rand.nextInt(10));
        //随机生成[20,30)之间的int类型的数据
        System.out.println(20+rand.nextInt(10));
        //随机生成[20,30)之间的int类型的数据(此种方法计算较为复杂)
        System.out.println(20+(int)(rand.nextDouble()*10));
    }
}
File类的使用

package project03;

import java.io.File;
import java.io.IOException;
import java.util.Date;

//  File类的用法
public class TestFile {
    public static void main(String[] args) throws IOException {
        System.out.println(System.getProperty("user.dir"));  //获取当前文件位置
        File f = new File("a.txt");  //相对路径:默认放到user.dir目录下面
        f.createNewFile();   //创建文件
        File f2 = new File("C:/Users/kangyi/b.txt");  //绝对路径
        f2.createNewFile();
        f2.delete();   //删除文件

        System.out.println("File是否存在:"+f.exists());
        System.out.println("File是否是目录:"+f.isDirectory());
        System.out.println("File是否是文件:"+f.isFile());
        System.out.println("File最后修改的时间:"+new Date(f.lastModified()));
        System.out.println("File的大小:"+f.length());

        File f3 = new File("C:/Users/kangyi/电影/华语/大陆");
        boolean flag = f3.mkdir();  // 目录结构中有一个不存在,则不会创建整个目录树
        System.out.println(flag);   //创建失败

        boolean flags = f3.mkdirs();  //目录结构中有一个不存在也没关系:创建整个目录树
        System.out.println(flags);   //创建成功

    }
}

File类_递归_打印目录树结构
package project03;

import java.io.File;

//打印目录树,结合递归
public class PrintFileTree {
    public static void main(String[] args) {
        File f = new File(System.getProperty("user.dir"));
        printFile(f,0);
    }

    static void printFile(File file,int level){
        for (int i=0;i 
枚举_switch语句复习 
package project03;
import java.util.Random;

//测试枚举_switch语句复习
public class TestEnum {
    public static void main(String[] args) {
        System.out.println(jijie.spring);
        System.out.println(Season.spring);

        for(Season s:Season.values()){
            System.out.println(s);
        }

        int a = new Random().nextInt(4); //生成0,1,2,3随机数
        switch (Season.values()[a]){
            case spring:
                System.out.println("春天");
                break;
            case summer:
                System.out.println("夏天");
                break;
            case autumn:
                System.out.println("秋天");
                break;
            case winter:
                System.out.println("冬天");
                break;
        }
    }
    
    //枚举
    enum Season{
        spring,summer,autumn,winter
    }

    //普通方法定义一个类
    class jijie{
        public static final int spring = 0;
        public static final int summer = 1;
        public static final int autumn = 2;
        public static final int winter = 3;
    }
}

容器 泛型类

package project04;

//泛型类
public class Generic {
    private T flag;

    public T getFlag() {
        return this.flag;
    }

    public void setFlag(T flag) {
        this.flag = flag;
    }

}
package project04;

// 测试类
public class TestGeneric {
    public static void main(String[] args) {
        Generic generic = new Generic<>();
        generic.setFlag("admin");
        String flag = generic.getFlag();
        System.out.println(flag);

        Generic generic1 = new Generic<>();
        generic1.setFlag(100);
        Integer flag1 = generic1.getFlag();
        System.out.println(flag1);
    }
}

泛型接口
package project04;

//定义一个泛型接口
public interface Igeneric {
    T getName(T name);
}

package project04;

//定义一个接口实现类
public class IgenericImpl implements Igeneric{
    @Override
    public String getName(String name) {
        return name;
    }
}

package project04;

//测试类
public class TestIgeneric {
    public static void main(String[] args) {
        IgenericImpl igeneric = new IgenericImpl();
        String name = igeneric.getName("kangyi");
        System.out.println(name);

        Igeneric igeneric1 = new IgenericImpl();
        String name1 = igeneric1.getName("kangkang");
        System.out.println(name1);

    }
}

泛型方法_非静态方法

非静态方法使用泛型有两种情况:
1.通过泛型类的泛型来使用
2.通过泛型方法的方式来使用泛型

package project04;

//泛型方法
public class MethodGeneric {

    //定义一个无返回值的泛型方法
    public  void setName(T name){
        System.out.println(name);
    }

    //定义一个有返回值的泛型方法
    public  T getName(T name){
        return name;
    }
}

package project04;

//泛型方法测试类
public class TestMethodGeneric {
    public static void main(String[] args) {
        MethodGeneric methodGeneric = new MethodGeneric();
        methodGeneric.setName("kangyi");
        methodGeneric.setName(123456);

        MethodGeneric methodGeneric1 = new MethodGeneric();
        String name = methodGeneric1.getName("kangkang");
        Integer name1 = methodGeneric1.getName(123);
        System.out.println(name);
        System.out.println(name1);
    }
}

泛型方法_静态方法

静态方法使用泛型的方式只有一个:即只能在静态方法上定义泛型

package project04;

//泛型方法
public class MethodGeneric {

    //非静态方法
    //定义一个无返回值的泛型方法
    public  void setName(T name){
        System.out.println(name);
    }

    //定义一个有返回值的泛型方法
    public  T getName(T name){
        return name;
    }

    //静态方法
    public static  void setFlag(T flag){
        System.out.println(flag);
    }

    public static  T getFlag(T flag){
        return flag;
    }
}

package project04;

public class TestStaticMethodGeneric {
    public static void main(String[] args) {
        MethodGeneric.setFlag("kangyi");
        MethodGeneric.setFlag(123456);

        String flag = MethodGeneric.getFlag("kangkang");
        System.out.println(flag);
        Integer flag1 = MethodGeneric.getFlag(123456);
        System.out.println(flag1);

    }
}

泛型方法与可变参数
package project04;

//泛型方法
public class MethodGeneric {

    //非静态方法
    //定义一个无返回值的泛型方法
    public  void setName(T name){
        System.out.println(name);
    }

    //定义一个有返回值的泛型方法
    public  T getName(T name){
        return name;
    }

    //静态方法
    public static  void setFlag(T flag){
        System.out.println(flag);
    }

    public static  T getFlag(T flag){
        return flag;
    }

    //使用泛型定义一个可变参数的方法
    public void method (T...args){
        for (T t :args){
            System.out.println(t);
        }

    }
}

package project04;

//测试泛型方法与可变参数
public class TestMethodGeneric01 {
    public static void main(String[] args) {
        MethodGeneric methodGeneric = new MethodGeneric();
        String[] arr = new String[]{"a","b","c"};
        Integer[] arr1 = new Integer[]{1,2,3};
        methodGeneric.method(arr);
        methodGeneric.method(arr1);
    }
}

无界通配符

package project04;


//? 无界通配符(通配任何类型)
//使用通配符能对泛型是任何类型的Generic的对象中的值做输出
public class ShowMsg {
    public void showFlag(Generic generic){
        System.out.println(generic.getFlag());
    }
}

package project04;

//测试通配符
public class TestShowMsg {
    public static void main(String[] args) {
        ShowMsg showMsg = new ShowMsg();
        Generic generic = new Generic<>();
        generic.setFlag(20);
        showMsg.showFlag(generic);

        Generic generic1 = new Generic<>();
        generic1.setFlag(50);
        showMsg.showFlag(generic1);

        Generic generic2 = new Generic<>();
        generic2.setFlag("kangyi");
        showMsg.showFlag(generic2);
    }
}

统配符的上限限定


统配符的上限限定

泛型总结

Java中的容器结构



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5671986.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存