[ 面向对象前的准备篇 ] 基于B站韩顺平老师零基础Java教程的学习笔记2

文章详细介绍了Java中类与对象的概念,包括内存分配机制,如栈、堆和方法区的作用。讨论了对象创建流程,成员方法的使用,特别是方法重载和返回值的处理。此外,还涉及作用域规则、构造器的细节,如this的使用,以及IDEAIDE的一些常用功能和快捷键。文章最后提到了Java包的管理和访问修饰符的重要作用。

类与对象

  • 类的本质其实就是自定义的数据类型
  • 对象就是一个类具体的实例
new Cat();//创建一只猫(猫对象)
Cat cat1 = new Cat();//把cat1赋值给Cat类    
  • 在上面这个语句,cat1是对象名称,真正创建的对象空间(数据)
    【new Cat()】才是真正的对象,也就是这一部分在内存的堆中
  • 只声明的话,其实堆的内存是没有分配的

类和对象的内存分配机制

  • Java内存的结构分析:
  • 栈:一般存放基本数据类型(局部变量)
  • 堆:存放对象(Cat cat,数组等)
  • 方法区:常量池(常量,比如字符串)类加载信息

Java创建对象的简单流程分析

  • 程序开始会在方法区创建一个类的类型模板,new调用在堆上开辟模板大小的一片空间,执行属性初始化,然后调用构造器进行初始化,
  • 先加载类的信息(属性和方法信息,且只会加载一次)
  • 在堆中分配空间,进行默认初始化(new的东西都会放进堆里?)
  • 把地址赋给哪个对象,就会指向这个对象
  • 进行指定初始化

成员方法的使用细节

  • 一个方法有且只有一个返回值,那么想要返回多个结果,就可以使用数组
    eg:
public int getsumandsub(int n1,int n2)  
{  
	int result[] = new int[2];  
result[0] = n1 + n2;  
result[1] = n1 - n2;  
return result[];   
}    
  • 返回类型可以是任意类型,包含基本数据类型和引用数据类型(数组,对象)
  • 如果方法要求有返回数据类型那么就必须有return语句
  • 如果是void方法,那么方法体中可以没有return语句,但也可以只写return,但不能有返回值
  • 方法定义时的参数是形式参数,方法调用的时候是实际参数。形参和实参的类型必须兼容,个数和顺序也必须一致
  • 方法体里面不能再次定义方法,也即方法不能嵌套定义
  • 同一个类中的方法可以直接调用
  • 如果想要跨类使用方法,需要通过对象名调用,那么这时就要先创建那个类的对象再调用(以及跨类的方法调用和方法的修饰符有关)
  • 参数传递的时候,形参的任何改变都不会影响实参,基本数据类型的话传递的其实是值的拷贝
  • 引用类型传递的是地址(传递的也是值,但是值是地址)[此处指的是数组,对象,因为都是地址]所以可以通过形参影响到实参

方法重载

  • 定义:Java允许同一个类有名字一样的方法,但是要求必须形参列表不同
  • 好处:减轻了起名和记名的麻烦
  • 易错点:只要方法名一样,参数列表不同就行,即使返回类型不同也可以

作用域(外部无法访问内部,但内部可以访问外部)

  • 局部变量指的是成员方法中定义的变量,用于本类或者被其他类调用(对象调用)
  • 全局变量也就是属性(成员变量)[定义在类中,方法外],作用域是整个类,本类中的方法可以直接用,且在定义时可以直接赋值
  • 全局变量可以不赋值直接使用,因为有默认值,局部变量只有赋值后才能使用,因为没有默认值(局部变量需要初始化)
  • 属性和局部变量可以重名,访问时遵循就近原则
  • 属性的生命周期较长(随着对象的销毁而销毁),局部变量的生命周期较短(随着代码块的销毁而销毁)

构造方法(构造器)

  • 定义:是类的一种特殊方法,用来完成对新对象的初始化
  • 意义:创建多个对象的时候可以直接在()里对属性赋值(直接通过构造器初始化对象)减少重复操作
  • 构造方法没有返回值这一点很重要,也不能写void
  • 方法名必须和类名一致
  • 创建对象时,系统会自动调用这个类的构造器完成对对象的初始化(也就是当你使用new的时候就是调用构造器的时候)
