java基础学习笔记4

Eclipse 4.x学习笔记(1、运行第一个Java程序) (文章已更新为使用最新的Eclipse4.3进行说明) 用Eclipse运行第一个Java程序         Eclipse是著名的IDE,套用一句话,那就是"Eclipse无所不能"。现在,就让我们来使用Eclipse最简单的功能:调试第一个Java程序。 我们所要做的有四步:1、下载Eclipse;2、安装JDK;3、新建Java项目;4、运行。 1、下载Eclipse 阅读详情

java基础学习笔记4

string

String

不可变的字符序列:比如要在一个字符串后面追加一串字符,S1=S1+S2;内存里面是重新开辟了一个内存S3,然后把S1,S2分别复制到S3,并没有改变原来的S1,S2。

内存分析:

String a1="hello";
String a2="hello";
// a1==a2为true
// 因为两个hello是相同的字符串,
// 所以在内存里只需要用一个内存就行了,引用指向他即可


a1=new String("hello");
a2=new String("hello");
// a1==a2比较的是内存位置,所以为false
// a1.equals(a2)是重写的方法,比较的是内容,所以是true

char[] b={'h','i',' ','u','f','o'};
String b1=new String(b);  //"hi ufo"
String b2=new String(b,1,3);//"i u"

常用方法:

String a1="helloworld.My name is ufo!I love java !";
System.out.println(a1.charAt(3));//第4个字符是啥
System.out.println(a1.length());//长度
System.out.println(a1.indexOf("java"));//第一次出现java的索引位置
System.out.println(a1.indexOf("Java"));//一次都没出现就返回-1
System.out.println(a1.equals("qiuwdw"));//false
System.out.println(a1.equalsIgnoreCase("HELLOWORLD.My name is ufo!I love java !"));//忽略大小写的比较相等 true
System.out.println(a1.replace("o","lalala"));
//里面要么都是char,要么都是String,不能一个是char一个是string
System.out.println(a1.startsWith("hello"));
System.out.println(a1.toUpperCase());//转大写
System.out.println(a1.substring(5));//从位置5开始到最后
System.out.println(a1.trim());//去除两端所有空格


int i=123123;
System.out.println(String.valueOf(i));//把int转为字符串,不仅int,double,char,short,long等基本类型都可以
String a2="q,o,w,i,d,n,q,w,d,q,o,n,,d,q,o,i,n,w,,d,我,饿,佛,法,哦,为,妇女";
String[] a3=a2.split(",");//分割
System.out.println(a3.length);//28
System.out.println(a3[27]);//"妇女"

StringBuffer

StringBuffer

可变的字符序列

声明StringBuffer时必须new,不能直接给他字符串:

StringBuffer a=“sdcwe”;错误的!

StringBuffer a=new StringBuffer(“sdcwe”);正确的!

常用方法:

StringBuffer b1 = new StringBuffer("hello");
b1.append(" i am ufo");//追加字符串"hello i am ufo"
b1.insert(7,"charu");//第七个位置插入
System.out.println(b1.reverse());//倒叙

基础数据类型包装类

int 的包装类Integer,char 的包装类Character

doule float short long 的包装类是各自首字母大写

首先看Integer:(更多细节可以自己去看API文档)

声明:

Integer a=new Integer("a");//报错
Integer a=new Integer("123123");//123123
Integer a=new Integer('a');//97

image-20200929164053331

Math

Math

Math.E//e的值 Math.random()//0-1随机产生一个值

Math.pow(x,3) Math.sqrt(144) Math.round(4.5)//四舍五入

Math.toRadians(60) //60°化成π/3

Math.toDegrees(Math.PI/4 ) //π/4化成45°

File

File

注意,他存的是文件的路径或者是目录的路径

并不是真正的文件!

image-20200929165354575

separator,表示路径分隔符,根据不同系统使用不同分隔符

用法:

 String spe= File.separator;
        String dirPATH="D:"+spe+"filetest"; // 打印出来是D:\filetest
