0
点赞
收藏
分享

微信扫一扫

Java基础二

爱上流星雨 2022-02-16 阅读 84

目录

一、关键字

1、package 定义包

2、import 导包

在这里插入图片描述

//注意:package语句必须在第一行
package edu.td.chapter02;
//注意:import语句必须出现在package语句下面
import edu.td.chapter01.Demo09;
import edu.td.chapter01.Demo10; //灰色表示包导入但并未被使用,可以删掉
import edu.td.chapter01.*; //* 代表该包里面所有的类(不推荐使用),一般用什么导什么

public class Demo01 {
    public static void main(String[] args) {
        //在Demo01这个类中访问Demo02类里面的变量name
        System.out.println(Demo02.name);
        
        //在Demo01这个类中访问Demo09类里面的变量name
        //System.out.println(Demo09.name); //报错cannot resolve symbol 'Demo09'
        //错误原因 Demo09这个类不在当前edu.td.chapter02包里面

        //解决方法:
        //1、写Demo09的类的全限定名
        //  缺点:只对当前这次访问有效
        System.out.println(edu.td.chapter01.Demo09.name);
        //System.out.println(Demo09.city); //报错cannot resolve symbol 'Demo09'
        System.out.println(edu.td.chapter01.Demo09.city);
        
        //2、使用import关键字导入Demo09类 import edu.td.chapter01.Demo09;
        //此时,当编译器在当前包里面找不到Demo09,编译器会自动从import的路径中去找
        //优点:只需import导入一次,Demo09类中所有内容都可以直接访问了
        System.out.println(Demo09.name);
        System.out.println(Demo09.city);
        System.out.println(Demo10.name);
    }
}

3、static 静态 修饰符

指定变量被所有对象共享,加static是静态变量,不加static是成员变量
不是静态变量没发直接通过类访问该变量
在这里插入图片描述

4、类的静态代码块(初始化块)

作用:写类的初始化的代码逻辑
这个代码块在类被加载时自动执行
static {}

5、public 静态 访问权限修饰符 可跨包访问

共有访问,对所有的类都可见
在这里插入图片描述

6、private 私有 访问权限修饰符 当前类访问

只对同一个类可见,其余都不见
在这里插入图片描述

7、protected 受保护的 访问权限修饰符 当前包

保护型访问,对同一个包可见,对不同的包的子类可见

8、new 创建对象

口诀:方法区管字节码文件的存储,栈区管方法执行,堆区管对象的存储

造对象的过程
1、从方法区里面的类的字节码文件中搜索成员变量,然后根据成员变量的数据类型和名称,分配到对象中
2、为每一个成员变量赋初始值(零值)
整数赋值是0
浮点数默认是0.0
布尔默认是false
char默认是u\000(是一个空格)
String默认是null
3、将对象存储到堆区里面
4、返回对象在堆区里面的地址

// 1、对象在哪里?创建出来的对象放在JVM虚拟机内存中的堆区中
// 2、对象是是什么?对象是以某一个类的字节码文件为模板创建的数据结构(任何一个类都可以被用来创建对象)
// 3、使用new 关键字调用构造方法
// 4、对象里面有什么?由类来决定
// 5、对象有什么用?
// 创建一个对象
Person sc = new Person(); //类型 对象名 = new 类型();
//new Person("张飞"); Alt+回车 可以快速创建存储对象内存地址的指针
Person s = new Person(); //类型 对象名 = new 类型();
System.out.println(sc==s); //false

类是否在方法区中只会被加载一次
在这里插入图片描述

9、this

作用:是一个特殊的指针,指向当前正在构造的那个对象
this有时可以省略,有时不能省略

package edu.td.chapter02;

public class Demo05 {
    public static void main(String[] args) {
        Person p1 = new Person("张飞");
        System.out.println("p1--" + p1);
        Person p2 = new Person("赵云");
        System.out.println("p2--" + p2);
    }
}
package edu.td.chapter02;

public class Person {
    public int age;
    public double height;
    public double weight;
    public boolean sex;
    public String name;

    public Person(String _name){
        System.out.println("this---" + this);
//        this.name = name;
        //this.name 代表的是当前创建的那个对象里面的成员变量name
        //左边和右边的name都被识别为是构造方法的参数name,自己赋给自己,并没有存入到对象里面的name
//        name = name;
        //_name是参数,name被识别为是成员变量name,此时可以省略this
        name = _name;
        //按照就近原则寻找name
        // _name和name不存在歧义,可以省略this,存在歧义,不可省
    }
}

在这里插入图片描述

方法

1、构造方法

一种特殊的构造方法:
这种方法是专门用来构造对象的,必须是使用new关键字调用
如果一个类中没有显示指定构造方法,则编译器会默认在字节码文件中添加一个默认的无参构造方法
在这里插入图片描述
如果一个类中有一个显示指定构造方法,则编译器不会再给字节码文件添加默认的构造方法
在这里插入图片描述
构造方法私有化
在这里插入图片描述
在这里插入图片描述
无参调用有参,报错
在这里插入图片描述
如果使用无参构造方法来造对象,那么造出来的对象中所有的成员变量都是初始值(零值)
如果使用带有参数的构造方法来造对象,可以在造对象的时候,就把数据存储到对象的成员变量中
在这里插入图片描述

package edu.td.chapter02;

public class Person {
    //成员变量
    //成员?是对象的组成人员
    public int age;
    public double height;
    public double weight;
    public String name;

    //构造发法一:无参
    public Person(){

    }

    //构造发法二:1个参数
    public Person(String name){
        this.name = name;
    }

    //构造发法三:2个参数
    public Person(String name, int age){
        this.name = name;
        this.age = age;
    }

    //构造发法四:3个参数
    public Person(String name, int age, int height){
        this.name = name;
        this.age = age;
        this.height = height;
    }

    //构造发法五:4个参数,全参
    public Person(String name, int age, float height, int weight){
        System.out.println("创建了一个对象,当前地址是:" + this);
        this.name = name;
        this.age = age;
        this.height = height;
        this.weight = weight;
    }
}

定义的参数变量为 int height 和 weight 但是输出是0.0 自动转换类型了?
答:对象的输出类型由成员变量的类型决定,而不是参数类型决定
在这里插入图片描述

2、方法重载

当一个中有多个构造方法的时候,构成构造方法重载
1、方法名相同,参数列表不同
2、参数列表不同包括参数个数不同或参数的类型不同

3、成员方法

成员方法的名称是自定义的
成员方法包含以下几个组成部分:
1、方法返回值类型(构造方法没有返回值类型,默认返回this指针)
2、方法名
3、参数列表
4、方法体

一个类的构造方法必定先于成员方法执行

举报

相关推荐

0 条评论