Java类和对象---【超详细】

1.类和对象的基本概念

1.在Java中一切皆对象,一切都围绕对象进行,找对象、建对象,用对象等

类:把具有相同属性和行为的一类对象抽象为类,例如人类,猫科类等等,无法具体到每个实体的。

类指的就是一种模板,定义了一种特定类型的所有对象的属性和行为。在一个.java的文件中,可以有多个class,但是只能有一个class是用public修饰。被声明为public的class,必须和文件名相同

对象:类是模板,通过模板创建出具体的实例,就是对象,对象就是实际存在的某类事物的个体,也叫实例,类和对象的关系,就是抽象和具体的关系。类是描述某一对象的统称,对象是这个类的一个实例而已。有类之后就能根据这个类来产生具体的对象。一类对象所具备的共同属性和行为(方法)都在类中定义。

2.类和对象的声明和创建

2.1类的定义格式:

[访问修饰符] class 类名{
    成员变量(属性)
    成员方法(行为)
    内部类
    代码块
}

​
public class 类名称 {
 
成员变量/ 实例变量;
 
成员方法;

这里面还可以有内部类
代码块
 
}

​

2.2成员变量

java类的成员变量,都有默认值
整数:0
浮点数:0.0
boolean:false
字符:'\u0000'
引用类型:null
java类的成员变量,在下面所有的方法中,都可以访问到

2.3局部变量

局部变量,没有默认值

1.方法体中声明的变量
2.方法参数中的变量
3.代码块中的变量

2.4 创建对象

创建对象的语法:类名 对象名=new 类名();

​
public class Test {
    public static void main(String[] args) {
        //创建一个实例化对象
        Dog dog1 = new Dog();
        //通过对象来调用实例变量、成员方法
        dog1.name = "旺财";
        dog1.age = 2;
        dog1.sex = "公";
        dog1.print();
        Dog dog2 = new Dog();
        dog2.print();
    }
}
class Dog{
    //成员变量(实例变量),在堆中的每个对象中存储,通过对象调用
    String name;//默认值为null
    int age;//默认值为0
    String sex;//默认值为null
    //成员方法(实例方法),在JVM的方法区中存储,通过对象调用
    void print(){//在类里定义一个方法
        System.out.println("name:"+name+", age:"+age+", sex:"+sex);
    }
}

​

3.static关键字

3.1static可以修饰属性

1.类成员变量或静态成员变量:使用static修饰的,作用范围在整个类的所有对象上,所有对象共享这个变量,在内存中只有一个副本。访问通过 类名.变量名 访问。在类加载时被初始化,存储在堆里。
2.实例成员变量:没有static修饰,作用范围在某个实例对象上。在创建对象时被初始化,存在多个副本。各个对象不互相影响。通过 实例对象名.变量名 访问。 

运行结果 

3.2static可以修饰方法

类方法或静态方法:使用static修饰,不能直接使用实例变量,只能直接使用静态变量。只能直接调用静态方法,不能直接调用实例方法。通过 类名.方法名() 访问在静态方法中不允许使用this关键字
实例方法:没有static修饰,既可以使用静态变量,又可以使用实例变量。既可以直接访问实例方法,又可以直接访问静态方法。 通过 实例对象名.方法名() 访问 

4.构造方法

1. 也称作构造器,严格来讲,构造方法不是方法
2. 构造方法要求和类名相同,没有返回值类型,也没有void,可以有return,表示方法的结束,不能返回值。
3. 构造方法主要作用是完成对象的初始化工作。
4. 每个java类,都至少有一个构造方法,如果不写构造方法,编译器会自动提供一个构造方法,没有任何参数和语句的,默认的空构造方法。如果一旦写了构造方法,编译器不会再提供默认的构造方法。
5. 一个类可以定义多个构造方法(构造方法的重载)
6. 一般情况,都会写一个无参的构造方法,这是一个好的编程习惯
7. 构造方法的调用:
      如果是在其他类中,通过new 的方式来调用构造方法
      如果是在自己的类中,可以在构造方法之间进行互相调用。使用this([参数])。必须写在构造方法中的第一行
8.快捷生成 alt+insert

