- 博客(57)
- 收藏
- 关注
原创 Java学习笔记——枚举
为什么要用枚举(enum)当一个类的对象是固定的,不会有更多,如果按照以前的设计思路,用户可以自己修改对象,就不能体现这个类的对象是固定的,所以引出了枚举类。所谓枚举,就是把具体的对象一个一个列举出来枚举类只读,不可以修改什么是枚举是一组常量的集合实现方式自定义类实现枚举使用enum关键字自定义类实现枚举将构造器私有化,防止直接new去掉setXxx方法,防止属性被修改在该类内部创建固定的对象public static final修饰对象,优化底层package
2021-10-31 21:06:36
371
1
原创 Java学习笔记——内部类
什么是内部类一个类里面又完整地嵌套了另一个类结构。类的五大成员成员属性、成员方法、构造器、代码块、内部类内部类的特点内部类的最大特点就是可以直接访问私有属性内部类的分类定义在外部类局部位置上(比如方法内)局部内部类(有类名)通常定义在外部类的局部位置,通常在方法/代码块不能加修饰符能加final加了final之后其他类不能继承它作用域仅仅在定义它的方法或者代码块中内部类如何访问外部类:内部类可以直接访问外部类的所有成员,包含私有的class OuterClas
2021-10-28 14:55:16
911
1
原创 Java学习笔记——接口
什么是接口接口是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来jdk8.0以后,接口中可以有方法的实现,需要使用default关键字修饰default public void ok(),也可以使用static方法注意事项接口不能实例化,即不能new IA();接口中所有的方法都是public方法,而不是默认的,接口中抽象方法,可以不用abstract来修饰。普通类实现接口,就必须将该接口的所有方法都实现抽象类实现接口,可以不用实现接口的方法一
2021-10-23 18:48:43
959
2
原创 Java学习笔记——抽象类
为什么需要抽象类当父类的某些方法,需要声明,但是又不确定如何实现时,就可以将其声明为抽象方法,那么这个类就是抽象类。当一个类存在抽象方法时,就要将该方法声明为抽象类。一般来说,抽象类会被继承,由其子类来实现细节抽象类是不能被实例化的抽象类不一定要包含abstract方法,可以实现方法abstract只能修饰类和方法抽象类还是类,可以拥有任意成员抽象方法不能有主体public abstract void eat();,不能有{}如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它
2021-10-21 18:41:56
258
原创 Java学习笔记——final
final 表示最后的,最终的使用final的场景不希望类被继承的时候当不希望父类的某个方法被子类重写/覆盖时当不希望类的某个属性的值被修改当不希望某个局部变量被修改注意事项final修饰的属性叫常量,用大写XXX_XXX来命名不赋值会报错,可以在定义时、构造器中、代码块中赋值若final类修饰的属性是静态的,则不能在构造器中赋值,因为静态属性在类加载的时候就要被创建,它先于构造器,所以在加载类的时候它是没有赋值的,所以会报错final类不能被继承,但是可以实例化对象父类的fi
2021-10-21 18:00:55
207
原创 Java学习笔记——单例设计模式
什么是单例模式对某个类只能存在一个对象的实例,并且该类只提供一个取得其对象实例的方法两种方式饿汉式(还未使用就已经被创建)构造器私有化(防止直接new)类的内部创建对象向外暴露一个静态的公共方法代码实现public class SingleTon1 { public static void main(String[] args) { System.out.println(Cat.getInstance()); }}class Cat{ p
2021-10-21 17:32:36
139
原创 Java学习笔记——代码块
格式[修饰符]{};代码块相当于另一种形式的构造器,可以用作初始化的操作,不管调用哪个构造器,创建对象,都会优先调用代码块的内容,代码块调用的顺序要优先于构造器package block_demo;import java.io.File;public class Film { private String name; private String desc; static { System.out.println("===========我是静态代码块,
2021-10-17 18:51:05
231
1
原创 Java学习笔记——类变量和类方法
类变量引入要统计共有多少小孩加入了游戏,已有解法如下:package staticDemo;public class Child { private String name; public Child(String name) { this.name = name; } public void join(){ System.out.println(name + "加入了游戏..."); } public sta
2021-10-17 17:13:32
1177
原创 Java学习笔记——finalize()
finalize当对象被回收时,系统自动调用该对象的finalize方法。子类可以重写该方法,做一些释放资源的操作什么时候被回收当某个对象没有任何引用时,jvm就会认为这个对象是一个垃圾对象,就会用垃圾回收机制来销毁该对象,在销毁该对象前,会调用finalize()方法;垃圾回收机制的调用垃圾回收机制的调用,由系统来决定,也可以通过System.gc()主动触发垃圾回收机制。程序员可以在finalize方法中写自己的业务逻辑,如果没有重写,会自动调用Object类中的finalize()方法p
2021-10-11 18:40:16
164
原创 Java学习笔记——toString()
toString默认返回:全类名+@+哈希值的十六进制 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }子类往往会重写toString方法,用于返回对象的属性信息重写@Override public String toString() { return "Person{" +
2021-10-11 18:25:07
177
原创 Java学习笔记——hashCode()
两个引用,如果指向的是同一个对象,则哈希值一定是一样的,指向的是不同对象,则是不一样的哈希值是根据地址来确定的,但是不能完全将哈希值等同于地址
2021-10-11 18:13:10
113
原创 Java学习笔记—— ==和equals
== 和equals对比== 既可以判断基本类型(值是否相等),也可以判断引用类型(对象的地址是否相等,是否指向同一个对象)equals是Object类中的方法,只能判断引用类型,源码如下:4 public boolean equals(Object obj) { return (this == obj);}String类里面的equals()方法:public boolean equals(Object anObject) { if (this == an
2021-10-11 18:00:18
157
原创 Java学习笔记——多态参数
多态参数方法定义的形参类型为父类类型,实参类型允许为子类类型package poly.parameter;public class Employee { private String name; private int salary; public Employee() { } public Employee(String name, int salary) { this.name = name; this.salary
2021-10-10 11:42:46
200
原创 Java学习笔记——多态数组
例子Person类(父类)package poly.array;public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String say()
2021-10-10 11:06:40
128
原创 Java学习笔记——动态绑定机制
例1package poly.dynamic;public class A { public int i = 10; public int sum(){ return getI() + 10; } public int sum1(){ return i + 10; } public int getI(){ return i; }}package poly.dynamic;publi.
2021-10-10 10:36:25
153
原创 Java学习笔记——属性重写问题
例子此时base.count中,base看的是编译类型,所以值为10instanceof:判断***对象的运行类型***是否为xx类型或者是xx类型的子类型现使BB继承AAAA aa = new BB();System.out.println(aa instanceof AA);//trueSystem.out.println(aa instanceof BB);//trueObject obj = new Object();System.out.println(obj instance
2021-10-10 09:56:23
232
原创 Java学习笔记——向下转型
子类类型 引用名 = (子类类型) 父类引用Cat cat = (Cat) animal;此时编译类型是Cat,运行类型是Cat只能强转父类的引用,不能强转父类的对象要求父类的引用必须指向当前目标类型的对象,即如果执行Dog dog = (Dog)animal会报错...
2021-10-10 09:44:50
136
原创 Java学习笔记——向上转型
本质父类的引用指向了子类的对象Object obj = new Cat()object,animal都是cat的父类编译类型看左边,运行类型看右边可以调用父类中的所有成员(需要遵循访问权限),不能调用子类中特有成员例子catchMouse()是Cat类的方法会报错的原因:在编译阶段,会不会报错是由编译器决定的,而编译看对象的编译类型,animal对象的编译类型是Animal,没有catchMouse,所以会报错最终的运行结果看子类的具体实现...
2021-10-10 09:32:10
146
原创 Java学习笔记——重写
override方法名不同、形参列表不同,不构成重写子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类eg:父类是object类,子类可以是string类,因为string是object的子类子类方法不能缩小父类方法的访问权限,可以放大public class Animal { void cry(){ System.out.println("动物叫..."); }}public class Dog extends Anim
2021-10-09 10:45:07
139
原创 Java学习笔记——继承
为什么需要继承extends编写两个类,一个是pupil,一个是graduate,两个类有许多相似的属性,怎么办?使用继承(代码复用)示意图细节子类继承了所有的属性和方法,私有属性不能在子类直接访问,要通过公共的方法去访问父类public class Base { private int n1 = 100; protected int n2 = 200; int n3 = 300; public int n4 = 400;}子类(无法访问n1)子
2021-10-08 16:53:32
149
原创 Java学习笔记——封装
encapsulation把属性和方法封装在一起,数据被保护在内部,程序的其他部分只通过被授权的方法,才能对数据进行操作封装的好处隐藏细节对数据进行验证,保证安全合理实现的步骤将属性私有化private提供一个公共的set方法,对属性判断并赋值提供一个公共的get方法,用于获取属性的值package encap;public class Account { private String name; private double balance; priv
2021-10-06 12:57:02
117
原创 Java学习笔记——访问修饰符
访问修饰符号· 用于控制方法和成员变量的访问权限· 修饰类,只能用public和默认publicprotected默认级别private
2021-10-06 12:13:30
169
原创 Java学习笔记——包
包的三大作用区分相同名字的类管理类(创建不同的文件夹来保存类)控制访问范围命名规则不能有关键字、保留字,不能以数字开头一般是小写字母 + 小圆点com.公司名.项目名.业务模块名常用的包用到哪个类就导哪个类,不建议直接用*package作用是声明当前类所在的包,一个类中最多只有一个package,需要放在类的最上面import放在package下面,在类定义前面...
2021-10-06 11:53:01
117
原创 Java学习笔记——this
问题引入package ThisDemo;public class ThisTest { public static void main(String[] args) { Person person = new Person("as",19); person.print(); }}class Person{ String name; int age; public Person(String name,int age){
2021-09-27 18:25:52
139
原创 Java学习笔记——构造器
构造器是什么完成对新对象的初始化,不是创建对象注意构造器没有返回值(不能写void)public Person(String name,int age){}方法名必须和类名一致构造器的调用由系统来完成一个类可以定义多个不同的构造器,利用方法重载如果程序员没有定义构造方法,系统会自动给类生成一个默认无参构造方法,可以用javap指令反编译看看一旦定义了自己的构造器,默认的构造器就覆盖了,不能再使用默认的无参构造器,除非显式的定义一下对象创建的流程分析加载Person类信息,
2021-09-27 16:15:46
181
原创 Java学习笔记——作用域
作用域作用域的分类类下方法外为全局变量,方法内为局部变量全局变量全局变量不一定要赋值,直接使用,因为有默认值局部变量局部变量必须赋值,才能使用,因为没有默认值细节属性和局部变量可以重名,访问时遵循就近原则package VarScope;public class VarScopeDemo { public static void main(String[] args) { Person person = new Person(); per
2021-09-26 23:15:47
114
原创 Java学习笔记——可变变量
什么是可变变量将同一个类中多个同名同功能但参数个数不同的方法,封装起来反例优化代码可变参数,可以当做数组来使用int… 表示接受的是可变参数,类型是int,即可以接收多个int (0~任意多)package VariableParameter;public class VariableParameterDemo { public static void main(String[] args) { VarPara varPara = new VarPara();
2021-09-26 22:36:47
700
原创 Java学习笔记——方法重载2021-09-26
什么是Overload允许同名方法的存在,但是形参列表不一致细节方法名一定要相同形参列表必须不同(个数,顺序,类型不一样)– 顺序:public double calculate(int n1, double n2)public double calculate(double n2, int n1)– 参数名无要求:以下这种是错误的❌public double calculate(int n1, double n2)public double calculate(int a1, do
2021-09-26 22:07:23
173
原创 Java学习笔记——二维数组知识点补充
二维数组内存分布int arr[][] = new int[2][3];arr[1][1] = 8;动态初始化-列数不确定所谓列数不确定,即每个一维数组里所含有的元素的个数不确定内存分布1.执行 int arr[][] = new int[3][];2. 遍历数组并赋值package Array;public class TwoDiemantionalArray { public static void main(String[] args) { int
2021-09-22 20:27:50
133
原创 Java学习笔记--冒泡排序的实现
冒泡排序的思路冒泡排序的实现代码package Array;public class BubbleSort { public static void main(String[] args) { int arr[] = {11,33,22,55,66,77,44,99,88,100,324,0}; //冒泡排序 for (int i = 0; i < arr.length - 1; i++) { for (int
2021-09-20 14:15:17
161
原创 Java学习笔记--数组知识补充
数组的使用数组的定义方法1 动态初始化int[] a= new int[5];方法2 动态初始化int[] scores; //声明一个数组,此时数组在内存里面没有分配空间,只是个空值scores = new int[3];//此时分配了内存空间方法3 静态初始化int a[] = {2,3,4,5,443,544};此方法适用于数据已经知道了,且数据量有限。数组的注意事项数组的元素可以是基本类型和引用类型,但是不能混用数组创建后,若没有赋值,有默认值数组赋值的机制赋值
2021-09-20 13:36:57
231
原创 Java学习笔记--位运算
规则二进制的最高位(最左边的)是符号位:0-正数,1-负数正数的原码、反码、补码都一样负数的反码 = 原码符号位不变,其他位取反负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 10的反码、补码都是0Java中的数都是有符号的计算机运算的时候,都是以补码的方式来运算的当我们查看运算结果的时候,要看它的原码位运算符&: 两位全为1,结果为1,否则为0|^:一个为0,一个为1,结果为1,否则为0~>>算数右移<<算数左移>
2021-09-19 11:39:14
153
原创 Java学习笔记--四种进制
四种进制二进制:0,1,以0b或者0B开头十进制:0-9八进制:0-7,以数字0开头表示十六进制:0-9以及A-F,以0x或者0X开头,A-F不区分大小写public class BinaryTest { public static void main(String[] args) { int n1 = 0b0101; //二进制 5 int n2 = 1010; //十进制 1010 int n3 = 0111;
2021-09-19 10:54:07
223
原创 Java学习笔记--逻辑异或
逻辑异或^a^b 叫做逻辑异或,当a和b不同时,结果为true,否则为false System.out.println((4 < 1) ^ (4 > 1)); System.out.println((4 < 1) ^ (6 < 3));结果:truefalse
2021-09-18 20:43:56
557
原创 Java学习笔记——i++和++i
i++int i = 1;i = i++;System.out.print(i);解析:答案为1。执行步骤为temp = i;i = i + 1;i = temp;++1int i = 1;i = ++i;System.out.print(i);解析:答案为2.执行步骤为i = i + 1;temp = i;i = temp;
2021-09-18 20:28:39
179
原创 Java学习笔记--String和基本类型的转换
使用基本数据类型对应的包装类 的相应方法,得到基本数据类型package StringToBasic;public class StringToBasic { public static void main(String[] args) { String num1 = "123"; String num2 = "124"; String num3 = "125"; String num4 = "126"; Str
2021-09-18 20:15:43
135
原创 设计模式学习笔记--依赖倒转原则
什么是依赖倒转原则中心思想是面向接口的编程使用接口或者抽象类的目的是指定好规范,并不设计具体的实现,具体的细节交给实现类去完成例子反例package DependencyInversion;public class DependencyInversionDemo1 { public static void main(String[] args) { new Person().receive(new Email()); }}class Email{
2021-09-14 18:35:41
95
原创 设计模式学习笔记--单一职责原则
什么是单一职责原则?一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中举个生活中的例子,每个人各司其职,不要一个人同时做两件事情。举例!反例public class SingleResponsibilityDemo1 { public static void main(String[] args) { RoadRun roadRun1 = new RoadRun(); RoadRun roadRun2 = new RoadRun();
2021-09-12 21:22:45
184
原创 Java学习笔记--自动类型转换
1有多个类型时,自动转换成类型最大的进行计算此处1.1是double类型,等号右边全部转成了double类型,float无法兼容double(float是低精度,double是高精度),所以报错2(byte,short)和char之间不会相互转换3byte,short,char 三者可以计算,不管是单独还是混合运算,在计算时首先转换成int类型;4boolean不参与类型的自动转换...
2021-08-31 18:53:13
127
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