Java入门
StepByStep~
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
泛型note
引入:例如我们想要在 List l = new ArrayList()中存放Dog对象时,是将Dog——>Object,而要取出对象时,需要判断类型,将Object强转为Dog,在加入时不能对存入对象的类型进行数据类型的约束,是不安全的,也就是说我们存入一个Cat对象也能存进去。类型转换在数据量较大时对效率是有影响的。如果我们使用泛型<>,就可以在编译时检查我们存入的对象类型是否符合要求,且不再提示编译警告。 一、定义:用来指定数据类型的参数,也称参数化类型。在jdk5.0出现的,用于.原创 2022-04-18 21:44:06 · 286 阅读 · 0 评论 -
List(ArrayList,Vector,LinkedList)
一、Collection常用方法: (1)add():元素按顺序添加,与存放顺序一致,可以重复,可以存放null,支持索引(从0开始)。默认是在最后添加,如果有index,在index位置添加。 (2)addAll(Collection):添加元素可以是集合。removeAll()、containsAll()也是同理。 (3)remove():参数可以是index,按照索引移除,也可以是object,按照对象移除。 (4)contains(Object):查找是否包含某个元素 (5)size()、原创 2022-03-28 14:58:15 · 231 阅读 · 0 评论 -
集合总体框架
(一)集合:可以动态的保存任意对象 (二)分为: 2.1 单列集合Collection:存放单个元素的形式 2.2双列集合map:键值对的形式原创 2022-03-27 21:53:21 · 260 阅读 · 0 评论 -
日期与时间
按照发展顺序: (一)Date(jdk1.0就有) package date_; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) throws ParseException { //Date Date dat原创 2022-03-19 16:16:02 · 601 阅读 · 0 评论 -
定时器编写
package java_0; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date; public class ExerciseTimeClarm { public static void main(String[] args) { ActionListener listener = new Tim.原创 2022-03-18 20:49:38 · 418 阅读 · 0 评论 -
Math、Arrays、System、BigInteger、BigDecimal类常用方法
(一)Math 1. abs():取绝对值 2. pow(a, b):幂运算,a的b次幂 3. ceil():向上取整,返回double类型 4. floor():向下取整,返回double类型 5. round():四舍五入,返回long类型 6. sqrt():开方,当被开方数是一个负数的时候,返回NaN(not a number) 7.random():返回 [0, 1) 之间的一个随机数 返回【a, b】之间的一个随机数:(int)(a+Math.random(b-a+1)) 8.原创 2022-03-18 18:03:40 · 617 阅读 · 0 评论 -
StringBuffer&StringBuilder
一、StringBuffer: 1. 是可变长的,内容可以直接增删,是一个容器,存放字符数组的位置在父类AbstructStringBuilder的char[] value中,与String不同,该数组不是final的,是存放在堆中的,如果想要继续添加字符,在不超过原本数组长度的情况下,可以直接追加。 而String每次更改都要重新创建对象,更改string变量指向的地址值,因为其字符数组保存的地址值是final不可更改的,所以每次只能重新创建string对象。 2. StringBuffer类是fi原创 2022-03-16 21:08:19 · 357 阅读 · 0 评论 -
String
1. 是一个字符序列,字符使用Unicode编码,每个字符占2B 2. String类实现了serializable接口(实现串行化,用于网络传输),comparable接口(可比较字符串大小) 3. 形如“abc”这样双引号引起来的是字符串常量,而s = "abc",这里的s是字符串变量 4.String构造器重载,常见的有: new String(String original); new String(char[] a); new String(char[] a, int startI原创 2022-03-15 12:47:38 · 233 阅读 · 0 评论 -
包装类(Wrapper)
包装类——是针对8种基本数据类型的相对应引用类型 后面的六个的父类是Number;前两个的父类是Object 自动拆箱、装箱(示例代码的最后部分注意易错的类型上转) public static void main(String[] args) { //jdk5之前,手动装箱和拆箱 Integer a = new Integer(1); Integer b = Integer.valueOf(2); int n1 ...原创 2022-03-13 21:40:52 · 1323 阅读 · 0 评论 -
异常体系关系及处理机制
异常:在程序执行过程中发生的不正常情况,但是语法错误和错误的逻辑思想不算异常。 IDEA添加异常处理的快捷键:选中要处理的代码块——>Ctrl+alt+T——>选择添加的处理,这样,有了异常也不会终止程序,在相应处理后仍会继续向下执行。 一、异常分类: (1)ERROR(错误):JVM无法解决的严重问题,如栈溢出、内存不足等 (2)Exception(异常): (2.1)运行时异常:在运行过程中,一般是由于逻辑错误导致的,编译器检查不出,这类异常不要求强制处理。 (2.2)编译时异常原创 2022-03-07 22:34:08 · 561 阅读 · 0 评论 -
注解(元数据)
不影响程序逻辑,可以被编译或运行,相当于嵌入代码的补充信息 一、Annotation: 注解类形式: public @interface Override{ } //这里的@interface不是接口,而是注解类的标志 (1)@Override:用于限定方法是重写父类的方法(不一定是直接父类),只能用于方法,不写该注解也算重写,加上该注解的主要目的是让编译器去检查该方法是否是重写了,如果没有实现重写,就会编译不通过 (2)@Deprecated:用于表示某个程序元素已过时 (3)@Supres原创 2022-03-04 21:49:22 · 322 阅读 · 0 评论 -
枚举enum
把具体对象列举出来的类,是常量的一个集合,常量名全都大写,一种特殊的类,只包含一组有限的特定对象 枚举的两种形式: (1)自定义:构造器私有化、去掉set方法、在类内创建固定对象成员:public static final package emun_; public class Enumration { public static void main(String[] args) { System.out.println(Season.SPRING); S.原创 2022-03-03 22:15:32 · 295 阅读 · 0 评论 -
四种内部类
分类 (1)定义在外部类的局部位置上(例如:方法中或代码块中):局部内部类、匿名内部类 【本质:局部变量】 (1.1)作用域:定义它的方法或者代码块中 (1.2)外部类和局部内部类成员变量重名时,采用就近原则,如果要想访问外部类的同名成员,可以是使用 外部类名.this.成员名 来访问(这里的this指的是调用定义该内部类的方法的外部类对象) (1.3)可以直接外部类的所有成员,包括私有 (2)定义在外部类的成员位置上:成员内部类、静态内部类 【本质:类的成员】 (2.1)可以添加任意访问修原创 2022-03-03 18:29:39 · 266 阅读 · 0 评论 -
接口注意事项
一、含义:给出一些没有实现的方法封装在一起,到某个类要使用时根据具体情况把方法实现。 二、形式: interface 接口名{ 属性:都是public static final 的,但是可以省略不写,访问方法:接口名.属性名 方法:JDK7.0以前的都是抽象的,JDK8.0及以后的可以是(1)抽象的(2)有方法体的【要求:访问权限为default或者是static方法】,其中抽象的方法的abstract可以省略 } 实现接口的形式: class 名字 imple...原创 2022-02-25 22:58:28 · 269 阅读 · 0 评论 -
模板设计模式
需求:每个类都有一个工作任务,要求计算每个类对象的任务工作时间。 分析:计算工作时间的方法应该是每个类中都共有的方法,应该放在父类中。 不同的类有不同的工作,根据实际运行对象实现动态绑定,因此父类中应该包含工作的抽象方法,由子类具体实现。 代码如下: package template_mode; public abstract class Template { protected String workName; public abstract void job(); p原创 2022-02-24 20:31:16 · 138 阅读 · 0 评论 -
抽象(abstract)
一、使用场景:父类方法的不确定性。当父类的某些方法需要声明,但又不确定如何实现时,将其声明为抽象方法,该类声明为抽象类。 二、 抽象类:public abstract Animal{} 抽象方法没有方法体(无大括号):public abstract void eat(); 三、当类中含有抽象方法时,则该类一定为抽象类;如果类为抽象类,其中不一定含有抽象方法 四、一般的,抽象类会被继承,其子类会实现其抽象方法 五、细节: (1)抽象类不能被实例化 (2)abstract不能与private、s原创 2022-02-24 19:42:05 · 231 阅读 · 0 评论 -
final
字面意思:最后的、最终的 一、可修饰:类、方法、属性、局部变量 二、场景:被final修饰的元素应该满足 (1)类:不能被继承 (2)方法:不能被子类重写/覆盖(overwrite),但是可以重载 (3)属性:值不能被修改 public final double。。。 (4)局部变量:值不能被修改 final double。。。 三、注意细节: (1)被final修饰的量为常量,名称通常用全大写,用下划线隔开 (2)被final修饰的属性必须要赋初值:可以直接在定义时赋;可以先声明,然后在原创 2022-02-24 18:34:01 · 331 阅读 · 0 评论 -
单例设计模式
一、定义:采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个获得该对象的静态方法。 二、分类: (1)饿汉式:在类加载时创建单一对象。缺点:有可能造成资源浪费。如Runtime类 (2)懒汉式:调用获得对象的静态方法时创建单一对象,且再次调用时,返回的仍然是上一个对象。缺点:会存在线程安全问题。 三、步骤:构造器私有化,防止直接new;类的内部创建一个对象;向外部暴露一个获取单例对象的静态方法。 例如: 饿汉式: package singlePattern;原创 2022-02-24 16:42:59 · 196 阅读 · 0 评论 -
代码块(初始化代码块)
一、使用方式:不用显示调用。 二、形式: [修饰符]{ 。。。。 };其中,修饰符只能是static,最后的分号可加可不加 三、分类: 静态代码块:前面有static修饰,只有在类加载时隐式调用一次 普通代码块:前面没有static修饰,在创建对象时隐式调用,每创建一次就调用一次。 四、场景:当多个构造器中含有重复操作,可以将其提取到代码块中,提高代码的重用性,代码块优先于构造器调用。其实构造器的内部开头隐含了: super(); 普通代码块和普通成员初始化; 五、类加载的场景: (1)原创 2022-02-24 08:29:16 · 495 阅读 · 0 评论 -
类的加载问题
一、类的加载条件 (1)第一次创建类的实例 (2)访问类中的静态成员(变量或方法) (3)第一次创建子类的实例时,父类也要加载(这里的加载并不是创建实例) (4)反射(如Class.forName("")) 二、类的加载原则 变量定义的先后顺序决定初始化顺序,而在不同变量之间,又存在着某些规则(先静态对象,再非静态对象) 静态代码块属于类,且在类加载时只执行一次,即使后面有类加载的条件也不会再次执行; 三、继承关系类的对象创建执行顺序 C——>B——>A (1)类的加载 按原创 2022-02-24 08:17:51 · 525 阅读 · 0 评论 -
Main方法的组成介绍
public static void main(String[] args){} (1)public:main方法是有JVM调用的,在不同的类中调用要使用public访问权限 (2)static:在调用该方法时,无需创建类的实例对象 (3)void:该方法的执行无需返回值 (4)参数args:在执行程序时传入参数,打包成字符串数组 传入: 在idea中如何给main函数传参: 在右上角的执行按钮处点击下拉箭头——>edit configurations——>在progra.原创 2022-02-22 22:49:55 · 299 阅读 · 0 评论 -
类变量和类方法(静态、static)
产生时间:类加载的时候 访问方法:对象名.成员/ 类名.成员 一、类变量:被类的所有实例共享 (1)声明: 访问权限修饰符 static 变量名 static 访问权限修饰符 变量名 (2)使用场景:当某个变量需要被所有对象共享时 (3)存储位置:与JDK版本有关:在JDK8之前存放在方法区的静态域;在JDK8及以后,存放于类加载后的class对象中,位于堆区。 二、类方法: (1)声明:位于访问权限修饰符之前后者之后 (2)使用场景:不创建实例也能调用的方法(工具方法)和一些通用方法,原创 2022-02-22 22:04:30 · 342 阅读 · 0 评论 -
finalize方法简介
当对象没有引用指向时,虚拟机会按照一定的垃圾回收机制算法来调用finalize方法将该对象回收,并不是只要没有引用对象就会被回收。 因此,可以调用System.gc()方法来主动调用垃圾回收机制,但也并不能保证一定能成功。在调用时,程序并不会阻塞在此处,而是会继续向下执行。 默认的object类中的finalize方法是不作其余处理的。 可以重写finalize方法来实现自己想要的资源释放操作,比如数据库连接等。 ...原创 2022-02-22 20:19:31 · 485 阅读 · 0 评论 -
Object类详解
object类的常见方法介绍原创 2021-12-06 11:07:04 · 230 阅读 · 0 评论 -
Java动态绑定机制
1. 当调用对象方法的时候,该方法会和该对象的内存地址(运行类型)绑定。 即调用的方法先看运行类型中有没有,只要有就调用(无论是函数中再次调用还是直接调用,只要是函数),没有,才在父类中找。 2.当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用。 Java多态的应用: (1)多态数组:声明数组时,数组的元素对象为父类,实际存储的时候,可以存放子类,如果父子类都有相同的方法,则运行时可以实现多态。 如果想要调用子类独有的方法,可以使用instanceof来判断是否为子类类型,然后进行强转向原创 2021-12-04 20:31:07 · 597 阅读 · 0 评论 -
方法重写、重载与多态
参考内容 方法重写(方法覆盖): 1.子类方法的形参列表、方法名称要和父类的形参列表、方法名称完全一致。 2.子类的返回类型和父类的返回类型一致,或者是父类返回类型的子类 3.子类的方法不能缩小父类方法的访问权限(public > protected > 默认 > private) 父类私有方法,子类看不到,因此父类私有方法的重写也就无从谈起。 静态只能覆盖静态 执行顺序:父类静态代码块→子类静态代码块→父类构造代码块→父类构造方法→子类构造代码块→子类构造方法 重写与重载原创 2021-11-19 22:31:15 · 583 阅读 · 0 评论 -
super的使用细节
super.成员、this.成员、成员 三种表述方式的区别: 一、this.成员=成员:访问过程如下: (1.1)先找本类,如果本类中有该成员,则直接访问; (1.2)本类中如果没有该成员,则找父类(如果父类有,并且有权限访问,则访问;若有,但无权限访问,则会报错) (1.3)如果父类中没有,则继续向上找,直到找到object,什么时候父类有就停下,如果都没有,也会报错。 二、super.成员:访问过程如下: 跳过本类的查找,直接在父类中查找,也就是直接到了第一部分的(1.2)。 注...原创 2021-11-17 10:21:36 · 282 阅读 · 0 评论 -
继承的细节与内存分配
细节 1.一个类只能继承一个类,也就是java是单继承机制。但是可以间接继承,比如A继承了B,还想继承C,虽然不能直接继承,但是可以让B继承C,然后A继承B就可以达到目的。 2.子类继承所有的属性和方法,非私有的属性和方法可以再子类直接访问,但是私有属性和方法不能在子类直接访问,要通过父类提供的公共方法访问,即父类中可以使用私有属性与公有方法的形式。 3.子类没有继承父类的构造器,但必须调用父类的构造器用来完成父类的初始化。 4.当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的原创 2021-11-16 15:58:25 · 725 阅读 · 1 评论 -
包与访问修饰符
一、包 1.包的作用: 可以区分相同名字的类 控制访问范围 方便对类的管理 2.本质:创建不同的文件夹保存类文件 3.命名:一般情况下:“com.公司名.项目名.业务逻辑模块名” 命名时可以使用字母、数字、下划线、小圆点,不能使用关键字。同时数字不能作为开头,哪怕是在小圆点之后作为开头也不可以 4.package关键字用来声明当前类所在的包,需要放在类文件第一行的位置,一个类文件中只能有一个package语句 5.包的导入:使用import关键字,位置在类定义之上,pack...原创 2021-11-14 19:25:25 · 375 阅读 · 0 评论 -
使用命令窗口运行Java时的小问题
1. java 命令后面不要加 .class !!! 2. 当出现乱码时,看看是不是文件中的逗号是中文的,中文逗号也会出现乱码,要改成英文 3. 每次修改完之后,要重新编译一下 4. 在IDEA中使用".\\"或者"./" 表示当前目录时,文件放在src外面就可以找到,但是在使用cmd时,必须严格按照路径放在和 .class文件一致的目录中,否则文件找不到 5.原来IDEA生成的项目中有字节码文件,在这个文件夹中: 6.在编译时出现中文乱码,在javac后面加上 -encoding UT..原创 2021-11-11 11:32:33 · 452 阅读 · 0 评论 -
Java包装器类的作用好处及图解
参考1:包装器类 参考二:自动装箱与拆箱 基本数据类型的包装类的作用是: 1.作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。 2.包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。 基本类型 包装器类型 byte 1B Byte short 2B Short int 4B Integer ...原创 2021-11-09 12:18:26 · 1485 阅读 · 0 评论 -
一个java源文件中只能有一个public类
来源参考 问题:一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。一个文件中可以只有非public类,如果只有一个非public类,此类可以跟文件名不同。 为什么一个java源文件中只能有一个public类? 在java编程思想(第四版)一书中有这样3段话(6.4 类的访问权限): 1.每个编译单元(文件)都只能有一个public类,这表示,每个编译单元都有单一的公共接口转载 2021-11-09 11:38:55 · 3741 阅读 · 0 评论 -
对象的创建流程
public class Person { private int age = 90; private String name; public Person(int age,String name){ this.age = age; this.name = name; } @Override public String toString() { return "Person{" + .原创 2021-11-08 09:16:16 · 136 阅读 · 0 评论 -
可变参数、作用域、构造器
一、可变参数:有多个方法,他们的本质操作是一样的,只是传参个数不定,这时候可以用可变参数,比如:一个方法是求两个整数的和,另一个方法是求三个整数的和 (1)“类型...”,如"int... nums"表示接收的是可变参数,类型是int,即可以传入0个或多个int型实参 (2)实参可以是数组(这里的数组是可变形参类型的数组) (3)可变参数的本质就是数组 (4)可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后 (5)一个形参列表中只能出现一个可变参数 public clas原创 2021-11-04 08:33:40 · 355 阅读 · 0 评论 -
方法的重载
含义:Java中方法名相同,但是形参列表不同 形参列表包括:参数的个数,参数的顺序,参数的类型 注意:(1)其他都相同,只有形参的名称不同,不会构成方法重载,这是方法的重复 (2)其他都相同,返回值的类型不同,不能构成方法的重载,是方法的重复定义 好处:减轻了命名的麻烦和记名字的麻烦 ...原创 2021-10-31 17:33:49 · 166 阅读 · 0 评论 -
递归——老鼠走迷宫
public class MiGong { public static void main(String[] args){ int[][] map = init(); findWay(1,1,map); print(map); } public static int[][] init(){ int[][] map = new int[8][7]; for(int i=0;i<map.length.原创 2021-10-27 17:38:40 · 248 阅读 · 0 评论 -
递归调用机制
递归的重要规则:!!! (1)执行一个方法时,就会创建一个新的受保护的独立空间(栈空间) (2)方法的局部变量是独立的,不会互相影响 (3)如果方法中使用的是引用类型的变量,就会共享该引用类型的数据 (4)递归必须有一个退出递归的条件,向退出递归的条件逼近,否则就是无线递归 (5)当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕,把空间的控制权,数据的分配权释放出来。 例1:阶乘 public static..原创 2021-10-31 15:58:37 · 265 阅读 · 0 评论 -
java方法
一、方法调用机制!!! 当程序执行到方法时,就会开辟一个独立的栈空间; 当方法执行完或执行到return时,就会返回调用方法的地方; 返回后继续执行后面的语句 当main方法执行完,程序退出 二、成员方法的好处: 提高代码的复用性 可以将实现的代码封装起来,然后供其他用户调用即可 三、方法的定义: 访问权限修饰符 返回的数据类型 方法名(形参列表...){ 方法体语句; return 返回值; } 四、方法的注意事项和细节: (1)访问...原创 2021-10-21 14:36:20 · 104 阅读 · 0 评论 -
java对象入门注意点
1.java对象内存布局: 细节: (1)属性:又称 字段、成员变量、field (2)创建对象:可以先声明,再创建,Cat cat;cat = new Cat();。也可以直接创建Cat cat = new Cat(); (3)new的时候,在堆开辟空间 (4)存储分配机制: 栈:一般存储基本数据类型(局部变量) 堆:存放对象 方法区:常量池(字符串),加载的类信息 (5)对象创建过程!!! 加载类信息(1次)——>在堆中分配空间——>默认初始化——...原创 2021-10-21 11:18:03 · 170 阅读 · 0 评论 -
数组相关例子
1.已知有一个升序数组,要求插入一个元素后,该数组依然是升序 分析: (1)首先找出要插入的位置,从前向后遍历,第一个满足insertNumber<=arr[i]的元素,则位置就是i,因为数组是升序的,后面位置的数字一定也比插入数字大,所以不用比较,直接跳出。 但是如果当比较到最后一个都比要插入的数字小时,则要插入的位置应该是在最后,也就是index没有被修改,我们可以设置index初始值为-1,如果index==-1,则说明index没有被修改,则应插入的位置是数组的末尾 (2)数组的扩容.原创 2021-10-21 10:35:30 · 277 阅读 · 0 评论
分享