java入门笔记(—)
/*
* 在一个类内部允许定义多个同名的方法,只要他们参数的个数或者参数的类型不同就可以,这叫做类型的重载
* 在调用的时候,虚拟机(jvm)通过参数的个数和类型来调用
alt+insert 弹出构造方法 根据自己的需要选择
* E 代表类型
* | 代表或者
* 字符串是引用类型的 所以输出出来就是null
* ctrl+v 自动生成返回值的类型
* new出来的,无论内容相不相同,都是不一样的对象
* 直接赋值的方式,大小写和顺序只要相同,理论上就是一个对象
* public boolean 变量名 obj1.equals(obj2)
* == 比较的是字符串的内存地址
* equals() 比较的是字符串的内容
* 整数与整数相除 不会得到小数,要想得到小数,需要浮点数参与计算
*
*
* 基本数据类型
* 数字 byte 一节 8位
* short 两节 16位
* int 四节 32位 数字默认为int
* long 八节 64位 需要加修饰符 l
* 字符
* char 二节 16位
* 布尔
* boolean 1位
* 小数
* double 八节 64位 默认是这个
* float 四节 32位 需要加修饰符 f
* 强制类型转换
* 强制类型转换 不建议使用 会有数据的缺失
* 小类型 变量名 =(小类型)大类型常量;
* 注意:拓展的赋值运算符底层隐含了强制类型转换 += -=
* ++ -- 单独使用 在前在后都一样 参与操作使用 ++在后 先赋值 后自增 ++在前 先自增 后赋值
* 隐式类型转换
* 小类型会被转为大类型 然后相加 这个加号式子的大类型 byte 和 int 都会转为 int
* char,byte,short > int > long > float > double
* 逻辑运算符
* & 有false则false & 不管左边为true或者false 两边都会执行
* | 有true则true | 不管左边为true或者false 两边都会执行
* ^ 两边相同为false 两边不同为true
* ! 取反
* 短路&& 与短路|| 与基本的&和| 作用相同但是有短路的效果
* && 有false则false && 如果做左边为真,右边执行
* || 有true则true || 如果左边为假 右边执行
* &&和&
* &&如果做左边为false 右边不管为true或者false 都不会执行了 值为false 如果左边为true 那么就看右边的状态来决定最后的状态
* ||如果做左边为true 右边不管为true或者false 都不会执行了 值为true 如果做左边为false 那么就看右边为true或者false 来决定状态
*
*
* 普通数组的定义方法
* 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
* int[] arr1=new int[5]
* 数组初始化之静态初始化
* int[] arr = new int[]{1, 2, 3};
* 简化格式 推荐方式
* int[] arr1 = {1, 2, 3};
* int[] arr = new int[3];
* 左边:
* int说明数组中的元素类型是arr类型
* []说明这是一个数组
* arr 这是数组的名称
*
* 右边:
* new 为数组申请内存空间
* int 说明数组中的元素类型是int类型
* [] 说明这是一个数组
* 3 数组的长度 其实就是数组中的元素个数
* ArrayIndexOutOfBoundsException 访问了数组中不存在的索引对应的元素,造成索引越界的问题
* NoPointerException 访问的数组已经不再指向堆内存的数据,造成空指针异常
* null 空值,引用数据类型的默认值,表示不指向任何有效对象
* 二维数组:其实就是一个元素为一维数组的数组。
* 三种定义方式:
* int[][] arr=new int[3][2];
* 定义了一个类型为int的数组,里边每一项都是一个数组,然后开辟内存空间,声明数组有3项,其中每一项都有两个数据
* int[][] arr1=new int[3][];
* arr1[1]=new int[2]; 这样等于改变了指针的指向,从空数组,指向了初始化的数组
* 定义了一个类型为int的数组,里边每一项都是一个数组,然后开辟内存空间,声明数组有3项,每一项都是数组
* int[][] arr2={{12,2,3},{1,2,3},{1,2,3}};
* 定义了一个类型为int的数组,里边每一项都是一个数组,然后初始化并赋值
* ArrayList<E>
* ArrayList 是可调整数据大小的实现
* <E> 是一种特殊的数据类型,泛型,在出现E的地方用引入数据类型替换即可
* 如果后边的尖括号内不写类型,会自动从前边的里边推断出来 JDK7之后的新特性
* ArrayList<String> arr=new ArrayList<>();
* add([index],E 数据) 将新数据添加到末尾 返回true或者false 是否成功
* IndexOutOfBoundsException 集合的索引越界
* remove(元素|index) 删除指定的元素,返回是否删除成功
* set(index,元素) 修改指定索引处的元素 返回被修改的元素
*
*
*
*
* 字符串对象
* 构造方式
* String() 创建一个空白字符串对象,不含有任何内容
* String s1=new String()
* String( char[] 内容)根据字符数组的内容,来创建字符串对象
* char[] cha={'a','b','c'};
* String( byte[] 内容)根据字节数组的内容,来创建字符串对象,unicode值创建的,读取的是unicode值对应
* byte[] bye={97,98,99};
* String str =“内容”直接赋值的方法创建对象 推荐这种方式
*
* StringBuilder() 创建一个空白的字符串对象,不含有任何内容
* StringBuilder sre=new StringBuilder();
* StringBuilder(字符) 根据字符串内容,来创建可变的字符串对象
* StringBuilder实例.append("a").append("b");添加数据,并返回对象本身 可以实现链式语法
* reverse() 返回相反的字符序列
* StringBuilder 转换为String 调用toString()方法就可以
* String转String 调用StringBuilder的构造方法就可以 StringBuilder sbu1=new StringBuilder(字符串);
* 数组和集合的遍历
* ArrayList arr2 = new ArrayList();
* arr2.add(1);
* arr2.add(2);
* arr2.add(30);
* for (Iterator num = arr2.iterator(); num.hasNext(); ) {
* int str = (int) num.next();
* System.out.println(str);
* }
* int[] arr = {1, 2, 3};
* for (int b : arr
* ) {
* System.out.println(b);
* }
*
* for (Stdent stu : arrayList) {
* System.out.println(stu.getName());
* }
*
*
*
*
*
* 类的定义步骤
* 1.定义类 2.编写属性 3.编写方法
* 继承中子类的特点
* 子类既可以有自己的方法也可由父类的内容
* 当一个类里边没有无参构造方法,系统会自动给一个无参构造方法
* 标准类的制作
* ① 成语变量
* 使用private 修饰
* ② 构造方法
* 提供一个无参构造方法
* 提供一个带多个参数的构造方法
* ③ 成员方法
* 提供每一个成员变量对用的setXXX()/getXXX()
* 提供一个现实对象信息的show()
* ④创建对象并为对象成员赋值的两种方式
* 无参构造方法创建对象后使用setxxx()赋值
* 使用带参构造方法直接创建带有属性值的对象
*
*
*
*
*
* 继承的好处
* 提高了复用性(多个类相同的成员可以放到同一个类中)
* 提高了代码的维护性(如果方法的代码需要修改,修改一处就可)
*
* 继承的弊端
* 继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不变化,削弱了子类的独立性
* 什么时候使用继承
* 继承关系的体现 is a
* 假设法:我有两个类A和B,如果他们满足A是B的一种,或者B是A的一种,就说明他们存在继承关系,这个时候就可以考虑使用继承来实现,否则就不能滥用继承
*
* 苹果和水果 猫和动物 √
* 猫和狗 X
* 子类重写父类方法的时候 访问权限要等于父类或者高于父类
* 父类中的私有方法子类不可重写
* 类不可继承多个类
* java中类只支持单继承,不支持多继承
* java中类支持多层继承
* 子类所有的构造方法都会默认访问父类中无参的构造方法
* 为什么呢?
* 因为子类会继承父类中的数据,可能还会使用父类中的数据,所以,子类初始化之前,一定要先完成父类数据的初始化
* 每一个子类构造方法的第一条语句默认都是:super() super() 代表父类的无参构造方法
*
* 如果父类中没有无参构造方法?只有带参构造方法,怎么办?
* 解决方法一:调用带参构造方法 super(参数)
* 解决方法二:在父类中给一个无参构造方法
*
* 包的概述和使用
* 其实就是文件夹
* 作用:对类进行分类管理
* 包的定义格式
* 格式:package 报名 多级包 . 分开
* 带包的java类执行
* 手动建包 然后把编译完成的文件放到包的里层 然后执行的时候带上包名 包1.包2.文件
* 自动建包 javac -d . 文件名 然后执行的时候带上包名 包1.包2.文件
*
*
* import 导包
* 为了简化使用不同包下的类,使用的时候要写类的全路径,写起来太麻烦
* 为了简化带包的操作,java就提供了导包的功能
* import 包名
* import 包名.类名
* 修饰符分类
* 权限修饰符
* public > 默认 > protected > private
* 状态修饰符
* */