`
文章列表
java只支持单继承。因为多继承会带来安全隐患:当多个父类中定义了相同函数名的函数,但函数功能不同,子类对象不确定要运行哪一个方法。 java支持多层继承(A继承B,B继承C),也就是继承体系。 如何使用一个继承体系中的功能? 先查阅体系父类的描述,因为父类中定义的是该体系中的共性功能。 通过了解共性功能就可以知道该体系的基本功能。 那么这个体系已经可以基本使用了。 那么在具体调用时,要创建最子类的对象。为什么呢? 1、因为有可能父类不能创建对象(抽象类和接口) 2.创建子类对象可以使用更多的功能,包括基本的和特有的 一句话:查阅父类功能,创建子类对象使用功能
Person p = new Person("zhangsan",20); 这句话都做了什么事情? 1.因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中 2.如果有static代码块,执行该类中的static代码块,给Person.class类进行初始化 3.在堆内存中开辟空间分配内存地址 4.在堆内存中创建对象的特有属性,并进行默认初始化 5.对属性进行显示初始化 6.对对象进行构造代码块初始化 7.对对象进行对应构造函数初始化 8.将内存地址赋值给栈内存中的p变量
/* 静态代码块 格式: static{ 静态代码块中的执行语句 } 特点:随着类的加载而执行,只执行一次 用于给类进行初始化的。 */ class StaticCode{ static{ System.out.println("a"); } } class StaticCodeDemo{ static{ System.out.println("b"); } public static void main(String[] args){ new StaticCode(); new ...
/* 主函数:是一个特殊的函数,作为程序的入口,可以被jvm调用 主函数的定义: public:代表着该函数访问权限是最大的 static:代表这主函数随着类的加载就已经存在了 void:主函数没有具体的返回值 main:不是关键字,是一个特殊的单词,可以被jvm识别 String[] args:函数的参数,参数类型是一个数组,数组中的元素是字符串,字符串类型的数组 主函数是固定格式的:jvm识别 */ class MainDemo{ public static void main(String[] args){ System.out.println( ...
/* static修饰符用于修饰成员变量和函数。 被static修饰的就不在堆内存中了。每个对象都能访问静态成员。 当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外, 还可以直接被类名调用,类名.静态成员。 static特点: 1.随着类的加载而加载,随着类的消失而消失 2.优先于对象存在,被所有对象所共享 3.可以直接被类名所调用 实例变量和类变量的区别: 1.存储位置 类变量随着类的加载而存在于方法区中。 实例变量随着对象的建立而存在于堆内存中。 2.生命周期 类变量生命周期最长,随着类的消失而消失 实例变量生命周期随着对象的消失而消失 ...
/* 构造函数间调用,只能用this(参数) this调用只能放在构造函数中的第一行。因为初始化要先执行。 */ class Person{ private String name; Private int age; Person(){ } Person(String name){ this(); this.name = name; } Person(String name,int age){ this(name);//这行表示p(name); this.age = age; } } class Test ...
/* private:私有权限修饰符,用于修饰类中的成员,私有只在本类中有效 将age私有化以后,类以外即使建立了对象,也不能直接访问。 但是人应该有年龄,就需要在Person类中提供对应访问age的方式。 私有仅仅是封装的一种表现形式 之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句。 对访问的数据进行操作,提高代码的健壮性。 */ class Person{ private int age; public void setAge(int age); { if(age > 0 && age < 13 ...
class MyThread implements Runnable{ int i = 100; public void run(){ while(true){ synchronized(this){ //Thread.currentThread()获取当前代码在哪个线程中运行,会返回线程对象(Thread对象) System.out.println(Thread.currentThread().getName() + i); i--; //让线程让出CPU,使所有线程重新竞争CPU Thread.yield(); if(i& ...
class MyThread implements Runnable{ int i = 100; public void run(){ while(true){ synchronized(this){ //Thread.currentThread()获取当前代码在哪个线程中运行,会返回线程对象(Thread对象) System.out.println(Thread.currentThread().getName() + i); i--; //让线程让出CPU,使所有线程重新竞争CPU Thread.yield(); if(i<0) ...
interface Worker{ public void doSomeWork(); } class Plumber implements Worker{ public void doSomeWork(){ System.out.println("水工"); } } class Carpenter implements Worker{ public void doSomeWork(){ System.out.println("木匠"); } } class AWorker implements Worker{ ...

IO学习

//第一步骤:导入类 import java.io.*; class Test{ public static void main(String[] args){ //声明输入流引用 FileInputStream fis = null; //声明输出流引用 FileOutputStream fos = null; try{ //生成代表输入流的对象 fis = new FileInputStream("g:/javaTest/stream/from.txt"); //生成代表输出流的对象 fos = n ...
class User{ int age; public void setAge(int age){ if(age < 0){ RuntimeException e = new RuntimeException("年龄不能为负数"); throw e; } this.age = age; } } class Test{ public static void main(String[] args){ int age = -20; User user = new User(); user.setAg ...
abstract class Person{ String name; int age; Person(){ System.out.println("Person的构造函数"); } Person(String name,int age){ this.name = name; this.age = age; } void introduce(){ System.out.println("我的名字是" + name + "我的年龄是" + age); } ...
父类 class Person{ String name; int age; void introduce(){ System.out.println("我的名字是" + name + ",我的年龄是" + age); } } 子类 class Student extends Person{ String address; void talk(){ System.out.println("hello"); } void introduce(){ super.introduc ...
class Person{ String name; int age; void introduce(){ System.out.println("我的名字是" + name + “,我的年龄是” + age); } } class Student extends Person{ String address; void introduce(){ System.out.println("我的姓名是" + name + "我的年龄是" + age); System.out.print ...
Global site tag (gtag.js) - Google Analytics