java面相对象,类和对象,封装,private和this关键字的作用、静态变量、制作工具类帮助文档、代码块。

一:概念

类是java中最基本的单位;一个java文件可以定义多个类;同一个包下类名不能重复。

:是一组成员变量和成员方法的集合,可以吧类看作一个抽象的概念。一个java文件中只能有一个类被public修饰只需要记住被public修饰的类规范是要与java文件名一致。

对象:是该类的具体表现,具体到一个个体。

成员变量:用于描述事物的信息。

成员方法:用于描述事物能够做什么。

成员变量与局部变量的区别:
    1、在类中定义的位置不同
        成员变量:类中,但是在方法外
        局部变量:定义在方法内部
    2、在内存中的位置也不同
        成员变量:在堆内存中
        局部变量:在栈内存中
    3、初始化值也不同
        成员变量:系统会给予默认值
        局部变量:没有系统给的默认值,必须在定义的时候赋值,亦或者在方法中使用之前赋值,然后才能使用。
    4、生命周期不同
        成员变量的生命周期:随着对象的创建而创建,随着对象的消失而消失
        局部变量的生命周期:随着方法的调用而创建,随着方法的调用完毕而消失

   注意事项:
        1、局部变量的名字可以和成员变量的名字一样,在方法中使用的时候,采用就近原则
            方法中使用的变量,会现在方法内部查找,如果方法内部没有,去成员变量中查找。
        2、方法与方法之间里面的局部变量,不能互相调用。

二:类的使用

1、定义      类名  对象名称 = new  类名(..);

使用前要先new一个对象,才能在main方法里去调用(对象名称.成员变量或者对象名称.方法名)

2、匿名对象

                  可以直接用  new 类名().成员变量或方法名去调用,new 类名()称为匿名对象。

                  注意,当调用多次的时候,不适合,每次new的时候都是一个新的匿名对象,会频繁的在堆内存中开辟空间

3、注意事项:

(1)当两个引用指向同一个对象

class Phone3{
    //成员变量
    String brand;
    int price;
    String color;

    //成员方法
    public void call(String s){
        System.out.println("打电话给"+s);
    }

    public void sendMessage(){
        System.out.println("发信息");
    }

    public void listenMusic(){
        System.out.println("听音乐");
    }
}


public class PhoneTest3 {
    public static void main(String[] args) {
        //定义一个手机类
        Phone3 p1 = new Phone3();
        //给手机对象p1成员变量赋值
        p1.brand = "小米";
        p1.price = 1999;
        p1.color = "白色";
        System.out.println(p1.brand+"---"+p1.price+"---"+p1.color);
        p1.call("雷军");
        p1.sendMessage();
        p1.listenMusic();

        
        //创建第二个手机对象,将第一个对象名赋值给它
        Phone3 p2 = p1;  //p1中存的是地址,赋值后p2也指向它
        p2.brand = "华为";
        p2.price = 19999;
        p2.color = "蓝色";
        System.out.println(p1.brand+"---"+p1.price+"---"+p1.color);//地址没变,数值改变,p1也会输出以上内容
    }
}

(2)当方法中的参数是基本数据类型和引用数据类型。


class Demo2 {
    public int getSum(int a,int b) {
        a=100;
        b=200;
        return a + b;
    }
}

class Student2{
    String name;
    public void speak(){
        System.out.println("我热爱学习");
    }
}

class StudentTest2{
    /**
     * 如果将来你看到一个方法的形式参数是一个类的类型,说明他是一个引用数据类型
     * 这里其实需要的是该类的对象
     * 调用的时候,把main方法中创建好的对象名传过来,实际上传的就是对象的地址值
     */
    public void function(Student2 s){ //Student2 s = st3 = new Student2();
        s.name = "小王";
        s.speak();
    }
}


public class XingShiCanShuDemo {
    public static void main(String[] args) {
        Demo2 d = new Demo2();
        int a = 10;
        int b = 20;
        System.out.println(d.getSum(a,b));//方法传入的是常量值,或者是该类型的变量
        System.out.println("a:"+a+",b:"+b);//当形式参数是基本数据类型的时候,在方法中对变量做修改,不会影响到外部实际的栈内存中的值。

        //要想调用function(),就必须创建StudentTest2对象
        StudentTest2 st2 = new StudentTest2();

        Student2 st3 = new Student2();
        System.out.println(st3.name);
        st2.function(st3);//这里实际上传的是地址值;
        System.out.println(st3.name);// 当形式参数是引用数据类型的时候,在方法中对变量做修改,会影响到外部实际的堆内存中的值。
    }
}

