java第7天----类的简介

昨天知识点总结

  • 1.二维数组
    • 比较一维数组:对于一维数组如果元素是简单数据类型,我们是将对象的地址放入数组是将对象的地址放入数组,
    • 创建
    • 遍历-----增强for循环
  • 2.作业
  • 3.排序
    • 冒泡排序
    • 选择排序
  • 4.查找
    • 二分法查找-----数组必须有序
    • 普通的查找
  • 5.面对对象的理解
    • 面向对象与面向过程的比较
    • 类与对象的关系:类是对象的抽象,对象是类的实现
    • 类的三要素
    • 创建具体的类和对象

成员变量和局部变量

  • 成员变量和局部变量的区别
    • 1.作用域:成员变量默认是整个对象,局部变量是从定义开始到所在函数,if,for等结束
    • 2.默认值:成员变量有默认值,局部变量没默认值,必须先赋值在使用
    • 3.释放机制:成员变量跟对象保持一致,通过垃圾回收机制回收,局部变量使用完立即释放
    • 4.存放的位置去:成员变量存放在堆区中的对象之中,局部变量存放在栈区中的方法中。
  • static:
    • 我们可以将成员分为两类:1.使用static修饰的-----静态成员 2.未被static修饰的------非静态的成员
    • 静态成员:静态的方法和静态的成员变量---- 可以使用引用或类名调用
    • 非静态的成员:非静态的方法和非静态的成员变量------必须使用引用调用
    • 为什么静态的成员可以通过类名直接调用?
    • 拿到一个Person类后,通过执行javac.exe(编译)-----Person.class(字节码文件)
    • 在执行java.exe(运行)------运行结果
    • 注意我们在使用类名直接调用成员的时候,本质上字节码文件在工作
  • 关于字节码文件:
    • 1.字节码文件本身是一个特殊的对象,区别于普通new出来的对象
    • 2.一个类对应一个字节码文件
    • 当成员被static修饰之后就变成了静态的,会在class生成的同时放在静态方法区中一份,而静态方法区的特点是内容会随着
    • 程序的结束而释放,所以对象的创建与否不能影响它们的调用,所以可以直接使用类名调用
  • 静态成员方法和非静态成员方法优先使用哪一个?
  • 优先使用静态成员方法,因为静态的方法比非静态的效率高,节省内存。
  • 注意:但是有一种情况例外:当方法中必须使用非静态成员变量时候,这时必须使用非静态的方法
  • 总结:被static修饰的成员变量会变成静态的成员变量,成员方法会变成静态的成员方法,
public class demo2 {
	public static void main(String[] args) {
		Person person = new Person();
		//通过引用可以调用非静态的成员,也可以调用静态的成员
		person.name = "bingbing";
		person.age = 10;
		person.weight = 30;
		person.show();
		person.play();
		
		
		//通过类名可以直接调用静态的成员,但是不能调用非静态的成员;
		//Person.age = 10;
		Person.weight = 30;
		Person.play();
	}
}
class Person{
	String name;
	int age;
	static int weight;//静态成员变量
	public void show(){
		System.out.println("show");
	}
	public static void play(){
		System.out.println("piay");
	}
}

static

  • static的作用总结:可以修饰成员变量和成员方法
  • 作用:保值-使成员的存活时间(生命周期)与程序一致
  • 被static修饰的成员变量的特点
    • 1.被当前类的所有对象共享
    • 2.由随着对象的加载而加载变成随着类的加载而加载,变量被放在了静态方法去,执行顺序优先于非静态的成员变量
    • 3.可以使用类名或引用调用
  • 静态的成员变量和非静态的成员变量的区别:
    • 1.存储的数据的使用:非静态的只能供当前的对象使用,静态的供所有对象共享
    • 2.生命周期:非静态的跟对象一致,静态的跟程序一致
    • 3.存储的位置:非静态的:对象中 静态的:静态方法区
    • 4.访问的方式:非静态的:引用 静态的:引用或类名
  • 被static修饰的成员方法的特点
  • 静态的成员方法内部只能使用静态成员变量
  • 非静态的内部既可以使用静态的成员变量,也可以使用非静态的成员变量
	public static void main(String[] args) {
	//总结:所有工具都是使用静态方法,---借省内存,效率高,操作简单方便
		
		//验证静态的成员变量被多个对象共享
		//由于age是static的被多个对象共享,weight是非静态的,只能共当前的对象使用
		Dog.age = 3;
		Dog dog = new Dog();
		dog.weight = 5;
		System.out.println(dog.age+"   "+dog.weight);//3       5
		Dog dog1 = new Dog();
		System.out.println(dog1.age+"   "+dog1.weight);//3    0
	}