//接下来尝试创建一个文件
        String filename="filetest.txt";
        File a=new File(dirPATH,filename);
        if (a.exists()){
            System.out.println("这个文件存在啦!!他的绝对路径是:"+a.getAbsolutePath());
            System.out.println("他的文件大小是:"+a.length());
            System.out.println("他可以被写入吗?"+a.canWrite());
        }
        else{
            a.getParentFile().mkdirs();//在他的上级目录中创建这个目录
            //然后再创建这个文件,需要try catch
            try {
                a.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

image-20200929170202855

再次运行:

image-20200929170242842

练习:展示层级目录:

    public static void main(String[] args) {
        File f = new File("D:\\BaiduNetdiskDownload\\M音乐\\华晨宇");
        System.out.println(f.getName());
        tree(f, 1);
    }

    private static void tree(File f, int level) {

        String preStr = "";
        for(int i=0; i<level; i++) {
            preStr += "    ";
        }

        File[] childs = f.listFiles();
        for(int i=0; i<childs.length; i++) {
            System.out.println(preStr + childs[i].getName());
            if(childs[i].isDirectory()) {
                tree(childs[i], level + 1);
            }
        }
    }

结果:

image-20200929170601777

Enum

枚举Enum

为什么用它?要求一个变量只能从规定好的几个值当中去取值。

更多用法参考官方API文档。

public class enumtets {

    //枚举类型直接写元素进去,不用加引号
    public enum Myfavorite {
        milk, eggs, vegetable, musics, games;
    }
    public static void main(String[] args) {
        Myfavorite a = Myfavorite.milk;
        System.out.println(a);//打印milk
        System.out.println(a instanceof Myfavorite);//true,说明a是Myfavorite类型,不是String类型
        switch (a) {
            case milk:
                System.out.println("I like milk");
                break;
            case eggs:
                System.out.println("I like eggs");
                break;
        }
    }
}
Collection

容器

image-20200929171433554

collection的接口:

image-20200930133947420

Collections

Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集 合中元素进行排序、搜索以及线程安全等各种操作。

排序(Sort) 混排(Shuffling)反转(Reverse) 替换所有的元素(Fill) 拷贝(Copy)

返回Collections中最小元素(min) …等等

HashSet

举例:

定义两个类,Person和Animal,

一个重写了equals和hashcode,一个没重写equals和hashcode

注意:重写equals和hashcode有个快捷方式:

image-20200930133613108

当然,也可以自己重写这两个构造方法!

class Person {
    int id;
    String name;

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }
}


class Animal {
    int id;
    String name;

    @Override
    public String toString() {
        return "Animal{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Animal(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name);
    }

    @Override
    public boolean equals(Object a) {
        if (a instanceof Animal) {
            Animal b = (Animal) a;
            if (name.equals(b.getName()) && id == b.getId()) {
                return true;
            }
        }
        return super.equals(a);

    }
}

主函数:

  public static void main(String[] args) {
        Collection m = new HashSet();//此处用Collection,可以方便以后换其他类型,不限于HashSet

        //HashSet 有序 不可重复 比较的是equals,
        m.add("hello");
//        m.remove("hello");
        //String的equals重写了,所以可以remove


        m.add(new Person(12, "ufo"));
        m.remove(new Person(12, "ufo"));
//        //Person的equals方法没没重写,相当于比较的内存位置,所以不能remove掉
//
        m.add(new Animal(12, "Monkey"));
        m.remove(new Animal(12, "Monkey"));
//        //Animal的equals方法重写了,所以可以remove掉

        System.out.println(m);//[hello, Person{id=12, name='ufo'}]


    }

只需记住,重写equals还要记得重写hashCode。

Iterator迭代器

通过Collection对象.iterator获取到这个对象的iterator,

然后通过获取到的这个iterator进行遍历。

public static void main(String[] args) {
        Collection m = new HashSet();

        m.add(new Person(12, "ufo1"));
        m.add(new Person(12, "ufo2"));
        m.add(new Person(12, "ufo3"));
        m.add(new Person(12, "ufo4"));


        Iterator i=m.iterator();
        while (i.hasNext()){
            //i.hasNext返回的true or false
            //i.next返回的是object,需要自己转换类型
            Person a=(Person)i.next();
            System.out.println(a);

            //打印Person{id=12, name='ufo3'}
            //Person{id=12, name='ufo4'}
            //Person{id=12, name='ufo1'}
            //Person{id=12, name='ufo2'}
        }
    }
List

List

LinkedList

举例:add set remove

    public static void main(String[] args) {
        List m = new LinkedList();
        //可重复
        m.add(new Music("m1", 100, "aa"));
        m.add(new Music("m1", 100, "aa"));
        m.add(new Music("m1", 100, "aa"));
        m.add(new Music("m1", 100, "aa"));

        m.add("abc");//加在最后面
        m.add(1,"zxc");//加在指定位置后面

        m.set(0,"qwe");//修改指定位置的元素
        m.remove(1);//去除指定位置元素
        m.remove( new Music("m1", 100, "aa"));//去除第一个匹配到的指定元素

        System.out.println(m);

    }

举例:sort shuffle reverse

sort时需要list里面的对象类需要实现Comparable<>接口,重写了compareTo方法!

举例:

 public static void main(String[] args) {
        List m = new LinkedList();

        m.add("qwe");
        m.add("123");
        m.add("q12we");
        m.add("123");
        m.add("234s");

        Collections.sort(m);
        //打印 [123, 123, 234s, q12we, qwe]

    }
Comparable接口和compareTo方法

compareTo

返回0表示this == obj
返回正数表示this > obj
返回负数表示this < obj

举例:

重点:类实现Comparable,<>中括号里面啥也不填,表示默认传入Object对象


public class Music implements Comparable<Music> {
    String name;
    int playtime;
    String artist;

    @Override
    public String toString() {
        return "Music{" +
                "name='" + name + '\'' +
                ", playtime=" + playtime +
                ", artist='" + artist + '\'' +
                '}';
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Music music = (Music) o;
        return playtime == music.playtime &&
                Objects.equals(name, music.name) &&
                Objects.equals(artist, music.artist);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, playtime, artist);
    }

    public String getName() {
        return name;
    }

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

    public int getPlaytime() {
        return playtime;
    }

    public void setPlaytime(int playtime) {
        this.playtime = playtime;
    }

    public String getArtist() {
        return artist;
    }

    public void setArtist(String artist) {
        this.artist = artist;
    }

    public Music(String name, int playtime, String artist) {
        this.name = name;
        this.playtime = playtime;
        this.artist = artist;
    }

    @Override
   @Override
    public int compareTo(Music o) {

        return name.compareTo(o.getName());

    }
}

