
Java学习笔记
小鱼儿858
这个作者很懒,什么都没留下…
展开
-
小白学java之面向对象编程-extends通配符
我们前面已经讲到了泛型的继承关系:Pair不是Pair的子类。假设我们定义了Pair:public class Pair<T> { ... }然后,我们又针对Pair类型写了一个静态方法,它接收的参数类型是Pair:public class PairHelper { static int add(Pair<Number> p) { Number first = p.getFirst(); Number last = p.g.原创 2020-11-21 16:40:10 · 192 阅读 · 0 评论 -
小白学java之面向对象编程-擦拭法
泛型是一种类似”模板代码“的技术,不同语言的泛型实现方式不一定相同。Java语言的泛型实现方式是擦拭法(Type Erasure)。所谓擦拭法是指,虚拟机对泛型其实一无所知,所有的工作都是编译器做的。例如,我们编写了一个泛型类Pair,这是编译器看到的代码:public class Pair<T> { private T first; private T last; public Pair(T first, T last) { th.原创 2020-11-21 16:39:47 · 223 阅读 · 0 评论 -
小白学java之面向对象编程-编写泛型
编写泛型类比普通类要复杂。通常来说,泛型类一般用在集合类中,例如ArrayList,我们很少需要编写泛型类。如果我们确实需要编写一个泛型类,那么,应该如何编写它?可以按照以下步骤来编写一个泛型类。首先,按照某种类型,例如:String,来编写类:public class Pair { private String first; private String last; public Pair(String first, String last) { .原创 2020-11-21 16:39:28 · 214 阅读 · 0 评论 -
小白学java之面向对象编程-使用泛型
使用ArrayList时,如果不定义泛型类型时,泛型类型实际上就是Object:// 编译器警告:List list = new ArrayList();list.add("Hello");list.add("World");String first = (String) list.get(0);String second = (String) list.get(1);此时,只能把当作Object使用,没有发挥泛型的优势。当我们定义泛型类型后,List的泛型接口变为强类型List.原创 2020-11-21 16:39:05 · 142 阅读 · 0 评论 -
小白学java之面向对象编程-泛型的理解
在讲解什么是泛型之前,我们先观察Java标准库提供的ArrayList,它可以看作“可变长度”的数组,因为用起来比数组更方便。实际上ArrayList内部就是一个Object[]数组,配合存储一个当前分配的长度,就可以充当“可变数组”:public class ArrayList { private Object[] array; private int size; public void add(Object e) {...} public void remov.原创 2020-11-21 16:38:44 · 166 阅读 · 1 评论 -
小白学java之面向对象编程-获取继承关系
当我们获取到某个Class对象时,实际上就获取到了一个类的类型:Class cls = String.class; // 获取到String的Class还可以用实例的getClass()方法获取:String s = "";Class cls = s.getClass(); // s是String,因此获取到String的Class最后一种获取Class的方法是通过Class.forName(""),传入Class的完整类名获取:Class s = Class.forName("java..原创 2020-11-17 11:24:23 · 138 阅读 · 0 评论 -
小白学java之面向对象编程-调用构造方法
我们通常使用new操作符创建新的实例:Person p = new Person();如果通过反射来创建新的实例,可以调用Class提供的newInstance()方法:Person p = Person.class.newInstance();调用Class.newInstance()的局限是,它只能调用该类的public无参数构造方法。如果构造方法带有参数,或者不是public,就无法直接通过Class.newInstance()来调用。为了调用任意的构造方法,Java的反射AP.原创 2020-11-17 11:24:10 · 284 阅读 · 0 评论 -
小白学java之面向对象编程-访问方法
我们已经能通过Class实例获取所有Field对象,同样的,可以通过Class实例获取所有Method信息。Class类提供了以下几个方法来获取Method:Method getMethod(name, Class…):获取某个public的Method(包括父类)Method getDeclaredMethod(name, Class…):获取当前类的某个Method(不包括父类)Method[] getMethods():获取所有public的Method(包括父类)Method[] get.原创 2020-11-17 11:23:57 · 132 阅读 · 0 评论 -
小白学java之面向对象编程-访问字段
对任意的一个Object实例,只要我们获取了它的Class,就可以获取它的一切信息。我们先看看如何通过Class实例获取字段信息。Class类提供了以下几个方法来获取字段:Field getField(name):根据字段名获取某个public的field(包括父类)Field getDeclaredField(name):根据字段名获取当前类的某个field(不包括父类)Field[] getFields():获取所有public的field(包括父类)Field[] getDecl.原创 2020-11-17 11:23:42 · 122 阅读 · 0 评论 -
小白学java之面向对象编程-class类
除了int等基本类型外,Java的其他类型全部都是class(包括interface)。例如:StringObjectRunnableException…仔细思考,我们可以得出结论:class(包括interface)的本质是数据类型(Type)。无继承关系的数据类型无法赋值:Number n = new Double(123.456); // OKString s = new Double(123.456); // compile error!而class是由JVM在执行.原创 2020-11-17 11:23:25 · 237 阅读 · 0 评论 -
小白学java之面向对象编程-包
在前面的代码中,我们把类和接口命名为Person、Student、Hello等简单名字。在现实中,如果小明写了一个Person类,小红也写了一个Person类,现在,小白既想用小明的Person,也想用小红的Person,怎么办?如果小军写了一个Arrays类,恰好JDK也自带了一个Arrays类,如何解决类名冲突?在Java中,我们使用package来解决名字冲突。Java定义了一种名字空间,称之为包:package。一个类总是属于某个包,类名(比如Person)只是一个简写,真正的完整类名是包名原创 2020-11-17 11:23:06 · 109 阅读 · 0 评论 -
小白学java之面向对象编程-静态字段和静态方法
在一个class中定义的字段,我们称之为实例字段。实例字段的特点是,每个实例都有独立的字段,各个实例的同名字段互不影响。还有一种字段,是用static修饰的字段,称为静态字段:static field。实例字段在每个实例中都有自己的一个独立“空间”,但是静态字段只有一个共享“空间”,所有实例都会共享该字段。举个例子:class Person { public String name; public int age; // 定义静态字段number: publ.原创 2020-11-17 11:22:45 · 91 阅读 · 0 评论 -
小白学java之面向对象编程-接口
在抽象类中,抽象方法本质上是定义接口规范:即规定高层类的接口,从而保证所有子类都有相同的接口实现,这样,多态就能发挥出威力。如果一个抽象类没有字段,所有方法全部都是抽象方法:abstract class Person { public abstract void run(); public abstract String getName();}就可以把该抽象类改写为接口:interface。在Java中,使用interface可以声明一个接口:interface.原创 2020-11-14 19:53:18 · 256 阅读 · 0 评论 -
小白学java之面向对象编程-抽象类
由于多态的存在,每个子类都可以覆写父类的方法,例如:class Person { public void run() { … }}class Student extends Person { @Override public void run() { … }}class Teacher extends Person { @Override public void run() { … }}从Person类派生的Student和Teacher都可.原创 2020-11-14 19:33:21 · 339 阅读 · 0 评论 -
小白学java之面向对象编程-多态
在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,被称为覆写(Override)。例如,在Person类中,我们定义了run()方法:class Person { public void run() { System.out.println("Person.run"); }}在子类Student中,覆写这个run()方法:class Student extends Person { @Override public void.原创 2020-11-14 17:18:07 · 181 阅读 · 0 评论 -
小白学java之面向对象编程-继承
我们已经定义了Person类:class Person { private String name; private int age; public String getName() {...} public void setName(String name) {...} public int getAge() {...} public void setAge(int age) {...}}现在,假设需要定义一个Student类,字段如下:.原创 2020-11-14 16:34:48 · 251 阅读 · 0 评论 -
小白学java之面向对象编程-方法重载
在一个类中,我们可以定义多个方法。如果有一系列方法,它们的功能都是类似的,只有参数有所不同,那么,可以把这一组方法名做成同名方法。例如,在Hello类中,定义多个hello()方法:class Hello { public void hello() { System.out.println("Hello, world!"); } public void hello(String name) { System.out.println("Hell.原创 2020-11-14 16:13:38 · 203 阅读 · 0 评论 -
小白学java之面向对象编程-构造方法
创建实例的时候,我们经常需要同时初始化这个实例的字段,例如:Person ming = new Person();ming.setName("小明");ming.setAge(12);初始化对象实例需要3行代码,而且,如果忘了调用setName()或者setAge(),这个实例内部的状态就是不正确的。能否在创建对象实例时就把内部字段全部初始化为合适的值?完全可以。这时,我们就需要构造方法。创建实例的时候,实际上是通过构造方法来初始化实例的。我们先来定义一个构造方法,能在创建P.原创 2020-11-14 16:09:17 · 125 阅读 · 0 评论 -
小白学java之面向对象编程-方法
一个class可以包含多个field(成员变量),例如,我们给Person类就定义了两个field:class Person { public String name; public int age;}但是,直接把field用public暴露给外部可能会破坏封装性。比如,代码可以这样写:Person ming = new Person();ming.name = "Xiao Ming";ming.age = -99; // age设置为负数 显然,直接操作fiel.原创 2020-11-14 15:49:07 · 124 阅读 · 0 评论 -
小白学java之面向对象编程-基础
面向对象编程,是一种通过对象的方式,把现实世界映射到计算机模型的一种编程方法。现实世界中,我们定义了“人”这种抽象概念,而具体的人则是“小明”、“小红”、“小军”等一个个具体的人。所以,“人”可以定义为一个类(class),而具体的人则是实例(instance):现实世界计算机模型java代码人类 classclass Person { }小明实例 / mingPerson ming = new Person()小红实例 / hongPerson ho.原创 2020-11-14 15:22:27 · 118 阅读 · 0 评论 -
小白学java之面向对象编程
java是面向对象的的编程语言。面向对象编程,英文是Ohject-Oriented Programming,简称OOP。那什么是面向对象编程?和面向对象编程不同的,是面向过程编程。面向过程编程,是把模型分解成一步一步的过程。比如怎么把大象装进冰箱?打开冰箱把大象装进冰箱把冰箱关闭而面向对象编程,顾名思义,你得首先有个对象:有了对象后,你就可以和对象互动: GirlFriend gf = new GirlFriend (); gf.name="Alice";...原创 2020-11-14 14:36:49 · 112 阅读 · 0 评论