2024年最全面向对象--Java核心内容_面向对像内容,2024年最新C C++面试问项目难点

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

假设这个大框是内存的一块区域,

class Test{
    public static void main(String args[]){

//reference

Human zhangsan=new Human();
        Human lisi=new Human();

}

Human(),类名加括号(函数/方法)就叫做构造函数

构造函数的用法 Constructor

当我们给Java编译器一个类文件时,编译器会首先检查这个类文件里有没有写构造函数,如果一个构造函数都没有写的话, 编译器会自动的给类文件添加上一个参数列表为空,方法体也为空的构造函数

//constructor

//这样的一个函数,就叫做参数列表为空,方法体也为空的函数

//注意method 会有一个返回值类型,如果没有返回值的话, 会用到void

//构造函数的函数名必须要和类名一致,大小写也要一致

public Human(){

}

//。3

区分method 和 constructor

//构造函数,带参数的目的,就一个:给这些属性附上初始值

public Human(String name1,int age1,double h1,double w1){

name=name1;//name表示属性,name1表示参数

age=age1;

height =h1;

weight=w1;

}

在入口文件中

class Test{
    public static void main(String args[]){

//reference ,想要给类文件中的属性赋值时,需要挨个的用**“对象名.”**

Human zhangsan=new Human();
       zhangsan.name=“zs”;

zhangsan.age=20;

zhangsan.height=178.0

zhangsan.weight=140.0;

然而以下两行代码和上面的五行代码是完全可以替代,且一致的。

//将参数直接放到括号里就好了

Human lisi=new Human(“lisi”,18,180.0,160.0);

其实都是因为在构造函数中,封装好了赋值语句,所以就好用了

如果参数和属性的名字一致,该怎么区分呢?—使用this. 关键字,

//如何区分参数中的name,和属性中的name,使用this. 关键字

public Human(String name,int age,double height,double weight){

//带this.的是这个属性,不带this.的是constructor里的参数

this. name=name;

this.age=age;

this. height =height;

this. weight=weight;

}

如果有一万个属性,只需要用带一句带参数的构造函数,或者就是用一万句的赋值语句

如果发现之后对代码进行更新迭代,需要多添加一个属性,例如一年后,我需要添加一个新的属性,比如gender 性别

class Human{
	String name;
	int age;
	double height;
	double weight;
	String gender;
	
	//constructor
	public Human(){
		
		
	}
	 
	 public Human(String name,int age,double height, double weight, String gender){
		 this.name=name;
		 this.age=age;
		 this.height=height;
		 this.weight=weight;
		 this.gender=gender;
		 
		 
	 }

}
class Test{
	public static void main(String args[]) {
		Human zhangsan=new Human();
		zhangsan.name="zs";
		zhangsan.age=20;
		zhangsan.height=178.0;
		zhangsan.weight=140.0;
		Human lisi=new Human("lisi",18,180.0,160.0);	
	}
}

在类文件中添加了之后,而我原先的代码,在已经调用过本来定义好的代码时,运行就会出错。

如果我已经使用了成千上万,好多次了,如果每个调用过的代码中都加上这个参数,是不太可能每个都重新加上的。所以对于历史已经使用过的代码是不要动的,否则会出现很多问题。

所以在源代码的基础上,直接添加一下,

this.() 调用本来中的其他函数
 public Human(String name,int age,double height, double weight, String gender){
		 this(name,age,height,weight);
		 this.gender=gender;
		 		 
	 }

this. ,指的是调用了某个方法的对象/使用了某个方法的对象

this.+属性,也可this.+方法

//this. 调用了这个方法的某个对象
	int doAddition(int a,int b,int c){
		return this.doAddition(a,b)+c;
	}

两个用法:在构造器中,生成的函数是谁,这个结果就是谁;

在普通函数或者说是method中使用,指的是调用了那个方法的这个对象。–表示的是引用的对象是谁,结果就是谁。

Reference

class Test{
	public static void main(String args[]) {
		//zhangsan这个名字叫做reference,指的是对象放在内存的哪个地方
		Human zhangsan=new Human();
		zhangsan.name="zs";
		zhangsan.age=20;
		zhangsan.height=178.0;
		zhangsan.weight=140.0;
		
System.out.println(lisi.gender);
		//用new关键字,调用了构造函数,生成了对象
		//但是wang右侧并没有调用构造函数,(只有引用没有对象)叫做空引用--Null Reference
		Human wang;
		//(只有对象,没有引用)匿名对象--anonymous object
        new Human();
		//匿名对象的出现只是想临时的做一下,不需要总是做,通过这样的匿名对象能够使用一次后,被垃圾回收机给收掉
		new Human().doAddition(1,2);


		//因为lisi这个reference的所有的值都指向了wang,所以lisi里的值发生改变的时候,wang也会对应改变
        //但是如果一个对象没有被引用的话, 这个就会被作为垃圾删除掉。
        //而一个对象,也可以被引用无数次
		Human lisi=new Human("lisi",18,180.0,160.0,"male");
		Human wang=lisi;
		
	}
}

对于一个对象来说,最多可以有多少个引用呢—是没有上限的。

但是当一个对象一个引用都没有的时候,就会变成垃圾

方法的重载,overload a method

指的是方法名一样,但是参数列表是不一样的,这种写法叫做overload

int doAddition(int a,int b){
		int result=a+b;
		return result;
	}
	int doAddition(int a,int b,int c){
		return a+b+c;
	}
double doAddition(double a,double b,double c){
		return a+b+c;
	}

参数列表不一样,可以分为数据类型不一样,和参数类型的个数不一样。

注意:一旦方法名一样,那参数列表必然要不一样。

所以overload不是指的具体的某个代码,而是一种关系。

Private

private指的是这个变量只能在本类中来使用

代码演示:

//在类文件中, 把这几个属性设置为私有的,这样能够他们的作用域仅限于本类所书写的大括号里

    //在类文件中, 把这几个属性设置为私有的,这样能够他们的作用域仅限于本类所书写的大括号里
    private String name;
	private int age;
	private double height;
	double weight;
	String gender;


//对应的调用数据
Human lisi=new Human();
		lisi.name=("lisi");
		lisi.age=18;

用javac进行运行发现结果是

只有在本类的书写的大括号中,使用:1,可以看这个值是多少。2,改变这个值

如果一个类中所有的属性都是私有的,并且没有带有参数的构造函数,然而内存却已经构造好了一个默认的构造器导致的结果很尴尬,就是在类的外部的Test,无法对其进行查看或者修改(read and write)。

用带有参数的构造函数,对其进行赋值。

accessor(访问器)/getter(得到器) and modifier(修改器)/setter(设置器)

假设一个人出生,什么都没改变,只有年龄在发生改变。

在类文件中,这样书写,就可以成功访问上面设置好的私有的变量了。

private int age;
//setter or modifier---用于修改
	public void setAge(int age){
		this.age=age;
	}
//getter or accessor--用于查看
    public int getAge(){
    return age;
}

public 指的是在任何一个地方,都可以去使用,如果是一个方法, 就可以调用,如果是一个属性就可以读或者写。----在Java中是最高权限

Private 和public刚好相反,对应的也是最小的,最低权限。在这期间,也会有很多其他的权限,在这其中,介绍一下default。

就是我们平时写的前面什么都不加的,default 指的是,和当前所属类在同一个文件夹的文件是可以同时使用 的,即为文件所在的同一个目录下。

public >default>private

Primitive type & Reference type

上面的zhangsan ,lisi  ,就是 Reference tyoe–所有含有一个类的都叫做引用数据类型

int a=10;

double b=3.0;

char c=‘z’;

boolean d=true;

a和b,就是Primitive type(基本数据类型)—没有在内存开辟区域作为整个对象。

区分方式: 如果变量的数据类型是以小写的字母开头,那一定是一个基本数据类型;如果是大写的数据类型,一定是引用数据类型。在Java语言中,但凡是引用,都是大写字母开头。String就是典型的引用数据类型,

String a=“123”;

甲骨文这个公司,是java的开发公司,

我们下载的JDK包含了一个java的编译器,还有一个工具类,class String,其中会有各种各样的方法,来提供使用.

基本数据类型传递的是值,引用传递的是地址信息,

引用和传递的是t和lisi的值,不管类文件中怎么操作,结果都不会发生任何改变

//a是基本数据类型,b是引用数据类型
	//基本数据类型,传递的是值,而引用数据类型,传递的是一个引用
	public void makeChange(int a,int b){
		a=a+1;
		b=null;
	}
	
        int t=10;
		Human zhangsan=new Human("zhangsan",18,180.0,140.0);
		Human lisi=new Human("ls",18,180.0,140.0);
		lisi.makeChange(t,lisi);
		
		System.out.println(t);
		System.out.println(lisi.getAge());

Another way to control the program procedure other than “continue” and “break”: “return”

添加一个behavior

public void testLoop(int num){
		for(int i=0;i<100;i++){
			System.out.println();
		}
	}

在编译文件中

zhangsan.testLoop(17);

可以看到运行结果正常,输出结果为0-99

再添加两句话

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

添加一个behavior

public void testLoop(int num){
		for(int i=0;i<100;i++){
			System.out.println();
		}
	}

在编译文件中

zhangsan.testLoop(17);

可以看到运行结果正常,输出结果为0-99

再添加两句话

[外链图片转存中…(img-8Gnbx6bS-1715619354031)]
[外链图片转存中…(img-xy5lqZCG-1715619354031)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值