调用:

   public static void main(String[] args) {
        List m = new LinkedList();

        m.add(new Music("m1", 100, "aa"));
        m.add(new Music("m2", 100, "aa"));
        m.add(new Music("m3", 100, "aa"));
        m.add(new Music("007m", 100, "aa"));

        Collections.sort(m);
//打印[Music{name='007m', playtime=100, artist='aa'}, Music{name='m1', playtime=100, artist='aa'}, Music{name='m2', playtime=100, artist='aa'}, Music{name='m3', playtime=100, artist='aa'}]

    }

如何选择数据结构

衡量标准:读的效率和改的效率
Array读快改慢
Linked改快读慢
Hash两者之间

Map

键值不能重复,

key–value value必须是个对象,不能是基础数据类型

JDK1.5以后可以自动打包或者解包

image-20200930164954839

HashMap

哈希表实现

TreeMap

二叉树实现,红黑树实现

例子:

统计单词数量:

       private static final int ONE = 1;
        public static void main(String args[]) {
            Map m = new HashMap();
            for (int i = 0; i < args.length; i++) {

                int freq = (Integer) m.get(args[i]) == null ? 0 : (Integer) m.get(args[i]);
                m.put(args[i], freq == 0 ? ONE : freq + 1);
            }
            System.out.println
                    (m.size() + " distinct words detected:");
            System.out.println(m);
        }
}

传入参数:

image-20200930165552299

运行:

image-20200930165600636

泛型

起因

JDK1.4以前类型不明确:
装入集合的类型都被当作Object对待,从而失去自己的实际类型。
从集合中取出时往往需要转型,效率低,容易产生错误。

解决办法

在定义集合的时候同时定义集合中对象的类型
可以在定义Collection的时候指定
也可以在循环时用Iterator指定

好处

增强程序的可读性和稳定性

例如:List就只能放String类型

List<String> c = new ArrayList<String>();
c.add("aaa");//里面只能装String
c.add("bbb");
c.add("ccc");

c.add(new person());//报错,只能装String

例如:Map也可以指定键值对类型

  Map<String, Integer> m = new HashMap();
技术美术个人笔记(十六)——Houdini到UE的大地形 文章目录关于地形白模制作关于PDG流程 关于地形白模制作 用heightfield noise和笔刷刷出合适的mask做山形叠加: 用remap可快捷反转mask ,用来做平原地区的小型丘陵: 接着用clip切平最低处,用distort制造侵蚀等,对部分地区用笔刷进行微调拓宽峡谷: 用经过sweep打平的曲线以及裁切的各种多面体用heightfield_project投影制作河道和水池,用blur mask并remap的方法拓宽河道 用distort、erode制造合适的弯曲和侵蚀,同理可挖出月牙形 阅读详情

