java学习之--对象与类

时间:2023-02-24 11:37:35

类是一个模板

对象是类的实例,对像与对象名,对象名称为引用,通过对象名可以访问对象

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