三:封装

1、概述:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式(提供方法)。

2、优点:隐藏实现细节,提供公共的访问方式 提高了代码的复用性 提高安全性。

3、private关键字:是一个权限修饰符;

                               可以修饰成员(成员变量和成员方法);

                               被private修饰的成员只在本类中才能访问,相当于在main方法中被隐藏了。

     private最常见的应用:把成员变量用private修饰;提供对应的 获取值方法:getXxx() ;赋值方法:setXxx()

例:标准类1.0  用private修饰变量   getXXX/setXXX :快捷键alt+insert然后选取方法    show():用来打印所有变量的值的方法

public class Teacher {
    //定义成员变量
    private String name;
    private int age;

    //提供公共的getXxx()和setXxx()方法
    public void setName(String s) {
        name = s;
    }

    public String getName() {
        return name;
    }

    public void setAge(int a) {
        age = a;
    }

    public int getAge(){
        return age;
    }

    //提供一个方法打印所有的成员变量值
    public void show() {
        System.out.println("姓名:" + name + ",年龄:" + age);
    }
}

class TeacherTest{
    public static void main(String[] args){
        //创建一个老师对象
        Teacher t1 = new Teacher();
        //使用成员变量
        //不能直接获取,因为它们都被private修饰了
        //通过公共的方法来获取成员变量
        System.out.println(t1.getName()+"---"+t1.getAge());

        //给成员变量赋值
        t1.setName("刘志城");
        t1.setAge(18);
        System.out.println(t1.getName()+"---"+t1.getAge());
        t1.show();

    }
}

4、this:代表的是调用方法的当前对象

标准类2.0   在setXXX方法中用this.变量代表成员变量;快捷键alt+insert然后选取方法,可以快速建立get和set方法。

class Doctor {
    private String name;//成员变量
    public void setName(String name) {//用name是为了更好的赋值,使用方法更方便。
        this.name = name;//为了区分方法中定义的name和成员变量,this.name代表成员变量。
    }
    public String getName() {
        return name;
    }
    
    public void show() {
        System.out.println("姓名:" + name );
    }
}

public class DoctorDemo {
    public static void main(String[] args) {
        //创建一个医生对象
        Doctor d = new Doctor();
        d.setName("王宇");
        
        d.show();
    }
}

5、构造方法

 (1)定义格式

                               类名(..){

                              }

(2)作用:new对象调用的是无参构造方法创建对象,之前没有构造方法是因为系统默认自动创建无参构造方法,如果有了构造方法,无参或有参,系统都不会再创建了

  (3)注意:如果在类中创建了一个带参的构造,没有无参构造,new对象是就要使用有参构造放法了,因为系统不会在创建无参构造方法了。

(4)标准类3.0 :

成员变量:name 、age 他们都是被private修饰
构造方法:无参构造方法,带所有参数的构造方法
成员方法:getXxx()/setXxx(...) 
show():遍历所有的成员变量的值

class Teacher {
    private String name;
    private int age;

    
    Teacher() {  //无参构造方法

    }

    Teacher(String name, int age) {  //有参构造方法
        this.name = name;
        this.age = age;
    }

    //getXxx()
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    //setXxx(...)
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //show()
    public void show() {
        System.out.println(name + "---" + age);
    }
}

public class TeacherDemo {
    public static void main(String[] args) {
        //使用无参构造方法创建对象,使用setXxx() 对成员变量进行赋值
        Teacher t1 = new Teacher();//若上面没有有参和无参,则默认无参构造。
        t1.setName("小王");
        t1.setAge(18);
        t1.show();

        //使用带参数的构造方法创建对象并给成员变量进行赋值
        Teacher t2 = new Teacher("小杨", 18);
        t2.show();
    }
}

6、static

它可以修饰成员变量和成员方法,修饰后可以叫做静态变量或方法

(1)静态变量特点:

                (1)随着类的加载而加载

                (2)优先于对象存在

                (3)被类的所有对象共享(是否使用静态关键字的条件)

                          例 :中国人国籍都是中国,static可以修饰成员变量国籍,而国籍则可以被所有对象所共享

                (4)可以通过类名调用:类名.静态成员  或者  对象名.静态成员

(2)注意事项:

在静态方法中是没有this关键字的,不能修饰构造方法。

静态方法只能访问静态的成员变量和静态的成员方法,非静态方法则都可以访问

(3)静态变量和成员变量的区别

所属不同 :静态变量属于类,所以也称为为类变量                                              成员变量属于对象,所以也称为实例变量(对象变量)