相关推荐

C#中使用OpenCV的常用函数

c# opencv 常见操作

大黄鸭在发光的专栏 1080

Java类中重写toString方法

默认方法 当需要将一个对象输出到显示器时,通常要调用他的toString()方法,将对象的内容转换为字符串。java中的所有类默认都有一个toString()方法。默认情况下 System.out.println(对象名)或者System.out.println(对象名.toString())输出的是此对象的类名(包名+类名)和此对象对应内存的首地址,默认输出例子: 如果想自定

光阴迷客的知识库 1万+

【寄存器模型】二、前门访问与后门访问

1.后门访问可以更好的完成前门访问能够完成的事情:后门访问不消耗仿真时间,且消耗的运行时间也远小于前门访问的运行时间。 2.后门访问可以完成前门访问不能完成的事:对于某些特定的场景,如网络通信系统中的一些只读计数器,当要验证计数器进位归零的场景时,前门访问无法完成写寄存器操作,只能通过消耗仿真时间来使计数器到达特定的计数值。而后门访问可以直接对只读寄存器赋一个初值......

carrotbanana的博客 9658

Java常用类

Java常用类 Object类 toString方法 源码分析: public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } toString 用于返回该对象的字符串表示,它的值等于:getClass()+’@’+Interger.toHexString(hashCode()) 。 由于 toString 方法返回的是内存的地址,实际开发中没太大意义,所以我们需要

skdjq666的博客 580

C++总结笔记

/ ++操作 这是因为定义的数组,申请的是连续的内存空间,当ptr++(ptr是int类型的指针变量),地址空间向后偏移是以int类型的大小为单位进行偏移的,相当于int类型数组元素的向后偏移。使用场景:它是最通用的转换形式,用于将一种类型转换为另一种类型,例如基本数据类型的转换(如 float 转 int),指向基类的指针或引用转为指向派生类的指针或引用等。在派生类被调用时会调用派生类中的函数,不会调用基类中的被重写的函数(基类中的函数需要加上virtual才可以,即基类中的函数是虚函数)。

weixin_50890461的博客 5235

python——体育收入排行2012-2019

请分析文件并读取数据,完成以下功能: 1. 某年的收入排名前若干名选手 如果输入n是2012-19之间的年份,则可以输入整数k,输出n年的前k名排名信息。如果k大于当年排名运动员人数,则输出当年所有的信息。每行一名运动员信息,以' | '间隔该行各项信息。 2. 某年属于某个运动项目的所有运动员信息,和收入总和 如果输入的是'sport'(不区分大小写),则可以继续输入一个年份201*,输出一个当年排行中的运动项目菜单,按照字符串升序排列,格式见示例,再输入运动项目对应的数字来输出该项运动当

m0_62488776的博客 2258

[java学习笔记]-注解和反射

关键字@interface多参数//注解可以显示赋值,如果没有默认值,我们就必须给注解赋值@MyAnnotation(name="Muz1")publicvoidtest(){//注解的参数参数类型+参数名();//如果默认值为-1,代表不存在,indexof,如果找不到就返回-1String[]schools()default{"牛马大学","说唱带专"}}单参数参数名是value()可以省略注解参数。...

Mr.木Mu 418

Apache Paimon快照管理实战:如何避免Flink作业中的反压问题?

本文深入探讨了如何通过优化Apache Paimon的快照管理机制来避免Flink作业中的反压问题。详细解析了同步与异步快照过期模式的适用场景及配置建议,并提供了Checkpoint策略与状态后端的协同优化方案,帮助提升实时数据处理的性能和稳定性。

i1j2k的博客 177

Java Spring学习笔记

1、Spring概述 1.1 简介 网站:https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-factory-scopes spring理念:使现有的技术更加简单,整合了现有的技术框架。 SSH:Struct2 + Spring + Hibernate SSM:SpringMVC + Spring + Mybatis 导包 (maven): <!-- https://

qq_40378172的博客 439

A B C三个气象站的小波分析结果解读

在小波分析的过程中,信号的不同频率分量会在不同的尺度上显现,而纵轴上的数值表示信号在相应尺度上的强度或能量。2. **小波方差的横轴(水平轴)**:横轴上的尺度表示用于分析的小波函数的尺度。1. **共同趋势:** 在所有三个点的小波方差图中,随着尺度的增加,方差逐渐增大,尤其是在较大的时间尺度上。3. **尺度30的特殊性:** 在所有点的小波方差图中,尺度30似乎是一个特殊的点,对应着一个较长的时间尺度上的波动或变化。2. **方差的大小:** 方差的大小反映了在相应尺度下信号的波动强度。