class Dog{
	static int age;
	int weight;
	//静态的成员方法内部只能使用静态的成员变量
	//非静态的内部既可以使用静态的成员变量,也可以使用非静态的成员变量
	
	public void test(){
		test1();
		play();
	}
	public void test1(){
		
	}
	public static void test2(){
		
	}
	public static void play() {
		test2();
	}
}

构造方法

  • 调用的时候的构造:类名+()
  • 定义时候的基本构成
  • 修饰词 方法名(参数列表){
  •   方法体
    
  • }
  • 注意点:1.没有返回值这一项 2.方法名必须与类名保持一致
  • 构造方法的作用:对对象的属性进行初始化,如果我们自己不创建,系统会调用默认的构造方法
  • 自己的构造方法的分类:
    • 1.无参的构造方法:与系统默认的构造方法一会,会将成员变量赋值成null或0或false
    • 2.有参的构造方法:会将成员变量先进行初始化,在完成赋值(通过参数传入的值)
  • 创建构造方法的注意点:
    • 1.一旦创建了自己的构造方法,就不会再去调用系统的默认方法
    • 2.多个构造方法之间是重载的关系
  • this:是一个关键字,是一个引用数据类型,保存的是当前对象的地址,代表的是当前的对象;
    *this的功能总结
    • 1.可以用于区分成员变量和局部变量
    • 2.可以在构造方法中调用其他重载的构造方法,提高代码的复用性,简化代码
      *使用this的注意点:
    • 1.在作为方法使用时,只是用于构造方法
    • 2不能自己调用在自己-----造成死循环
    • 3.不能相互调用------ 造成死循环
    • 4.在构造方法中调用其他重组转载的构造方法,必须放置在第一行
    • 5.this不能在静态方法中使用
	public static void main(String[] args) {
		//创建Student类型的对象--后面是一个空参的构造方法,这是系统默认创建的构造方法
		Student student = new Student();
		Student student1 = new Student("bingbing");
		student.name = "zhangsan";
		System.out.println(student1.name);
		//通过三个参数的构造方法创建对象
		Student student2 = new Student("bingbing",40,120);
		System.out.println(student2.height);
	}
class Student{
	String name;
	int age;
	int height;
//创建自己的构造方法
	//无参构造方法
	//一旦我们创建了构造方法,默认的构造方法就会被覆盖,不能发挥作用。
public Student() {
	System.out.println("无参构造方法");
	}
//有参构造方法1
//可以做到对属性进行初始化之后马上完成赋值
//一般要求构造方法的参数的名字与对应属性的名字一致
//这里当成员变量与局部变量一致时,方法中识别的是局部变量,依据的是就近原则
//就近原则是从内存的角度考虑远近
//
public Student(String name,int age) {
	this(name);//这里是在家调用有一个参数的构造方法
	System.out.println("无参构造方法");
	this.age = age;
	}
public Student(String name) {
	this.name = name;//完成对属性赋值
	System.out.println("有参构造方法");
	}
public Student(String name,int age,int height) {
//	this.name = name;//完成对属性赋值
//	this.age = age;//this形成的构造方法的调用必须放在第一行
	this(name,age);//这里是在调用有两个参数的构造方法
	this.height = height;
	System.out.println("有参构造方法");
	}
}

代码块

  • 静态代码块儿:会随着类的加载而加载,在整个程序执行的过程中只执行一次,执行顺序优先于main
  • 构造:static+{}
  • 作用:用于对类进行初始
  • 构造代码块儿:会随着对象的加载而加载,每次创建对象会执行一次,执行顺序优先余构造方法
  • 构成:{}
  • 作用用于对对象进行初始化
  • 整体顺序:静态代码块 优先于 main 优先于 构造代码块 优先于构造方法
/*
*输出循序
* a
* b
* c
* e
* f
* g
* f
* g
* d
*/
public class Demo8 {
	static {
		System.out.println("a");
	}
public static void main(String[] args) {

	System.out.println("c");
	Pig pig = new Pig();
	Pig pig1 = new Pig();
	pig.play();
}
static {
		System.out.println("b");
	}
}
class Pig{
	static {
		System.out.println("e");
	}
	{
		System.out.println("f");
	}
	public void play() {
		System.out.println("d");
	}
	public Pig(){
		System.out.println("g");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值