构造方法

java.lang.reflect(一)

那年仲夏 提交于 2020-01-16 00:41:20
  要梳理这个包,就必须要整理一下反射了。为了方便描述,我们假定已经写好了一个普通类,com. 反射API 接口 AnnotatedElement GenericArrayType GenericDeclaration InvocationHandler Member ParameterizedType Type TypeVariable WildcardType 类 AccessibleObject (代表访问检查的能力) Array (代表数组) Constructor (代表构造方法) Field (代表类的成员变量,类属性) Method (代表类的方法) Modifier Proxy ReflectPermission 异常 InvocationTargetException MalformedParameterizedTypeException UndeclaredThrowableException 错误 GenericSignatureFormatError 对于反射,除了上述java.lang.reflect包下的类外,还有一个非常重要的 java.lang.Class<T>。 上面标黑的就是反射里最最常用的类了。下面先从Class说起 1.java.lang.Class Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类

JavaSE知识-08(面向对象_继承&方法&final)

血红的双手。 提交于 2020-01-15 23:40:49
代码块的概述和分类 根据其位置和声明的不同,代码块可以分为局部代码块,构造代码块,静态代码块,同步代码块。 常见代码块的应用 a:局部代码块 在方法中出现;限定变量生命周期,及早释放,提高内存利用率 b:构造代码块 (初始化块) 在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行 c:静态代码块 在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。 一般用于加载驱动 class Demo1_Code { public static void main(String[] args) { { int x = 10; //限定变量的声明周期 System.out.println(x); } Student s1 = new Student(); System.out.println("---------------"); Student s2 = new Student("张三",23); } static { System.out.println("我是在主方法类中的静态代码块"); } } class Student { private String name; private int age; public Student(){ //study(); System.out.println(

用户自定义异常

為{幸葍}努か 提交于 2020-01-15 14:53:11
用户自定义异常 一般情况下,我们使用系统内部提供的异常就足够了,但是有时为了特殊的目的,必须使用用户自定义异常,本文讨论的异常处理机制,以及如何创建、抛出和捕获用户自定义异常。 1. 异常处理机制 无论我们使用的是系统自动义异常,还是用户自定义异常,它们都具有相同的异常处理机制,都包括定义异常类、抛出异常对象和捕获并处理异常三部分,只不过是前两个过程已经在 .NET 框架中定义好了。 a) 定义异常类 异常类本身和一般的类的定义没有任何区别,但是由于使用 Throw 关键字和 catch 关键字所抛出和捕获的异常对象必须是 Exception 类或者 Exception 类子类的子类对象,因此所有用户自定义的异常类必须由 Exception 类或者 Exception 类的子类派生。 b) 抛出异常对象 由于异常属于意外事件,并不是总是发生,必须有一个条件判断语句 if (满足抛出异常条件);然后再抛出异常 throw new Excrption 如下例: If ( y == 0 ) // 如果被除数为零 { Throw new DivideByZeroException (); // 抛出 DivideByZeroException 异常类对象; } c) 捕获并处理异常 catch 关键字用于捕获在 try 程序块中所引发的异常

day09_继承、super、this、抽象类

谁说我不能喝 提交于 2020-01-15 07:19:44
继承 由来 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。如图所示: 其中,多个类可以称为子类,单独那一个类称为父类、超类(superclass)或者基类。 继承描述的是事物之间的所属关系, 这种关系是: is-a 的关系。 例如,图中兔子属于食草动物,食草动物属于动物。可见,父类更通用,子类更具体。我们通过继承,可以使多种事物之间形成一种关系体系。 在继承的关系中,“子类就是一个父类”。也就是说,子类可以被当做父类看待。 定义 继承: 就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。 好处 提高代码的复用性。 类与类之间产生了关系,是多态的前提。 继承的格式 通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下: 继承演示,代码如下 定义父类 package demo01; class Employee { // 定义name属性 String name; // 定义员工的工作方法 public void work() { System.out.println("尽心尽力地工作"); } } 定义子类 package demo01; /** * 定义讲师类Teacher 继承 员工类Employee */

Java基础及小总结

时光总嘲笑我的痴心妄想 提交于 2020-01-15 04:14:32
Java和C++一样,是面向对象的,面向对象的三大特征是:封装、继承和多态(也有人说面向对象的四大特征是:封装、继承、多态和抽象)。 Java把数据类型分为两种,即基本数据类型和引用数据类型。(基本数据类型包括:byte、short、int、long、float、double、char、boolean) 被static修饰的成员变量和成员方法可以通过类名直接访问。 外部类只能被public和default修饰;内部类可以有四种修饰,即public、protected、private和default(默认)。 Java类是单继承的,接口允许多继承。 构造方法: (1)构造方法也是类的方法,可以在创建对象时为成员变量赋值; (2)构造方法可以进行重载,但是参数列表必须不同,不以返回值和访问级别进行区分; (3)构造方法没有返回值; (4)构造方法一定要与定义为public的类同名; (5)构造方法不能被类调用,只能用new关键字创建对象。 访问控制修饰符 Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持 4 种不同的访问权限。 default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。 private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类) public : 对所有类可见

Java之包和访问权限

时光总嘲笑我的痴心妄想 提交于 2020-01-15 02:16:53
Java—包和访问权限 包 命名规则: 1、包名全部由小写字母(多个单词也全部小写); 2、如果包名包含多个层次,每个层次应该用“.”分割; 3、包名一般由倒置的域名开头,比如com.baidu;——不要有www 4、自定义包不能java开头; 包的作用: 1、有利于类的查找与管理。一个软件由很多类构成,这些类按其功能可分为vo类、dao类、工具类、service类、controller类等,将这些类按其功能分门别类地放在不同包中有利于类的查找与管理; 2、解决了同名类命名冲突; 3、有利于保护类中的成员变量及其方法。类中成员变量及其方法前面的访问控制符决定了该变量和方法的使用范围; 什么时候需要引包: 1、自定义类中使用在不同一包中的其它自定义类时; 2、自定义类中除java.lang包以外的其它包中的JDK中自带的类时就需要引包; 3、自定义类中使用其它第三方jar包中的类或接口时需要引包; 如何引包: 1、直接使用完整类名引包; 2、import 包名 . 类名,这种方式用的最多: 3、import 包名 . *,这种方式将向类中导入该包中的所有公共类; 访问控制符 四个访问控制符: 1、 public 是最大的访问权限修饰符,其修饰的成员变量、构造方法和普通方法可在任何一个类中被操作或使用; 2、 protected 修饰的成员变量、构造方法和普通方法可以在其定义类中

java基础

假如想象 提交于 2020-01-15 00:47:54
java基础笔记 第一章 入门须知 1.1 程序开发步骤 编写 编译: 将我们编写的java源文件翻译成jvm认识的class文件,此过程编译器会检查我们所写的程序是否有语法错误 运行 1.2 标识符 定义:自己定义的内容,如类名,方法名,变量名 命名规则: 可以包含:**字母,数字,$(美元符号),_(下划线)** 不能以数字开头 1.3 数据类型转换 自动转换:自动向更适应的类型转换(自动将类型提升) 强制转换:随你,但要看能不能转换成功 加减运算默认是在int类型下的,所以short类型也会发生自动转换 short s = 1; s = s + 1;//编译失败 public static void main(String[] args){ byte b1=1; byte b2=2; //对于常数,编译器是知道的,所以会自动得出结果3,从而确定没有越界而顺利赋值 byte b3=1 + 2; //对于变量,编译器不知道值是多少,会进行自动转换,从而报错,出现异常 byte b4=b1 + b2; System.out.println(b3); System.out.println(b4); } 1.4 运算符 && 短路与:左边是false,右边就不再运算 || 短路或:左边是true,右边就不再运算 ! 取反 1.5 方法 方法必须定义在一个类中的方法外

考虑使用静态工厂方法替代构造方法

ε祈祈猫儿з 提交于 2020-01-14 16:02:33
一个类允许客户端获取其实例的传统方式是提供一个公共构造方法,其实还有另一种技术应该成为每个程序员工具箱的一部分,一个类可以提供一个公共静态工厂方法,它只是返回类实例的静态方法。 举一个简单的例子,java.lang包中的Boolean 对象,是boolean基本类型的包装类,此方法将boolean基本类型转换为boolean对象引用: public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); } 类可以为客户端提供静态工厂方法,而不是公共构造方法。提供静态工厂方法而不是公共构造方法有优点也有缺点。 静态工厂方法的第一个优点是,与构造方法不同,他们是有名字的,如果构造方法的参数并不秒数被返回的对象,则具有精心选择名称的静态工厂方法更易于使用,并且生成的客户端代码也更易于阅读, 例如: 假设我们需要写一个产生随机数的类RandomIntGenerator,该类有两个成员属性:最小值min和最大值max, 假设我们的需求是需要创建三种类型的RandomIntGenerator对象, 1.大于min,小于max; 2.大于min,小于Integer.MAX_VALUE; 3.大于Integer.MAX_VALUE; 如果我门不使用静态工厂方法,代码一般如下设计: /** * @author CMQ */