weixin_44259522的博客 860

ESP-SPARKBOT AI 智能机器人:v1.2 全流程复刻指南

本文介绍 ESP-SPARKBOT AI 智能机器人 v1.2 版本的全流程复刻,包含 PCB 、3D 打印、固件烧录、常见问题解决、参考资料等

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 9259

实体类 @Override public String toString()的意义

System.out.println(entity)必须实现toString方法

kevin_loving的博客 9190

沉降预测算法-指数曲线法

沉降预测的指数曲线法原理和代码实现

yh523的博客 1010

Java 学习笔记(基础篇4)

只是一个标识符,只要方便理解和使用即可(通常会取有意义的名字,比如。让索引从 26 开始重新转为 0-25(例如 i=26 时,)不能错,因为它决定了方法能接收什么样的数据;,直到 i=51 时为 65+25=90 即。(2) 注意方法的返回值类型是 Int[ ]),直到 i=25 时为 122(即。原理:在 ASCII 编码中,当 i=0 时为 97(即。),i=1 时为 98(即。,对应 65+0=65 即。原理:ASCII 中。

2302_79807388的博客 352

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java学习笔记4

参考资料:【【零基础 快速学Java】韩顺平 零基础30天学会Java】BV1fh411y7R8、

kwert666的博客 1726

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java基础学习笔记4

PS:感觉自己写这些代码就像是在写题目一样,虽然之前没刷过很多力扣,但力扣的题目应该有和它们很像的吧?(我猜的),明天继续,但我明天要开始学剩下的爬虫,fighting。栈 方法运行时的内存,比如main方法运行,进入方法栈中执行。*静态:手动指定数组元素,系统会根据元素个数,计算数组长度(需求中明确了要操作的数值)数据类型[] 数组名 = new 数据类型[] {元素1,元素2....};今天更新数组章节,明天是方法章节,其实我大部分写的都是练习的代码。

qichi333的博客 533

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java4Android学习笔记

01_Java考古学 Java4Android课程介绍 什么是Java考古学 Java发展史 总结 02_Java创世纪 书写源代码、编译、运行 在命令行窗口中,通过cd进入所写的java目录(假设所写的java程序为HelloWorld.java),运行 javac HelloWorld.java 进行编译...

qq_40627648的博客 441

java4.12—4.14

4.12笔记 4.13笔记 4.14笔记

huyidai的博客 210

Java学习笔记4

以上是我认为在Java基础中较为重要的概念,以后还会有其他部分的概念笔记,希望这份笔记可以帮到大家;如果各位发现了文档中的错误也请多多指正。

xiaoheizi2的博客 1578

Java基础 学习笔记4

1.继承 继承是类与类的一种关系;Java中的继承是单继承,只有一个父类。 继承的好处:子类直接拥有父亲的所有属性和方法(private修饰的无效!),可实现代码复用。 语法规则: class 子类 extends 父类 eg:class Dog extends Animal{ … } 2.Java中的方法重写 如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调...

weixin_43684054的博客 384

JAVA基础学习笔记4

一 问题: try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 }finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally } 二 问题: j...

一个被工科被虐了6年多的女生的technical blog 112

JAVA学习笔记4

精通JAVA。

weixin_44382801的博客 999

java学习笔记4——数组

定义了一个基准值pivot,有两个指针,一个从数组的从前往后指,另外一个从后往前指,从前往后走,找到的第一个low比pivot大的,就停下来,high从后往前走,找到第一个比pivot小的就停下来,交换low与high,按照当前的索引,继续执行上述操作。定义数组:int[] arr2 = new int[]{2,4,5,8,12,15,19,26,37,49,51,66,89,100};定义数组:int[] arr =new int[]{34,54,3,2,65,7,34,5,76,34,67};

qq_58956810的博客 1217

Java学习笔记4 数组

1、数组概述 2、数组声明 3、数组使用 4、多维数组 5、Arrays 6、稀疏数组类创建数组是相同类型数据的有序集合.数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.二行五列的数组。

小喾苦的博客 471
上一篇: java基础学习笔记3
下一篇: java基础学习笔记5
UFOO2
博客等级 码龄6年 7粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值