Java:类和对象

17 篇文章 0 订阅

1、类的描述

//类名用大驼峰
class Person{
	//属性  字段  成员变量
	//定义在类当中,方法外部
	//普通成员变量
	public String name;
	//静态成员变量
	public static int age = 10;
	//普通成员方法
	public void sleep();
	//静态成员方法
	public static void staticMethod(){
	}
}

Java中每个类都会产生一个字节码文件

2、类的实例化

Person p1 = new person();

访问成员变量

p1.name = "张三";
p1.sleep();

3、this引用

注意:
1、this只能在成员方法中用
2、静态变量不属于this(静态变量不属于实例化对象,而this本质上是实例化对象)

this的三种应用
(1)访问成员变量
(2)访问成员方法

public class Date{
	public int year;
	public int month;
	public int day;

//形参隐藏了一个date this
	public void setDate(int year,int month,int day){
	this.year = y;
	this.month = m;
	this.day = d;
	}
//局部变量优先,所以this用以区分形参和对象的属性

	public void eat(){
		this.setDate();
	}
}

(3)访问构造方法

public class Student{
	public String name;
	public int age;
	
	public Student(){
		this("李三",23);//调用了有参构造方法
		//只能出现在当前构造方法的第一行
		System.out.println();
	}

	public Student(String name,int age){
		this.name = name;
		this.age = age;
	}
}

4、成员变量初始化

(1)局部变量、成员变量
局部变量没有初始化的情况下,不能应用,否则会报错
而成员变量没有初始化时,有一个默认值。默认值如下

int 0
float 0.0f
boolean false
char '\u0000'
引用变量 null

(2)就地初始化
实例化类时便进行了初始化(不推荐)

public class Date{
	public int year = 1995;
	public int month = 6;
	public int day = 24;
}

(3)构造方法初始化
· 实例化一个对象时,会为对象分配内存和调用合适的构造方法
· 当没有传参时,调用无参数构造方法;当有参数时,调用有参数构造方法
· 如果没有写构造方法,编译器会自动提供一个无参构造方法;如果有构造方法,那么不会提供,需要无参和有参都自己写

public class Student{
	public String name;
	public int age;
	
	public Student(){
		System.out.println();
	}

	public Student(String name,int age){
		this.name = name;
		this.age = age;
	}
	//alt + insert快捷键生成构造方法
}

· 调用类当中其他构造方法

public class Student{
   public String name;
   public int age;
   
   public Student(){
   	this("李三",23);//调用了有参构造方法
   	//只能出现在当前构造方法的第一行
   	System.out.println();
   }

   public Student(String name,int age){
   	this.name = name;
   	this.age = age;
   }
}

5、封装

(1)访问限定符
访问限定符可以修饰类名,接口,方法,成员变量等

范围privatedefaultprotectedpublic
同一包中的同类
同一包中的不同类
不同包中的子类
不同包中的非子类

default的意思是默认
(2)set方法和get方法

public class Student{
	private String name;
	private int age;
	
	public Student(){
		System.out.println();
	}

	public Student(String name,int age){
		this.name = name;
		this.age = age;
	}

	public String getName(){
		return name;
	}

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

(3)包
包是一组类的集合,能防止类的名字冲突
· package定义包

package com.bit.com1;
//在代码最上方,说明该类在哪个包中

· import导入包

//import导入具体包中的类
import java.utils.Arrays;
//import导入包下的所有类,用到这个包底下哪个类就回调用哪个
import java.sql.*;

import不能只导入指定包

import java.utils;//报错

6、static成员

(1)静态成员变量不属于对象(实际上是在方法区存储);this不能调用静态变量

public class Student{
	private String name;
	private int age;
	static String classRoom = '101';
}

实例化对象为null时访问静态变量编译运行也不会报错(但同样不推荐)
(2)通过类名访问对象
静态变量用实例化的对象访问可以编译运行,但静态方法的正确访问方式应该是用过类型来访问

System.out.println(Student.classroom);

(3)静态方法中不能调用非静态的成员变量或者成员方法(非静态方法有this参数传递,而静态方法中没有)
(4)在方法当中定义的变量是局部变量,而静态的变量属于类变量。随着类的加载而被创建,而局部变量是调用该方法的时候,才创建的。
所以,此时两种变量的性质是冲突的。Java当中不允许定义局部的静态变量。

7、代码块

(1)静态代码块
·必须放在类下。与类一起加载执行。并且静态代码块执行一次
· 一般用以初始化静态成员

static {
	classRoom = '101';
}

(2)构造代码块(实例代码块)
· 没有static修饰,必须放在类下。与对象初始化一起加载,即每次调用构造方法都会执行,并且在构造方法前执行。
· 可以用来初始化实例成员

{
	age = '3';
}

(3)局部代码块

public class Test1{
    public static void main(String[] args) {
        //局部代码块
        {
            int n = 100;
        }
        // 局部代码块中声明的变量在代码块外部访问不到!
        // System.out.println(n);
    }
}

(4)执行顺序:静态代码块–>构造代码块–>构造方法

public class Main {
    int a;

    static {
        System.out.println("执行第一个静态代码块");
    }

    {
        System.out.println("执行实例代码块");
    }

    public static void main(String[] args) {
        System.out.println("执行main方法");
        Main m = new Main();
        Main m2 = new Main(2);
    }

    Main(){
        System.out.println("执行无参构造方法");
    }

    Main(int a){
        System.out.println("执行有参构造方法");
        this.a = a;
    }

    static {
        System.out.println("执行第二个静态代码块");
    }
}

最终执行结果如下

执行第一个静态代码块
执行第二个静态代码块
执行main方法
执行实例代码块
执行无参构造方法
执行实例代码块
执行有参构造方法

Process finished with exit code 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沙河板混

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值