内存中位置不同: 静态变量存储于方法区的静态区                                              成员变量存储于堆内存

内存出现时间不同 :静态变量随着类的加载而加载,随着类的消失而消失          成员变量随着对象的创建而存在,随着对象的消失而消失

调用不同 :静态变量可以通过类名调用,也可以通过对象调用                            成员变量只能通过对象名调用

(4)main方法的格式讲解:
    public static void main(String[] args){....}

    public: 公共的,访问权限是最大的,因为main是由JVM调用的,所以权限要足够大
    static: 静态的,不需要创建对象,通过类名直接调用,方便JVM访问
    void: 表示无返回值,因为我们直接说过返回值,是返回给调用者的,而调用main方法是由JVM调用的,返回给他没有意义

四:制作工具类帮助文档

1、制作工具类:ArrayTools.java


/**
 * 这是针对数组相关操作的工具类
 * @author 小虎
 * @version V.1.0
 *
 */
public class ArrayTool {
    /**
     * 这是私有的无参构造方法
     */
    private ArrayTool(){

    }


    /**
     * 这是遍历数组的方法,遍历后的格式是[元素1,元素2,元素3...]
     * @param array 这是调用该方法时需要传入的参数,数据类型是int类型的数组
     */
    public static void printArray(int[] array){
        for(int i=0;i<array.length;i++){
            if(i==array.length-1){
                System.out.print(array[i]+"]");
            }else if(i==0){
                System.out.print("["+array[i]+",");
            }else {
                System.out.print(array[i]+",");
            }
        }
        System.out.println();
    }

    /**
     * 这是数组逆序的方法
     * @param array 这是调用该方法时需要传入的参数,传入的数据类型是int类型的数组
     * @return 返回逆序后的数组
     */
    public static int[] niXu(int[] array){
        for(int start=0,end=array.length-1;start<=end;start++,end--){
            int temp = array[start];
            array[start] = array[end];
            array[end] = temp;
        }
        return array;
    }
}

2、找到ArrayTools.java文件,编码改成如下所示:

 3、新建一个文件夹(随便哪里),复制目录,在ArrayTools.java目录下打开cmd;输入javadoc -d 目录 -author -version ArrayTool.java

      文件中就会出现帮助文档,打开index.html,根据上面代码给出的注释,会出来每个方法的作用,能让其他更方便的使用它。

七:代码块

1、概念:

                    在Java中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为

                    局部代码块,构造代码块,静态代码块,同步代码块(多线程在说)。

2、分类:

 (1)局部代码块:在方法中出现,限定变量的生命周期,及早释放,提高内存的利用;

                               在同一个类中的同一个方法中,如果存在多个局部代码块,执行顺序是自上而下的。


(2)构造代码块:(在创建对象的时候调用)
                                定义在类中方法外。当一个类中既存在构造代码块也存在构造方法的时候,无论类中有多少个构造代码块,构造代码块之间会先                                  进行自上而下的顺序执行,然后再执行构造方法。
                                构造代码块 -- >构造方法


(3)静态代码块: 在类中方法外定义,并加上static修饰。静态代码块是优先于其他代码块之前执行,在执行时只执行一次

3、执行顺序 :     

                         静态代码块 -- 局部代码块 -- 构造代码块 -- 构造方法

public class CodeDemo {

    static{      //静态代码块
        int a = 22;
        System.out.println(22);
    }

    CodeDemo(){      //构造方法
        int y = 300;
        System.out.println(y);
    }

    {             //定义在类中方法外,使用大括号括起来的代码,称之为构造代码块
        int x = 200;
        System.out.println(x);
    }

    static {  //静态代码块
        int a = 11;
        System.out.println(a);
    }

    public static void main(String[] args) {

        {           //局部代码块
            int x = 10;
            System.out.println(x);
        }
        CodeDemo codeDemo = new CodeDemo();

    }
}
//结果为  22  11  10  200  300
class Student2{
    static {
        System.out.println("这是在Student2类中静态代码块");  // 1
    }
    {
        System.out.println("这是在Student2类中的构造代码块"); // 2
    }
    Student2(){
        System.out.println("这是Student2类中的无参构造方法");// 3
    }
}


public class CodeTest {
    static {
        System.out.println("这是在CodeTest类中的静态代码块"); // 4
    }

    public static void main(String[] args) {
        System.out.println("开始执行main方法"); // 5
        {
            System.out.println("这是在CodeTest中的局部代码块"); // 6
        }
        Student2 student2 = new Student2();
    }
}
//结果 4 5 6 1 2 3

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值