Java笔记

jdk的安装以及环境的搭建

在资源中下载开发环境

第一行Java代码

在控制台上输出HelloWorld

public class HelloWorld{
		public static void main(String[] args){
			System.out.println("HelloWorld");
		}
	}

数据类型

基本数据类型

整   型:byte short int long  位数从8 到16 到32 到64位

浮点型:float double 单精度和双精度,一般常用double

字符型:char 存储单个字符

布尔型:boolean 表述逻辑关系,True 或者False

引用数据类型

类 将一个对象封装成一个类,类里包含着这个对象的属性

接口

数组

定义变量

定义变量语法格式:        数据类型        变量名   =   值;

如:int num = 6;

类型转换

在实际使用中由于各种因素可能会涉及到数据类型之间的转换,转换大体分为两种类型:自动转换以及强制转换;

类型的大小主要是 boolen(0或者1)<char=byte(8位)<short(16位)<int(32位)<long(64位)<float<double

自动转换:小类型转换为大类型不会存在超出大类型的数据范围的问题

                如:byte a = 5;

                        int b = a;

强制类型转换:比如在int转换为byte,因为int的最大长度大于byte的最大长度,在进行转换的时候被认为是不安全的,但我们人为开发过程中,知道变量的大小,在保证转换为小类型数据时不会存在长度问题时,进行强制转换;语法格式为:int a = 5; byte b = (byte) a;

程序流程控制

流程控制语句

分支       if——else

选择       switch;if;if-else;if-else if-else 

循环        for;while

面向对象

面向对象的三大要素:封装,继承,多态

封装

在开发过程中,需要描述一个对象,他可能会有各种属性以及需要进行的一些操作,在分散进行时不太紧凑且不利于后面的开发;于是需要进封装

比如人有姓名,年龄,性别,身高体重等等的属性

package demo;

public class person {
    public int age;
    public String name;
    public String address;
    public char sex;
}

继承

多态

集合

        集合也属于是容器,容器里可以存入各种类型的数据,不要求一个容器内的数据类型必须相同,但日常开发过程中一个容器内的数据类型还是尽量保持一致。

List

        主要学习了两种List,ArrayList和LinkedList

        ArrayList:继承了Collection类;顺序List,存入顺序与整体取出时的顺序一致,允许存入重复的元素;有各种方法可以满足各种开发需求;适合于顺序存储的情况,他支持插入元素,但是在数据量较大时,在头部插入的效率不太高,一般只用于容量大小不变的情况。

        在创建ArrayList时,ArrayList arraylist = new ArrayList();创建的容器容量为10,在超过10之后,他会自动扩容,自动扩容为后面的底层里的东西。

        存在的问题:在下面代码的注释中也有写到,在使用普通类型正常常进行变量命名时候不会存在问题,但是在添加到容器不是存入创建好的有变量名的自定义变量(实例化类)而是现场new出来的(即匿名对象),在后续的contains进行使用时会因为equals的底层代码的比较有问题呢从而对判断的结果产生错误的反馈。

        问题的解决:1.创建对象时不要创建匿名对象;                                                                                                      2.如果必须使用自定义对象的匿名对象,要看底层的contains的底层代码,是通过对象的equals方法循环判断是否相同来实现,而自定义对象的equals方法是从Object类继承来的,为了满足我们的需求需要重写继承来的equals方法;重写equals方法又要求重写hashCode方法来保持同一个类的对象具有相同的hashCode

//先实现一个类,用于存入到容器内
package com.zx.test;

public class Person {
    private int id;
    private String name;
    private int age;
    private char sex;

    public Person() {
    }
    
    //需要重写从Object类继承的equals方法
    //因为contains方法的逻辑是使用equals
    //但是普通数据类型的equals方法与自定义数据类型的不同
    @Override
    public boolean equals(Object obj) {
        //要注意将传入的对象强转为本类的类型
        Person p = (Person) obj;
        if (this.id != p.id) return false;
        if (this.name != p.name) return false;
        if (this.age != p.age) return false;
        if (this.sex != p.sex) return false;
        return true;
    }

    public Person(String name, int age, char sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

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

    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 int getAge() {
        return age;
    }

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

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

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

import com.zx.test.Person;
import java.util.ArrayList;

public class Equals {
    public static void main(String[] args) {
        /*
        ArrayList 的 contains方法存在一定的问题
        在正常的参数命名方式下,一个对象对应于一个参数名
        提供 contains方法可以提供整体来比较

        而使用匿名命名的方式来添加到ArrayList的变量
        在使用contains时无法整体比较
        由于contains调用的是对象的equals方法
        故而需要在对象内重写equals方法
        否则提供继承Object而来的equals方法不能正确比较
         */

        Person person = new Person("wang",15,'s');
        Person person1 = new Person("zhang",35,'s');
        Person person2 = new Person("li",25,'s');
        ArrayList Per = new ArrayList();
        Per.add(person);
        Per.add(person1);
        Per.add(person2);
        
        //结果为True
        System.out.println(Per.contains(person));

        Per.clear();
        Per.add(new Person("wang",15,'s'));
        Per.add(new Person("sa",85,'w'));
        Per.add(new Person("aa",55,'8'));
        System.out.println(Per);

        //在没有重写对应类里的equals方法时,结果为false
        //重写equals后,改变了contains调用时的判别逻辑,结果为True
        System.out.println(Per.contains(new Person("wang",15,'s')));
    }
}

        LinkedList:同样继承了Collection;链式存储,存入顺序与整体取出的顺序一致,允许存入重复的元素;同样支持大量的方法接口;一般用于需要频繁进行元素的插入操作,可以方便的进行元素的插入,且不会有太大的开销

         

Set

        HashSet:继承于Collection

        TreeSet:继承于Collection

Map

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值