Java官方笔记8泛型

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 泛型 为什么需要泛型?generics enable types (classes and interfaces) to be parameters when defining classes, interfaces and methods. 说白了就像Python动态语言的变量,是动态的,可以指向任意类型。 泛型有个好处是不需要类型转换: List list = new ArrayList(); list.add("hello"); String s = (String) list.get(0); List<String> list = new ArrayList<String>(); list.add("hello"); String s = list.get(0); // no cast 这个例子的泛型,是指List的实现使用了泛型<T>,从而给使用带来了好处。 定义 class name<T1, T2, ..., Tn> { /* ... */ } 比如定义class List<T>,使用List<String> 将以下代码: public class Box { private Object object; public void set(Object object) { this.object = object; } public Object get() { return object; } } 改为泛型实现: ...

Java官方笔记7接口

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 接口 接口只能包含:constants, method signatures(abstract), default methods, static methods, and nested types 方法体只存在于:default methods and static methods 接口不能实例化,只能被类实现,或者被其他接口继承(接口可以多继承)。 定义接口: public interface OperateCar { // constant declarations, if any // method signatures // An enum with values RIGHT, LEFT int turn(Direction direction, double radius, double startSpeed, double endSpeed); int changeLanes(Direction direction, double startSpeed, double endSpeed); int signalTurn(Direction direction, boolean signalOn); int getRadarFront(double distanceToCar, double speedOfCar); int getRadarRear(double distanceToCar, double speedOfCar); ...... // more method signatures } 类实现接口: ...

Java官方笔记6继承

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 继承 Java只有单继承,最顶级的父类是Object。 子类会继承父类的fields和methods,而不会继承constructors,因为constructors不属于methods,但是子类可以通过super调用父类的constructor。 子类继承父类的范围是:public、protected、package-private 隐式转换,子类转父类(只有1个爸爸): Object obj = new MountainBike(); 显示转换,父类转子类(有多个子女,所以要明确指定): MountainBike myBike = (MountainBike)obj; 类有field,而接口没有,所以在多继承时就有问题:如果多个类有相同的field,那么子类将不知道用哪一个,而接口不存在这个问题。Java不支持继承多个类,但是可以实现多个接口。 重载 子类的方法跟父类有完全相同的签名和返回类型(也可以是子类),将会覆盖父类方法Override。 如果子类定义了1个static方法,跟父类完全相同,那么父类方法会被隐藏Hide。 Override和Hide是不同的: public class Animal { public static void testClassMethod() { System.out.println("The static method in Animal"); } public void testInstanceMethod() { System.out.println("The instance method in Animal"); } } public class Cat extends Animal { public static void testClassMethod() { System.out.println("The static method in Cat"); } public void testInstanceMethod() { System.out.println("The instance method in Cat"); } public static void main(String[] args) { Cat myCat = new Cat(); Animal myAnimal = myCat; // 隐式转换 Animal.testClassMethod(); // 调的父类 myAnimal.testInstanceMethod(); // 父类对象引用,还是调的子类 } } The static method in Animal The instance method in Cat Override只会调子类方法,而Hide取决于调用方是父还是子,比如这里的myCat,隐式转换为父类Animal后,会调父类的static方法,而调的实例方法却是子类的。(如果不是隐式转换,而是直接给父类实例化,那肯定还是调父类方法) ...

Java官方笔记5数字和字符串

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 Numbers Number的子类: 另外还有BigDecimal和BigInteger,用于高精度计算,AtomicInteger和AtomicLong用于多线程应用。 我们有时候需要用包装类而非基本数据类型,理由如下: 方法入参类型为Object,只能传入对象 使用包装类提供的常量,比如MIN_VALUE和MAX_VALUE 使用包装类的方法来做类型转换 format import java.util.Calendar; import java.util.Locale; public class TestFormat { public static void main(String[] args) { long n = 461012; System.out.format("%d%n", n); // --> "461012" System.out.format("%08d%n", n); // --> "00461012" System.out.format("%+8d%n", n); // --> " +461012" System.out.format("%,8d%n", n); // --> " 461,012" System.out.format("%+,8d%n%n", n); // --> "+461,012" double pi = Math.PI; System.out.format("%f%n", pi); // --> "3.141593" System.out.format("%.3f%n", pi); // --> "3.142" System.out.format("%10.3f%n", pi); // --> " 3.142" System.out.format("%-10.3f%n", pi); // --> "3.142" System.out.format(Locale.FRANCE, "%-10.4f%n%n", pi); // --> "3,1416" Calendar c = Calendar.getInstance(); System.out.format("%tB %te, %tY%n", c, c, c); // --> "May 29, 2006" System.out.format("%tl:%tM %tp%n", c, c, c); // --> "2:34 am" System.out.format("%tD%n", c); // --> "05/29/06" } } DecimalFormat ...

Java官方笔记4类和对象

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 创建类 定义类Bicycle: public class Bicycle { // the Bicycle class has // three fields public int cadence; public int gear; public int speed; // the Bicycle class has // one constructor public Bicycle(int startCadence, int startSpeed, int startGear) { gear = startGear; cadence = startCadence; speed = startSpeed; } // the Bicycle class has // four methods public void setCadence(int newValue) { cadence = newValue; } public void setGear(int newValue) { gear = newValue; } public void applyBrake(int decrement) { speed -= decrement; } public void speedUp(int increment) { speed += increment; } } 创建子类MountainBike继承类Bicycle: ...

Java官方笔记3Java语言基础

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 变量 Instance Variables (Non-Static Fields) 实例变量(非静态变量) 一个类可以创造多个实例,实例中的变量叫做实例变量,相互独立。 Class Variables (Static Fields) 类变量(静态变量) 对比来看,类变量就是类的变量,一个类只能有一份,不能复制,使用static关键字来定义类变量。 代码: public class MyVar { static int classVar = 1; // 类变量(静态变量) int instanceVar = 2; // 实例变量 } 对比Python来看就很清楚: class MyVar: class_var = 1 def __int__(self): instance_var = 2 Local Variables 局部变量 局部变量是由代码位置决定的,前面的实例变量和类变量,是放到Field位置,而局部变量是放到Method里面。也就是说,局部变量是放在方法的花括号里面的变量,并且只能在方法内部访问,不能被其他地方访问,这就是所谓的局部。 public class MyVar { static int classVar = 1; // 类变量(静态变量) int instanceVar = 2; // 实例变量 void method() { int localVar = 3; // 局部变量 } } Parameters 参数 ...

Java官方笔记2面向对象编程基本概念

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 对象Object 对象有2个特征:状态state和行为behavior。我们可以用真实世界的对象来做类比,这样有助于理解面向对象编程,比如狗的状态(名字、颜色、品种)和行为(叫、抓、摇尾巴),自行车的状态(当前档位、当前踏板节奏、当前速度)和行为(切换档位、切换踏板节奏、踩刹车)。 软件对象也是由状态和行为组成: 状态,在软件对象中,叫做字段fields,或变量variables。 行为,在软件对象中,叫做方法methods,或函数functions。 所谓的数据封装data encapsulation,就是字段只在内部,不对外暴露,仅由方法进行操作,对象与对象之间通过方法来相互访问。 Java是纯粹的面向对象编程语言。 类Class 类,可以视为对象的模版,基于类来创造出同一类对象。 比如自行车的类: class Bicycle { int cadence = 0; int speed = 0; int gear = 1; void changeCadence(int newValue) { cadence = newValue; } void changeGear(int newValue) { gear = newValue; } void speedUp(int increment) { speed = speed + increment; } void applyBrakes(int decrement) { speed = speed - decrement; } void printStates() { System.out.println("cadence:" + cadence + " speed:" + speed + " gear:" + gear); } } 类也是有2个特征:字段和方法。比如Bicycle类有字段cadence、speed、gear和方法changeCadence()、changeGear()、speedUp()等。 ...

Java官方笔记1编写运行Java程序

你可能已经迫不及待想安装Java,写个Java程序跑起来了。但是在这之前,有些概念需要提前了解,因为Java跟C、C++和Python都有点不一样。

刷完3个Java教程后不再犹豫

成年人最大的底气是你拥有一技之长,人生才不会被动。从事测试开发岗位,需要精通一门编程语言,是核心,是大招,是招牌技能。我内心一直在Java和Python之间选择,反复横跳。

Java高级编程精华笔记

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 学习路线 本文是Java高级编程精华笔记,是对菜鸟教程中Java面向对象和Java高级编程的重要章节进行了学习,整理形成的学习笔记,知识图谱如下图所示: 如果想对Java深入学习,可以参考阿里巴巴的技术图谱: https://developer.aliyun.com/graph/java 继承 Java使用extends关键字来声明继承: class 父类 { } class 子类 extends 父类 { } 示例,子类企鹅和子类老鼠继承父类动物: //父类:动物 public class Animal { private String name; private int id; public Animal(String myName, int myid) { name = myName; id = myid; } public void eat() { System.out.println(name + "正在吃"); } public void sleep() { System.out.println(name + "正在睡"); } public void introduction() { System.out.println("大家好!我是" + id + "号" + name + "."); } } //子类:企鹅 public class Penguin extends Animal { public Penguin(String myName, int myid) { super(myName, myid); } } //子类:老鼠 public class Mouse extends Animal { public Mouse(String myName, int myid) { super(myName, myid); } } Java只支持单继承,不支持多继承,但可以多重继承: ...