
Java 基础
Java 基础
西门长海
这个作者很懒,什么都没留下…
展开
-
Java反射-类动态加载
VM在执行Java程序的时候,并不是一次性把所有用到的class全部加载到内存,而是第一次需要用到class时才加载。例如:// Main.javapublic class Main { public static void main(String[] args) { if (args.length > 0) { create(args[0]); } } static void create(String nam转载 2020-06-26 10:53:16 · 411 阅读 · 0 评论 -
Java反射-获取一个class的Class实例
方法一:直接通过一个class的静态变量class获取:Class cls = String.class;方法二:如果我们有一个实例变量,可以通过该实例变量提供的getClass()方法获取:String s = "Hello";Class cls = s.getClass();方法三:如果知道一个class的完整类名,可以通过静态方法Class.forName()获取:Class cls = Class.forName("java.lang.String");因为Cl转载 2020-06-26 10:53:09 · 367 阅读 · 0 评论 -
Java反射-class类
除了int等基本类型外,Java的其他类型全部都是class(包括interface)。例如:String Object Runnable Exception ...class是由JVM在执行过程中动态加载的。JVM在第一次读取到一种class类型时,将其加载进内存。每加载一种class,JVM就为其创建一个Class类型的实例,并关联起来。注意:这里的Class类型是一个名叫Class的class。它长这样:public final class Class { privat原创 2020-06-26 10:53:00 · 219 阅读 · 0 评论 -
Java 核心类-字符串
String在Java中,String是一个引用类型,它本身也是一个class。但是,Java编译器对String有特殊处理,即可以直接用"..."来表示一个字符串:String s1 = "Hello!";实际上字符串在String内部是通过一个char[]数组表示的,因此,按下面的写法也是可以的:String s2 = new String(new char[] {'H', 'e', 'l', 'l', 'o', '!'});因为String太常用了,所以Java提供了"..原创 2020-06-26 10:52:48 · 252 阅读 · 0 评论 -
Java 面向对象-作用域
在Java中,我们经常看到public、protected、private这些修饰符。在Java中,这些修饰符可以用来限定访问作用域。public定义为public的class、interface可以被其他任何类访问:package abc;public class Hello { public void hi() { }}上面的Hello是public,因此,可以被其他包的类访问:package xyz;class Main { void f.转载 2020-06-24 14:21:14 · 265 阅读 · 0 评论 -
Java 面向对象-静态字段和静态方法
在一个class中定义的字段,我们称之为实例字段。实例字段的特点是,每个实例都有独立的字段,各个实例的同名字段互不影响。还有一种字段,是用static修饰的字段,称为静态字段:static field。实例字段在每个实例中都有自己的一个独立“空间”,但是静态字段只有一个共享“空间”,所有实例都会共享该字段。举个例子:class Person { public String name; public int age; // 定义静态字段number: .转载 2020-06-24 13:51:58 · 200 阅读 · 0 评论 -
Java 面向对象-接口②
接口继承一个interface可以继承自另一个interface。interface继承自interface使用extends,它相当于扩展了接口的方法。例如:interface Hello { void hello();}interface Person extends Hello { void run(); String getName();}此时,Person接口继承自Hello接口,因此,Person接口现在实际上有3个抽象方法签名,其中一个来自继承的转载 2020-06-24 11:47:24 · 152 阅读 · 0 评论 -
Java 面向对象-接口①
在抽象类中,抽象方法本质上是定义接口规范:即规定高层类的接口,从而保证所有子类都有相同的接口实现。这样,多态就能发挥出威力。如果一个抽象类没有字段,所有方法全部都是抽象方法:abstract class Person { public abstract void run(); public abstract String getName();}就可以把该抽象类改写为接口:interface。在Java中,使用interface可以声明一个接口:interfa.转载 2020-06-24 11:44:40 · 161 阅读 · 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-06-24 11:12:48 · 227 阅读 · 0 评论 -
Java 面向对象-多态 ③
覆写Object方法因为所有的class最终都继承自Object,而Object定义了几个重要的方法:toString():把instance输出为String; equals():判断两个instance是否逻辑相等; hashCode():计算一个instance的哈希值。在必要的情况下,我们可以覆写Object的这几个方法。例如:class Person { ... // 显示更有意义的字符串: @Override public String toS转载 2020-06-24 10:51:34 · 200 阅读 · 0 评论 -
Java 面向对象-多态 ②
假设我们编写这样一个方法:public void runTwice(Person p) { p.run(); p.run();}它传入的参数类型是Person,我们是无法知道传入的参数实际类型究竟是Person,还是Student,还是Person的其他子类,因此,也无法确定调用的是不是Person类定义的run()方法。所以,多态的特性就是,运行期才能动态决定调用的子类方法。对某个类型调用某个方法,执行的实际方法可能是某个子类的覆写方法。这种不确定性的方法调用,究竟有什么作转载 2020-06-24 10:50:15 · 483 阅读 · 0 评论 -
Java 面向对象-多态 ①
在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,被称为重写(Override)。例如,在Person类中,我们定义了run()方法:class Person { public void run() { System.out.println("Person.run"); }}在子类Student中,覆写这个run()方法:class Student extends Person { @Override public vo.转载 2020-06-24 10:44:04 · 217 阅读 · 0 评论 -
Java 面向对象-继承中的注意点
类继承中父类的构造和子类的构造使用在Java中,任何class的构造方法,第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句super();,public class Main { public static void main(String[] args) { Student s = new Student("Xiao Ming", 12, 89); }}class Person { protected转载 2020-06-23 20:31:21 · 224 阅读 · 0 评论 -
Java 面向对象-继承
在Java 面向对象-内部私有属性中,我们定义了Person类:package my.ioc; public class PrivateField { public static void main(String[] args) { Person ming = new Person(); ming.setName("Xiao Ming"); // 设置name ming.setAge(12); // 设置age System.out.println(ming.getNam..转载 2020-06-23 20:17:22 · 253 阅读 · 0 评论 -
Java 面向对象-方法重载
在Java 面向对象-构造方法这篇文章中,我们实现了多构造方法:class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public Person(String name) { this.name = nam..原创 2020-06-23 20:08:55 · 183 阅读 · 0 评论 -
Java 面向对象-构造方法
创建实例的时候,我们经常需要同时初始化这个实例的字段,例如:Person ming = new Person();ming.setName("小明");ming.setAge(12);初始化对象实例需要3行代码,而且,如果忘了调用setName()或者setAge(),这个实例内部的状态就是不正确的。这时,我们就需要构造方法。class Person { private String name; private int age; // 构造方法 .转载 2020-06-23 20:04:47 · 204 阅读 · 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设置为负数 直接操作field,容...转载 2020-06-23 19:53:04 · 407 阅读 · 0 评论 -
Java 对象的销毁
Java 语言的内存自动回收称为垃圾回收(Garbage Collection)机制,简称GC。垃圾回收机制是指 JVM 用于释放那些不再使用的对象所占用的内存Java 自带垃圾回收机制,会自动识别内存中不再会被使用的对象并将其销毁,释放内存。一般情况下,我们可以不考虑对象的销毁问题,因为 java 自带垃圾回收机制。如果需要销毁指定对象,请看:java基础:对象的销毁...原创 2020-06-23 14:34:34 · 247 阅读 · 0 评论 -
Java 的类和方法
在一个类中定义一个方法showpackage my;/** * Student 类 * * @author mini * */public class Students { // 类student的name属性 public String name; // age属性 public int age; // sex属性 public boolean sex; // 属性也可以是类的一个对象 public StudentCards studenCards = ne原创 2020-06-23 14:28:18 · 176 阅读 · 0 评论 -
Java 类对象的引用
我们把 Students 类 new 一个对象 s1,并且给其属性 name 赋值Students s1 = new Students();s1.name = "hi";System.out.println("修改前s1.name的值为:" + s1.name);然后将对象 s2 赋给 s2 ,并且修改 s2的属性值Students s2 = s1;s2.name = "hello";System.out.println("修改后s2.name的值为:" + s2.name);S.原创 2020-06-23 14:21:28 · 190 阅读 · 0 评论 -
Java 的类和属性
新建一个 Student 类package my;/** * Student 类 * * @author mini * */public class Students { // 类student的name属性 public String name; // age属性 public int age; // sex属性 public boolean sex;}给 students 的属性赋值并且打印属性的值package my;public class原创 2020-06-23 13:55:10 · 300 阅读 · 0 评论