Java学习之路-Java的继承与实现

我们两清 提交于 2020-01-14 10:52:01
继承 1.java中是单继承的 。每个子类只有一个父类。 语法:子类 extends 父类 2.在java中,即使没有声明父类,也有一个隐含的父类,就是Object类 3.在子类中可以使用super来调用父类的方法 4.继承中的构造方法问题 在new一个子类实例的过程中,会优先自动调用父类默认的无参数构造方法,然后再调用子类的构造方法。如果父类没有默认的构造方法,只有带参数的构造方法,此时就会出错。 除了由jvm自动调用父类默认的构造方法外,子类还可以可以通过super方法调用父类的构造方法,尤其是当父类没有默认的构造方法,只有带参数的构造方法的情况下,那么在子类中必须使用super的方式调用父类带参数的构造方法。 5.动态绑定和静态绑定 java的动态绑定和静态绑定 6.父子类型转换 向上类型转换:父类型的引用指向子类型的实例 ? 1 2 Child c = new Child(); Parent p = c; 向下类型转换:在java中使用强制转换的方式实现向下类型转换,即父类型的变量可以赋值给子类型的变量,但是不一定每次向下类型转换都会成功,这取决于这个父类变量的动态类型(即引用的对象类型)是不是这个子类或者是这个子类的子类。 ? 1 2 3 4 5 6 7 8 9 10 public class Bind{ public static void main(String[]

java类中的static成员变量和static方法简单介绍,持续补充

萝らか妹 提交于 2020-01-14 10:12:24
一.静态成员变量 1.属于整个类而不是某个对象实例,所以可以直接通过类名和对象名去调用。   2.静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收 二.静态方法 1. 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员; 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量   2. 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量   3. 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法 注: 静态方法是属于类的,内存必须为它分配内存空间,这个空间一直由静态方法占用,内存管理器不会由于静态方法没有被调用而将静态方法的存储空间收回,这样如果将所有的方法都声明为静态方法,就会占用大量的内存空间,最后是系统变慢。而普通的成员方法是由对象调用的,内存并不会一直为起分配内存,只有调用的时候才为其分配存储空间,而当其没有被调用时,存储空间就会被内存管理其收回,释放没有用的空间,提高的系统的运行速率 三.初始化块和静态初始化块 1.为什么要有初始化?   答:初始化块就是构造器的补充,初始化块是不能接收任何参数的,定义的一些所有对象共有的属性、方法等内容时就可以用初始化块初始化了     好处是可以提高初始化块的复用,提高整个应用的可维护性  2