2024年最新Java面向对象(适合零基础小白入门教程9)_java面向对象教程(1),2024年最新2024网络安全研发必问高级面试题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

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

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

需要这份系统化资料的朋友,可以点击这里获取

C:对象和对象之间的关系。
继承关系,聚合关系,关联关系。。。

类的堆砌。

### **二、类和对象**


#### **2.1、类和对象**


![](https://img-blog.csdnimg.cn/73a96286b6cc496d9627dc45da3b926a.png)



类:其实指的就是类别。对同一类事物的统称。对这类事物进行描述,—>创建class
就是一个抽象的概念。
对象:
类中的一个具体的实例,客观存在的,能用。个体。


如何定义一个类?


* 要有能够描述这一类别的外部特征——我们叫做属性(静态属性)  
 变量就可以。(名词)
* 要有能够描述这一类别的行为功能——我们叫做方法(动态属性)  
 方法就可以。(动词)


#### **2.2、Java中定义类的格式**



/*
class ClassName{//类名首字母大写
//属性描述:外部特征
//行为描述:能够干啥
}
*/
要求:
1、CLassName要求符合驼峰命名法,首字母大写,见名知意。
2、属性描述:外部特征,用于描述这个类别的一些特征,而这些特征通过一个"词"来描述清楚,比如姓名,年龄。使用变量来表示。——【成员变量】Field,词义"字段"
3、行为描述:能够干啥,用于描述这个类别的一些行为功能,而这些行为功能,是一个动作行为,比如吃饭,睡觉。使用方法来表示。——【成员方法】Method,词义"方法"
不要加static。


方法:就是一段具有独立功能的代码。


#### **2.2.1 step1声明类**



public class Person{//类的名字

}


#### **2.2.2 step2声明类中的【成员变量】**



public class Person {
//step2:成员变量
String name;//使用String类型的变量name,表示人类中的姓名

int age;//使用int类型的变量age,表示人类中的年龄

char sex;//使用char类型的变量sex,表示人类中的性别

}


#### **2.2.3 step3声明类中的【成员方法】**



public class Person {
//step2:成员变量
String name;//使用String类型的变量name,表示人类中的姓名

int age;//使用int类型的变量age,表示人类中的年龄

char sex;//使用char类型的变量sex,表示人类中的性别

//step3:成员方法
public void eat(){
System.out.println(“吃饭啦。。”);
}

public void sleep(){
System.out.println(“睡觉啦。。”);
}

public void daDouDou(){
System.out.println(“打豆豆。。。”);
}
}


#### **2.3、类的对象**


#### **2.3.1 创建类的对象**


创建对象,也叫做类的实例化。对象,也叫类的实例。



/*
new关键字
new,词义:新的,新建
new 关键字,专门用于新建对象。
/
Scanner sc = new Scanner();//Scanner也是个类,Person也是个类。
int[] arr = new int[5];

语法结构:
/

类名 对象名 = new 类名();
*/
Person p1 = new Person();


step2:根据类,实例化对象


step1:创建类


#### **2.3.2通过对象访问属性**



/*
int[] arr = new int[5];
获取数组的长度:
arr.length
arr的长度
*/
对象访问属性的语法:就是一个.
//给对象的属性,进行赋值
p1.name = “王二狗”;//给p1这个对象的name属性进行赋值
p1.age = 18;
p1.sex = ‘男’;


//获取对象的属性值
System.out.println(“姓名:”+p1.name);
System.out.println(“年龄:”+p1.age);
System.out.println(“性别:”+p1.sex);


#### **2.3.3通过对象访问方法**



/*
Scanner sc = new Scanner();
sc.nextInt();
*/
Scanner,就是一个class,一个类
sc,是根据Scanner创建出来的一个对象

对象调用类中的方法,语法,也是.
对象.方法名();
p1.eat();
p1.sleep();
p1.daDouDou();


#### **2.3 内存分析**


实例代码:



package com.qf.demo01;

public class Test1Person {

public static void main(String[] args) {
//step1:创建Person类的对象
//语法:类名 对象名 = new 类名();

Person p1 = new Person();
System.out.println(p1);//打印p1的值,p1是引用类型,打印都是p1指向的对象的地址。

System.out.println(p1.name);
System.out.println(p1.age);
System.out.println(p1.sex);




/*
 * com.qf.demo01.Person@15db9742
 * 包名.类名@编码值  ---->理解为p1的内存地址。
 * 
 * java中的数据类型:
 *  基本类型:byte,short,char,int,long,bolean,float,double
 *  引用类型:
 *      数组,类类类型
 * 
 */
//step2:通过对象访问属性,语法是.
//给对象的属性,进行赋值
p1.name = "王二狗";//给p1这个对象的name属性进行赋值
p1.age = 18;
p1.sex = '男';


//获取对象的属性值
System.out.println("姓名:"+p1.name);
System.out.println("年龄:"+p1.age);
System.out.println("性别:"+p1.sex);


//step3:通过对象,访问成员方法--->理解为就是对象调用成员方法
p1.eat();
p1.sleep();
p1.daDouDou();

}

}


内存分析图


![](https://img-blog.csdnimg.cn/2e74598d08c249dc882c2f6b889480e4.png)


 示例代码:



package com.qf.demo01;

public class Test2Person {

public static void main(String[] args) {
//1.创建一个Person类的对象
Person p1 = new Person();
System.out.println(p1);//p1的内存地址:com.qf.demo01.Person@15db9742

p1.name = "张三狗";
p1.age = 19;
p1.sex = '男';

System.out.println(p1.name);//张三狗
System.out.println(p1.age);//19
System.out.println(p1.sex);//男
      
//2.再创建一个Person类的对象

Person p2 = new Person();
System.out.println(p2);//p2的内存地址,com.qf.demo01.Person@6d06d69c

p2.name = "李小花";
p2.age = 17;
p2.sex = '女';

System.out.println(p2.name);//李小花
System.out.println(p2.age);//17
System.out.println(p2.sex);//女
  
//3.
Person p3 = null;//仅仅声明了Person类型的对象p3,但是实际上,并没有在堆内存中,创建出真正的对象。

/*
 * NullPointerException,空指针异常
 * 
 * 对象不存在,就是个null,
 *  强行的访问对象的属性或调用方法,就会空指针异常。
 */
//System.out.println("---->"+p3.name);//报错啦:NullPointerException

p3 = p1;//将p1的值(p1对象的内存地址),赋值给p3,结果-->p1和p3存储的是同一个对象的内存地址。

p3.name = "李铁柱";
System.out.println(p1.name);//李铁柱
System.out.println(p2.name);//李小花
System.out.println(p3.name);//李铁柱

Person p4 = new Person();
System.out.println(p4);//?

p4.name = "王二丫";
p4.age = 18;
p4.sex = '女';
System.out.println(p4.name );
System.out.println(p4.age);
System.out.println(p4.sex);

p4 = p1;//改变对象的内存地址了,就不再指向原来的内存对象。
System.out.println(p1.name);
System.out.println(p3.name);
System.out.println(p4.name);

}

}


内存分析图:


![](https://img-blog.csdnimg.cn/ae28a6b9155b4aa6a18c8a4dae0498bd.png)


 


#### **2.5、方法的重载:overload**



概念:一个类中的,一个功能方法的多种体现形式(有不同的方法体)。
举例:
1、人类,有吃的功能:eat()
eat(食物);
eat(药);
eat(口香糖);

2、求和的功能:
        getSum(int i,int j);
        getSum(double d1, double d2);
3、水:
    常温:液态
    0度以下:固态
    100度以上:气态

就是同一个功能的方法,因为参数的不同,调用的具体的方法也不同。
如何判定多个方法是否是重载的?衡量标准,要同时满足以下三条:
A:必须同一个类中。
B:方法名称必须一致。
C:参数列表必须不同。(顺序,个数,类型)

    和static,public,返回值,void等等都没有关系。

优点:
1、简化了开发的压力
2、简化了记忆的压力
3、调用方法更方便,更简洁,又满足了不同的情况

基本原理:
当方法名称一致时,通过形式参数列表的不同来选择要执行的方法。


示例代码:



package com.qf.demo01.overload;

import java.util.Arrays;

/*

  • 方法的重载:
  • 同一个功能:
  • 根据参数的不同,执行的具体的方法也不同
  • 衡量方法是否重载:
  • 1、同一个类中
  • 2、方法名必须一致
  • 3、参数列表必须不同:类型,个数,顺序
    */
    public class Test1 {
    //求两个数的和:

//求两个整数的和
public static void getSum(int i,int j){
int sum = i + j;
System.out.println(i+" + " + j +“的总和是:”+sum);
}

public static void getSum(double d1, double d2){
double sum = d1 + d2;
System.out.println(“总和是:”+sum);
}

public static void getSum(int i,double j){

}

public static void getSum(double d1,int i1){

}

public static void main(String[] args) {
getSum(1, 2);

getSum(3.14, 4.21);

}

}


#### **2.6、构造方法**


构造方法:是一个很特殊的方法。


* 声明的语法:public 类名(){}
	+ 修饰符:只能有访问权限的修饰符,public。不能加static。
	+ 返回值:没有返回值,也不能写void。
	+ 方法名:必须和类名相同
* 调用的方式:new 关键字调用
	+ new关键字后面跟着构造方法即可。
* 作用:专门用于创建对象。


普通方法:一段具有特殊功能的代码。而且可以被多次调用执行。


* 声明的语法:public static void main(String[] args){}
* 调用的方式:方法名(实参);
* 作用:1、避免重复的代码增强程序的可读性。2、提高程序的可维护性。



1、编写java的源代码(给人看):XXX.java
2、将源文件进行编译(机器执行的就是这个字节码文件):XXX.class
javac命令 javac XXX.java
3、JVM执行字节码文件:XXX.class
java命令 java XXX

Java反编译工具:我们现在将class文件,进行反编译,可以看见类似于底层语言
javap -c -l -private XXX.class


#### **2.6.1 Java编译器提供的默认的构造方法**



问题:创建对象的时候,代码:new Person();调用的这个Person()这个方法,在程序中并没有写,哪来的?

试着将Person.class文件进行反编译:


![](https://img-blog.csdnimg.cn/c37be4092caa4deb9497160b22d16d0b.png)


 结论:通过反编译工具,发现了一些和源代码不相符的内容,这就是javac编译器,自动给代码中添加的构造方法。用于创建对象。


java编译器,发现代码中没有任何的构造方法,在编译时,会自动的帮我们添加一个无参的构造方法。


如果代码中自己写了构造方法,那么编译器不再帮我们添加无参的构造方法。


#### **2.6.2 自定义的构造方法**



记住一条:如果一个类中,没有写任何的构造方法,那么编译器自动添加一个无参的构造方法。但是如果你写了构造方法,那么编译器不再添加了。
我们写程序的规则:
无参构造要写
有参构造看实际情况
一个类中可以有多个构造方法的。也是方法的重载。

创建对象的语法:
new 构造方法(可能有参数);

如果添加自己定义的构造方法:
语法规则:
public 类名(){

}
public 类名(参数列表){
将参数的数值,赋值给属性即可。
}


如何创建一个对象?就是通过new这个关键字,调用一个类的构造方法。就创建了对象。


先声明,再调用--->普通方法,还适合构造方法。


### 一、网安学习成长路线图


网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/aa7be04dc8684d7ea43acc0151aebbf1.png)


### 二、网安视频合集


观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f0aeee2eec7a48f4ad7d083932cb095d.png)


### 三、精品网安学习书籍


当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/078ea1d4cda342f496f9276a4cda5fcf.png)


### 四、网络安全源码合集+工具包


光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e54c0bac8f3049928b488dc1e5080fc5.png)


### 五、网络安全面试题


最后就是大家最关心的网络安全面试题板块  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/15c1192cad414044b4dd41f3df44433d.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/b07abbfab1fd4edc800d7db3eabb956e.png)  



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

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

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

中去,这时候可以搞点实战案例来学习。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e54c0bac8f3049928b488dc1e5080fc5.png)


### 五、网络安全面试题


最后就是大家最关心的网络安全面试题板块  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/15c1192cad414044b4dd41f3df44433d.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/b07abbfab1fd4edc800d7db3eabb956e.png)  



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

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值