1,Java同一个文件尽量只用一个类,有多个类则只使一个类为public。
2,创建一个没有主体的kotlin类:eg:class Person->可以不加{},修饰符只有public, private,一个类写好后加载到方法区;
3,Animal a1 = new Animal() 经历的过程
(1). 在内存中的方法区寻找Animal类信息
(2). 如果没有这个类,类加载器将当前这个类的字节码.class文件加载到内存中
(3). 在堆中申请内存空间
(4). 当前的创建的对象的地址会放在操作数栈中 0x100
(5). 在当前线程栈->方法栈帧->局部变量区域申请内存空间给a1
(6). 从操作数栈中弹出顶部操作数 0x100 赋值给a1
第2步有个问题:这个类在内存中的存在形式是什么?
类对象
类是什么?
同一类事物高度抽象 不实际存在的(不会占内存)
对象是什么?
某个类的实例化(具体存在,完成具体任务(存值 执行))
存值:成员变量 属性变量
执行:行为 方法
4,为什么要有默认无参构造方法?因为类本身不知道如何创建对象,需要顶层类Object类(Java)或Any类(kotlin)来创建对象,再由当前类来初始化对象; 为什么要有重载有参构造方法?a.为了方便给初始化值 b.在创建对象的同时给予某些需要的数据(时机)
5,单例:构造函数私有化,再用一个函数getInstance返回一个当前类的对象,
第一步:私有化构造方法
第二步:提供一个静态的成员属性->静态变量
第三步:给外部提供一个静态方法->获取这个对象
第四步:外部获取这个对象->调用静态方法
//注意,这里没考虑到内存消耗和线程安全
6,kotlin类的定义:1,主构造函数:class Person constructor(){}当括号内没有参数和没有修饰符限定时不需写constructor,eg:class Person; 2,次构造函数:constructor (name:String):this(){}........a.次构造函数必须直接调用主构造函数,且只需考虑和主构造函数的关系;b.如果有父类,必须调用父类的构造函数。
7,for-each循环:for(int num:nums){}
8,IDEA敲sout即可输出"System.out.println()