public class MYClass{
long var;
public void MYClass(long parm){
var = parm;
}
public static void main(String [] args){
MYClass a , b;
a =new MYClass();
b= new MYClass(5);//错误
}
}
注意,构造函数的定义应该是
public MYClass(long parm){
var = parm;
}
而上面的void MYClass只是一个普通的方法 。
编译器向MYClass提供一个无参的构造函数。所以b中向构造方法中传入参数错误
1.1)abstract只能用来修饰类和方法(抽象方法没有方法体 )
abstract sum(int x,int y);
字段(属性)可以用public、static、final修饰
2)接口的方法默认是public、abstract的
2.构造方法可以用public、default、private、protected修饰
3.1)一位数组定义(一维数组必须定义其长度)
int[] arr = new int[]{1,2,3};
int[] arr = {1,2,3};
int[] arr = new int [3];//动态初始化
2)二维数组第一个框中一定要有值
int[][] a = new int [6][6]
int []a[] = new int[6][6]
int a[][] = new int[6][6]
int [][]a = new int[6][]
4.数组a.equals(数组b)//比较的是地址,相当于=
Array.equals(数组a,数组b)是逐个比较元素
5.java相等性规则
:用于基本数据类型时比较元素的值,用于引用型时比较的是地址
equals和相同,但String类重写equals,比较的是对象的值
6.抽象类:
必须有abstract class修饰
可以被初始化(通过构造函数),但不可以被实例化
可以被继承(即抽象类的子类为抽象类或非抽象类)
可以有构造方法
可以存在普通属性和静态属性
抽象类中不一定有抽象方法。如果一个类中有抽象方法,一定是抽象类
7.构造方法:
构造方法名必须与类名相同
构造方法没有返回值类型,也不能定义为void类型不能在方法名前声明方法类型
构造方法可以被重载(所以一个类中可以有多个构造函数)
如果一个类中没有构造函数,编译系统会自动给一个无参的构造函数
8.一个类可以有一个以上的构造器
构造器可以有0个或一个或一个以上的参数
9.编译器:java代码–>class字节码
jvm:class字节码(类)–>可执行代码
OS:可执行代码–>机器码
10.栈中数据可以共享
11.子类的访问权限不能低于父类
12.JVM内存:
虚拟栈区、本地栈区、方法区、堆区、PC寄存器
方法区和堆区是线程共享的
所有线程共享堆,而不是每个线程都有一个堆内存。堆存放对象实例以及数组
类信息存放在方法区中
13.1)当程序运行时,至少会有两个线程启动,一个是main线程,一个是垃圾回收线程,垃圾回收线程的优先级较低。
2)程序开发者只能通过gc()方法提醒系统回收线程
3)进入dead状态的线程有可能恢复,不一定被回收
14.多态:提高可重用性
扩展代码模块
15.Throwable:分为Error和Exception
Error:程序无法处理的异常
Throwable:程序本身可以处理的异常。分为RuntimeError和检查异常
Throwable处理:可以用try{}catch块
可以用throws抛出
16.用static修饰的是类方法、类变量
1)类方法通过 类名.方法名 调用;普通方法(无static修饰的方法)通过实例化对象调用
2)成员变量(在堆中)包括类变量和实例变量,可以不用初始化(默认值为0或者null);
局部变量(在栈中)必须初始化
3)成员变量和局部变量同时使用时(同名),局部变量有更高的优先级
17.泛式:
只会使程序运行期间更加安全(类型安全、消除强制类型转换);不会改变程序运行期间的性能
18.通过-Xmx参数来增加堆的大小
19.静态方法:
静态方法属于一个类而不属于对象
只能访问静态数据,无法访问非静态数据(实例数据)
只能调用其他静态方法
20.互斥锁:
关键字:synchronized
21.创建子类对象时,会默认调用父类的无参构造函数。
如果父类没有无参构造函数,则需要用super显式调用
super可以访问父类中用public、protected、default修饰的成员变量、实例方法、构造方法
成员变量:super.成员名称
实例方法:super.实例方法
构造方法:super(参数)