new 执行过程

1.为对象分配内存空间

2.调用合适的构造方法

public class Test {
    public static void main(String[] args) {
        //当创建一个对象时,默认调用该类的构造方法
        Person person = new Person();
    }
}
class Person{
    String name;
    int age;
    String sex;
    //构造方法名称与类名称完全相同
    //没有返回值声明
    public Person(){
        System.out.println("Person的构造方法");
    }
}

4.1构造方法的重载

要求:

1.方法名要相同
2.参数列表不同(类型和个数)
3.返回值不做要求

​
public class Test {
    public static void main(String[] args) {
        //当构造对象时,默认调用该类的构造方法
        Dog person = new Dog();
        Dog person1 = new Dog("旺财");
        Dog person2 = new Dog("旺财",2);
        Dog person3 = new Dog("旺财",2,"公");
    }
}
class Dog{
    String name;
    int age;
    String sex;
    public Dog(){
//构造方法首行name = null,age = 0;sex = null(不用写)
        System.out.println("Dog类的无参构造");
    }
    public Dog(String n){
//首行name = null,age = 0;sex = null;
        name = n ;
        System.out.println("name:"+name);
        System.out.println("Dog类的一个参数的有参构造");
    }
    public Dog(String n,int a){
        name = n ;
        age = a;
        System.out.println("name:"+name+", age:"+ age );
        System.out.println("Dog类的两个参数的有参构造");
    }
    public Dog(String n,int a,String s){
        name = n ;
        age = a;
        sex = s;
        System.out.println("name:"+name+", age:"+ age +", sex :"+sex);
        System.out.println("Dog类的三个参数的有参构造");
    }
}

​

运行结果 

5.this关键字

this当前对象的引用

this关键字调用当前对象的成员变量

​​​​public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog("旺财",2,"公");
        dog.print();
    }
}
class Dog{
    //成员变量
    String name;
    int age;
    String sex;
    public Dog(String name,int age,String sex){//形参
        name = name;
        age = age;
        sex = sex;
        System.out.println("Person类的有参构造");
    }
    public void print(){
        System.out.println("name:"+name+", age:"+age+", sex:"+sex);
    }
}

 

为什么初始化了变量值还是输出默认值,因为程序是就近原则匹配 

使用this关键字就可以打破就近原则

 public Person(String name,int age,String sex){
      this.name = name;
       this.age = age;
       this.sex = sex;
        System.out.println("Person类的有参构造");
    }

 this也可以调用当前对象的方法

this调用普通的成员方法

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.fun();
    }
}
class X{
    String name;
    int age;
    String sex;
 
    public void test(){
        System.out.println("X类的test成员方法");
    }
    public void fun(){
//test()方法是成员方法,必须通过对象调用
//this表示对象的引用,调用成员方法时不写,编译时也会自动加上
        test();//==this.test();
        System.out.println("X类的fun成员方法");
    }
}

构造方法之间可以的相互调用 

若不同参数的构造方法之间出现了重复的调用,可以使用 this(参数)调用其他的构造方法。

 6.封装

6.1包的概念

package 进行打包操作 URL地址反向写法
包的用途
1.避免命名冲突
2.可以按功能将类进行组合
3.可以保护类、数据和方法
注意问题:
1.package打包语句必须在代码的第一条语句。前面只能有空白和注释。
2.使用package时,会在磁盘上生成对应的目录
3.每个源文件只能有一条打包语句

6.2导包操作

在同一个包中,类之间互相访问,可以不需导包操作
如果类不在同一个包下面,需要使用import进行导包操作
1.import可以出现多次
2.声明在package之后,在类之间
导包可以使用通配符 *

6.3静态导入 

6.4代码的封装 

属性和方法的访问修饰符

private(私有的):只能在当前类中访问,不对外公开

defalut:不使用访问修饰符关键字来声明,表示默认,当前类和同包可以访问

protected:受保护的,父类和子类,如果是子类,可以访问

public:公有的,最高的访问权限,所有类都可以访问,不管是否同包

类的访问修饰符

public :所有类都可以访问
default:只能当前包中访问

  • 57
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值