Collections 类此类方法众多, 只介绍几个常用方法 sort() 对元素进行排序, 可以传入比较器 max() 返回最大元素, 可以传入比较器 min() 返回最小元素, 可以传比较器 reverse() 反排序 shuffle() 混排 Arrays 类此类包含用来操作数组(比如排序和搜索)的各种方法。方法更多, 还是看 API 吧 比较器Comparable内部比较器public interface Comparable此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。int compareTo(T o)一个类继承了 Comparable 接口后, 重写 compareTo() 方法, 就能按照我们自己的规则排序 例子: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950public class Student implements Comparable ...
抽象类 把多个类中相同的方法声明给抽取出来。定义到一个类中。 一个方法如果只有方法声明,没有方法体,那么该方法必须定义为抽象方法。 而一个类中如果有抽象方法,那么,该类必须定义为抽象类。 抽象类的特点: 抽象方法和抽象类都必须用 abstract 表示。 一个类继承抽象类的时候; 要么:本身是一个抽象类。 要么:实现抽象类中的所有抽象方法。 抽象类有构造方法, 但是不能实例化, 可以按照多态的使用方式使用。 成员特点: 成员变量 可以是变量,也可以是常量。 构造方法 有 用于子类访问父类构造方法,初始化父类数据 成员方法 可以是抽象,也可以非抽象。 抽象类的好处: 抽象类中的非抽象方法提高了代码的复用性。 抽象类中的抽象方法强制要求子类必须重写某些方法。 抽象类中的几个小问题: 抽象类不能实例化,构造方法有什么用呢? 用于子类访问父类数据的初始化。 如果一个类中没有抽象方法,而类却被定义为了抽象类,请问为什么? 不让创建对象。 abstract 不能和哪些关键字共存: private: 冲突 final: 冲突 static: 无意义 ...
相同的行为, 不同的实现 多态多态, 多种状态, 而多种状态的体现就在不同的实现上面, 也可以说是不同的效果.举个例子:我这里有 3 个杯子, 里面都装了白酒, 你并不知道它们都是什么酒, 只有等你喝过之后才能知道, 第一个杯子是二锅头, 第二个是五粮液, 第三个是茅台. 12Maotai mo = new Maotai();Wine w = mo; 这里我们可以这样理解, 茅台是酒类的一种, 它们之间是继承关系, 当 a 指向了 mo 这个对象的时候, 它会自动向上转型为 Wine, 这也就是说 w 是可以指向茅台这个实例. 这样做的好处就是, 在继承中我们知道子类是父类的扩展, 它可以提供比父类更加强大的功能,如果我们定义了一个指向子类的父类引用类型,那么它除了能够引用父类的共性外,还可以使用子类强大的功能 但是向上转型存在一些缺憾,那就是它必定会导致一些方法和属性的丢失,而导致我们不能够获取它们 所以对于多态我们可以总结如下: 指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该 ...
Java 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。 子类拥有父类非 private 的属性和方法。 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。 子类可以用自己的方式实现父类的方法。(重载) 继承 (类与类的关系)有相同的属性和相同的行为时, 定义为父类,其他的 子类 只需要写特有的属性和方法. 在面向对象中, 可以通过扩展一个已有的类, 并继承该类的属性和行为,来创建一个新的类, 从而达到代码的复用. 继承是所有 OOP 语言不可缺少的部分,在 java 中使用 extends 关键字来表示继承关系。当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地从根类 Object 进行继承。 继承不会继承父类的构造方法因为: 语法上如果继 ...
新时代码农
未读什么是封装 隐藏对象的属性和实现细节,仅对外公开接口; 控制在程序中属性的读和修改的访问级别; 将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成 “类”,其中数据和函数都是类的成员。 通俗的说就是:利用抽象数据类型将数据和基于数据的操作组合在一起, 是其构成一个不可分割的独立实体, 数据被保护在抽象数据类型的内部, 尽可能的隐藏内部的细节, 只保留一些对外的接口使之与外部发生联系.用户无需知道内部的实现细节, 但可以通过该对象对外提供的接口来访问该对象. 封装的好处 良好的封装能够减少耦合 类内部的结构可以自由修改 可以对成员进行更精确的控制 隐藏信息, 实现细节 JavaBeanJavaBean 规范: 标准 java 类 Sun 公司规定为私有属性提供符合命名规范的 set 和 get 方法 JavaBean 必须声明为 public class JavaBean 的所有属性必须声明为 private 通过 setter 和 getter 方法设值和取值 通过 JSP 调用是, 则需要一个无参的构造方法 编 ...
Math 类Math 类中所有的属性和方法都是静态的, 也就是说全露都可以可用 Math. 属性和 Math. 方法名调用属性和方法. 属性 static double E: 比任何值都接近 e 的 double 值 static double PI: 比任何值都接近 pi 的 double 值 几个常用的方法 ceil(double a) : 返回大于等于这个参数的整数 Math.ceil(-12.1) 返回 - 12 ; Math.ceil(12.8) 返回 13; floor(double a): 返回小于等于参数的整数; Math.floor(-12.1) 返回 - 13;Math.floor(12.9) 返回 12; rint(double a): 返回接近参数并等于某一整数的 double 值 Math.floor(-12.1) 返回 - 12;Math.floor(12.9) 返回 13; random(): 返回 [0,1) 之间的 double 值; 随机数获得随机数的 3 种方法 通过 System.currentTimeMillis( ...
字符串操作在编程中我们会大量使用, 所以掌握字符串相关类对我们来说很重要.Java 为我们提供了 3 种操作字符串的类. 由于 String 类的特殊, 有必要了解一下 Java 运行时内存的概念, 才能更好的理解字符串相关类的底层操作. Java 中内存知识在反射中我们学到, 对于每一个被 JVM 加载到内存中的类, 都会在方法区保存一份这个类的信息;包括: 类的基本信息 类的全名, 直接父类的全民 该类的接口 该类的访问修饰符 类的详细信息 运行时常量池 –> 字符串, 常量, 类名和方法名常量. 字段信息 –> 字段名, 类型, 修饰符 方法信息 –> 方法名, 返回值类型, 参数类型, 修饰符, 异常, 方法的字节码 静态变量 –> 在方法区中的静态区保存被类的所有实例共享的变量和静态快 到类 classloader 的引用 到类 class 的引用 JVM 为每一个被加载到内存的类型创建一个 class 实例, 用实例代表这个被加载的类 由此引出反射的概念:在加载类的时候, 加入方法区的所有信息, 最后都会影城 Class 类的实例 ...
概述 Java 异常是 Java 提供的一种识别及响应错误的一致性机制。 Java 异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。 在有效使用异常的情况下,异常能清晰的回答 what, where, why 这 3 个问题: 异常类型 –>” 什么” 被抛出; 异常堆栈跟踪 –>” 在哪” 抛出; 异常信息 –>” 为什么” 会抛出; Throwable 类 Throwable 是 Java 语言中所有错误或异常的超类。Throwable 包含两个子类: Error 和 Exception。它们通常用于指示发生了异常情况。Throwable 包含了其线程创建时线程执行堆栈的快照,它提供了 printStackTrace() 等接口用于获取堆栈跟踪数据等信息。 ExceptionException 及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。 RuntimeExceptionRuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。编译器 ...
new要谈 new 关键字, 就必须先说说构造方法, 它们 2 个就是一对好基友. 构造方法定义 无参构造方法: 访问修饰符 类名(){ } 带参构造方法 访问修饰符 类名(参数列表){ } 说明 构造方法可以被重载; 没有返回类型 (void 也算返回类型, 只是没有返回值); 方法名和类名必须一样; 如果不写, 系统会默认提供一个无参构造方法; 如果写了, 系统就不会提供任何构造方法; 子类不能继承父类的构造方法; 接口没有构造方法; 作用产生对象new 一个对象的时候构造器所要做的事 创建空间; 划分属性; 初始化值; 执行构造方法内的语句; 实例化一个对象用 new 关键字实例化一个对象时, 所用做的事:People p = new People(); 加载 People,class 文件进入内存; 在栈内存为 p 变量申请一个空间 (4 个字节); 在堆内存为 People 对象申请空间 (大小为类中所有成员变量的大小); 对类中的成员变量进行默认初始化; (如果有) 对类的成员变量进行显示初始化; 有构造代码块, ...
public 谁都可以操作 当在方法或属性前面显显式的给定 public 限定符的时候, 其具有该权限控制. public 权限是最为宽松的一种权限控制, 对包的内, 外部都是完全可见的. java 最多只允许一个 java 文件中出现一个 public 类.(该类向外间提供接口, 并与该 java 文件的名称完全一致) 当一个 java 文件中无一个 public 类时, 表明其仅供包访问, 对外界不可见. 注意: 类只有包访问权限和 public 访问权限. 默认访问修饰符 (friendly) 同一个包内可以操作 当方法或属性未给定访问修饰符时, 其默认具有该权限. 具有该权限的方法和成员, 其包内是完全可见的, 而包外不可见. 1234567891011121314//Animal.java和Test.java在同一包下;//Animal.javapublic class Animal{ void eat(){ System.out.println("Animal吃东西的方法"); } ...
话说有这样一个小例子:MICROS_PER_DAY 表示一天的微秒数MILLIS_PER_DAY 表示一天的毫秒数然后下面例子的结果是多少呢? 1234567public class Test3 { public static void main(String[] args) { final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000; final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000; System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY); }} So easy数据类型为 long , 很容易保存这两个乘积不产生溢出.因此, 结果肯定是 1000! but…..结果是: 解释:为什么答案与我们想象不一样呢?因为数据溢出了…你在逗我? 但我没学过 java?long 能表示 -2 的 63 次方到 2 的 63 次方 - 1 的整数.数 ...
下面的方法意图确定它那唯一的参数是否是一个奇数. 这个方法能够正确运转吗? 1234567891011121314151617import javax.swing.JOptionPane;public class Test1 { public static void main(String[] args) { String s = JOptionPane.showInputDialog("请输入一个整数"); int a = Integer.parseInt(s); System.out.println(a); if (isOdd(a)) System.out.println("奇数"); else { System.out.println("偶数"); } } public static boolean isOdd(int ...
新时代码农
未读理解结构化编程和面向对象编程的区别 掌握如何编写 java 类 掌握如何实例化对象 掌握如何访问对象的属性和方法 理解 this 引用 掌握如何使用包组织类 结构化编程按照步骤来编写代码围绕要解决的任务来设计 面向对象编程 (Object Oriented Programming)程序不是围绕要解决任务来设计, 而是围绕要解决的问题中的对象来设计建立对象模型, 将问题域化为不同的对象去处理 万物皆对象, 对象因关注而产生 对象组成 属性 对象身上的值数据 行为 该对象能够做什么 类是对象的抽象, 对象是类的实例类是具有相同属性和行为的一组对象的抽象 面向对象特点 封装 继承 多态 方法重载 方法覆盖 基本数据类型和引用类型的传递的特点 值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。 引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象 (或数组),这时实际 ...
被访问被调用的范围 public : 全部 默认 : 同包 protected : 同包或有继承关系的类 private : 只有同类 在 A 类中定义属性和方法: public: 这个类的实例化对象可以访问; 默认: 如果在同包下定义一个主类, 然后在主类的主方法里面 new A 的一个对象出来, 则这个对象可以访问被默认修饰的属性和方法; protected: 在同一个包下的类中 new 的 A 类对象和继承了 A 类的相同或不同包下的子类中 new A 类对象, 这个对象能调用 A 类中所有的属性和方法 (不同包下没有继承关系的类不能访问) private: 只有这个类中的属性和成员方法能访问 geter 和 setter 更深入理解 当把类的属性和方法访问权限设置为 private 时, 一般都提供上面 2 个公共方法; 在这 2 个方法体内, 可以添加一些限制代码; 比如说 setter 方法, 需要用户输入账号密码才有权限修改 getter 也可以这么做, 还可以在返回值的时候做一些动作; 这就是隐藏. 也可以用 private 修饰 setter 方法, 那 ...