类是一个模板
对象是类的实例,对像与对象名,对象名称为引用,通过对象名可以访问对象
1、类的定义
一个文件中,只允许存在一个public类,并且public类名和文件名一致,并且只有包含main()方法所在的类才能成为一个public类。
2、引用赋值
Man man1=new Man();
Man man2;
man2=man1;
man2与man1指向同一个对象。
3、成员方法
public class Hello {
double f(int x){
return x*x;
}
public static void main(String[] args){
Hello hello = new Hello(); //x1
double y= hello.f(3);
System.out.println(y);
}
}
x1行中在Hello类中的mian()函数中定义了Hello对象,这是因为main()函数是static方法的缘故。只有在static方法中可以创建本类自身的对象。
4、局部变量和成员变量
局部变量:方法内部声明,调用时分配内存,执行完后,自动释放内存而销毁。如果未被初始化使用会报错。
成员变量:类中定义的变量,如果成员变量未被初始化则系统会自动根据其所属类型进行初始化,基本类型赋值为0,引用类型变量赋值为null。
5、this引用
this是一个引用对象自身的引用。
public class Hello {
int a;
void setA(int a){
this.a=a;
}
int getA(){
return a;//这里的a是指this.a
}
public static void main(String[] args){
Hello hello = new Hello();
}
}
6、静态变量和静态方法
静态成员变量在不创建类的对象的情况下也可以使用,它是所有对象共有的变量。通过
普通成员变量必须在创建了类的对象后才能被使用。
public class Hello {
static int a;
int b;
public static void main(String[] args){
Hello.a=10;//类变量
Hello hello = new Hello();
System.out.println(hello.a);
hello.a=20;
System.out.println(hello.a);
}
}
结果为:
10
20
所有的a都指向同一个a。静态方法也是类似的,可以是类方法的方式调用。
6、成员与静态方法的关系
public class Hello {
int a;
public void setA(int b){
this.a=b;//x1
}
public static void main(String[] args){
Hello.setA(10);
}
}
报错,原因在于x1行,静态方法中调用了非静态的变量,a是非静态变量,是成员变量,只能创建对象,才能引用它。
静态方法只能用静态变量。
7、包导入package
javac -d . Hello.java
在命令行中输入上面内容,-d用于指定包的位置,参数-d后插入(.),则表示在当前目录下创建包。当前目录即源文件Hello.java所在的目录。
在其他包中使用定义的类,必须使用import关键字,import com.egt,Hello;
8、访问控制符
成员变量或方法:private、public、default(friendly)、protected
类:public、default(friendly)
private,表示只能类内部使用,外部不能访问
public,内外都可以访问
default(friendly),省略的访问控制符,同包可以访问,其他包中类不能访问default成员。
protected,不仅同一个包可以访问,而且位于其他包中的子类也可以访问。
9、重载
重载是指同一个类中定义了多个同名但是内容不同的成员方法。
10、构造函数
创建对象时,如果没有定义构造函数,就会调用缺省的构造函数。
构造函数的名字和类的名字是一致的,没有返回值,并且前面没有void。缺省构造函数是没有参数,也没有函数体,即不做任何事情,其唯一的功能就是创建对象。
public class Hello {
public Hello(){}
public static void main(String[] args){
Hello hello = new Hello();
}
}
如果类中定义了构造函数,创建对象时,就会调用定义的构造函数,不使用缺省的构造函数。
this()实现在一个构造函数内调用其他重载的构造函数,this()必须是花括号里的第一句话。
11、静态块、实例块
静态方法比静态块执行要晚,非静态成员变量不能在静态方法和静态块中使用。static{,,,}主要用来初始化静态变量及静态方法。
public class Hello {
static int a;
static{
System.out.print("静态块");
a=10;//只能是静态变量
}
public static void main(String[] args){
Hello hello = new Hello();
System.out.print(hello.a);
}
}
实例块先与构造函数执行,类的实例,即创建类的对象。
public class Hello {
int a;
{
System.out.print("实例块");
a=10;
}
public Hello(int a){
System.out.print("构造函数");
this.a=a;
}
public static void main(String[] args){
Hello hello = new Hello(30);
System.out.print(hello.a);
}
}
结果:
实例块
构造函数
30