构造器的细节
  • 一个类可以定义多个构造器,也就是构造器的重载
  • 构造器是完成对象的初始化,并不是创建对象,也就是空间其实已经创建好了只是用构造方法去初始化
  • 如果没有定义构造方法,那么系统会默认构造一个无参构造器
  • 一旦定义了自己的构造器,默认的构造器就会被覆盖,除非显式地定义一下(就是定义了有参 再调用的时候就必须输入参数 否则无法使用,所以最好顺手写个无参构造)
    eg:
		Dog dog1 = new Dog();//这就是无参构造,括号里没有参数  
		Dog dog2 = new Dog("xiugou");//这就是自己定义的构造方法了  
		public Dog(String dname)  
{  
		name = pname;  
}  

this

  • this就是指向当前实例对象的引用(那个对象调用,this就代表哪个对象)
    this.name就是当前对象的属性name
    this.age就是当前对象的属性age
    (当前对象:当你创建了构造器,谁在调用这个构造器,那么当前对象就是谁)
  • 所以可以把this当成一个隐藏的属性,这个属性存放的是类本身的地址
    ###this的细节
  • 在同一个类中的一个方法调用其他的方法有两种调用方式:
    1.直接调用
    2.this.方法名)//和继承相关(this可以精准定位到属性,不会被局部变量(方法中定义的变量)影响)
  • 可以在构造器中访问另一个构造器,(只能在构造方法中使用)比如在无参构造器中访问另一个有参构造方法,并且访问构造器的语法:this(参数列表) 必须放在第一条语句!!
  • this只能在本类中使用,不能在类外面使用

IDEA的使用

  • 项目所在的目录即为项目目录包含:.idea,out(.class),src(.java),.iml文件
  • 项目目录中,其源码(.java)都放在src文件下,所以class类也要在src右键创建
  • 当运行代码后,会在路径中出现一个out文件,这里面存放的是代码中的类,也就是编译后的.class
  • 快捷键:
    ctrl+D 删除这一行
    alt+/ 自动补全代码(名称)
    ctrl+/ 选中的都注释
    alt+enter自动导包(比如until.Scanner)
    ctrl+alt+L 格式化代码
    alt+R运行代码
    alt+F10(insert)自主生成构造器
    ctrl+H 查看类的层级关系(父类子类什么的)
    把光标放在一个方法上,ctrl+B可以查看父类
    快捷键自动分配变量名(alt+enter,或者加.var然后回车)
IDEA中的模板(不熟悉代码前不建议使用)

高效开发提升速度,举例:main,psvm,sout,fori(for循环)
File -> settings -> editor -> Live template(自定义模板)
tips:模板在非公有类中无法使用

Java包

类是文件,包是文件夹,类在包里,文件在文件夹里
一个类中只能有一个package,且必须写在最前面

作用:
  • 区分相同名字的类
  • 当类有很多时,方便管理
  • 控制访问范围
基本语法:
  • package com.hnust
  • package是关键字,表示打包
  • com.hnust 表示包名(一般是公司的域名反过来)
  • 命名规范:一般是com.公司名称.项目名称.业务模块名
    eg:com.sina.crm.user//用户模块
  • 引入包流程:import 包; //将整个包都引入eg:import java.util.*;
  • 使用包下某个类:import 包.类名//eg:import java.util.Scanner;
    建议是用哪个类导入哪个
建包流程:
  • src -> new -> package->输入包名(注意格式eg:com.zpy)
  • 以上完成后,项目目录中的src下会出现一个com文件夹,com文件夹中又会有一个zpy文件夹
  • 可以理解为com是一级目录,点.后面的是二级目录
常用的包
  • java.lang.* //基本包,默认导入
  • java.util.* //工具包
  • java.net.* //网络包,网络开发用
  • java.awt.* //java的界面开发,GUI

访问修饰符

  • Java提供了四种访问控制修饰符号,用于控制方法和属性的访问权限
  • public,对外公开
  • proteced,对子类和同一个包中的类公开
  • 默认,对同一个包的类公开
  • private,只有类本身可以访问,不对外公开
  • tips:只有public和默认才能修饰类并且遵循以上访问权限
访问级别访问控制修饰符本类同包子类不同包
公开public
受保护protected×
默认××
私有private×××
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值