总结
虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。
架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。
如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。
Java中常见类型的默认值:
数据类型 | 默认值 | 说明 |
byte short int long | 0 | 整型0 |
float double | 0.0 | 浮点0 |
char | ' ' | 空格字符 |
boolean | false | 逻辑假 |
引用类型 | null | 空值 |
2.2 成员方法
成员方法对应类对象的行为,主要用来定义可执行的操作。
成员方法的定义,语法格式:
访问修饰符 返回值类型 方法名(参数列表){
//方法体
return 返回值;
}
访问修饰符可以是public private protected 任意一个也可以不写,主要用来控制方法的访问权限
访问修饰符:
public | protected | default(省缺) | private | |
本类 | 可见 | 可见 | 可见 | 可见 |
本类所在包 | 可见 | 可见 | 可见 | 不可见 |
其他包中的子类 | 可见 | 可见 | 不可见 | 不可见 |
其他包中的非子类 | 可见 | 不可见 | 不可见 | 不可见 |
说明: 方法的定义必须在某个类中,定义方法时如果没有指定权限修饰符,方法的默认访问权限为省缺。
例:
public void SetStudent(int age,String name){
System.out.println(age+name);
}
因为是void类型所以无返回值,如果有返回值,返回值类型必须与方法的返回值类型一致。
2.3 构造方法
在类中存在一种特殊类型的方法,就是构造方法,构造方法与类同名,对象的创建就是通过构造方法完成的。每当类实例化一个对象时,类都会自动调用构造方法。
构造方法的特点:
· 构造方法没有返回值类型,也不能定义为void
· 构造方法名称要与本类的名称相同
· 构造方法的主要作用是完成对象的初始化工作,它能把定义对象的参数传给对象成员
构造方法的定义语法:
public class Student {
//构造方法
public Student(){
}
}
public 为构造方法的修饰符
如果类中没有明确定义构造方法,则编译器会自动创建一个不带参数的默认构造方法
构造方法可以为成员变量赋值,并且构造方法可以带有参数。例:
public class Student {
int age;
String name;
String gender;
public Student(int age,String name,String gender){ //构造方法
this.age = age;
this.name = name; //赋值
this.gender = gender;
}
}
**注意:**只有在类中没有定义任何构造方法时,编译器才会创建一个默认无参的构造方法
实例:创建一个学生类,用构建方法为成员变量赋值,并输出打印。
public class Student {
int age;
String name;
String gender;
public Student(int age,String name,String gender){
this.age = age;
this.name = name;
this.gender = gender;
}
void printStudent(){
System.out.println(name+“-”+gender+“-”+age);
}
public static void main(String[] args) {
Student s = new Student(20,“XiaoHua”,“女”);
s.printStudent();
}
}
输出结果:
2.4 局部变量
如果在成员方法内定义一个变量,这个变量就被称为局部变量
局部变量在方法执行时被创建,在方法执行结束时被销毁。局部变量在使用时必须初始化,否则会出现编译错误。例:
编译器直接飘红
2.5 this关键字
先看一段代码:
public class Student {
int age;
String name;
String gender;
public Student(int age,String name,String gender){
age = age;
name = name; //哪个是参数,哪个是成员变量呢?
gender = gender;
}
当类中的成员变量与成员方法中的参数重名时,方法如何使用成员变量呢?
在Java中,规定使用this关键字来代表本类对象的引用,this被隐式的用于引用对象的成员变量和方法。将上述代码改进如下:
public Student(int age,String name,String gender){
this.age = age;
this.name = name;
this.gender = gender;
}
· this关键字引用的就是本类的一个对象,在局部变量或方法参数覆盖了成员变量时,如上面代码情况,就要添加this关键字明确引用的是类成员还是局部变量或方法参数。
· 如果省略this关键字直接写成 name = name ,那只是把参数name赋值给参数变量本身而已,成员变量name的值没有改变,因为参数name在方法的作用域中覆盖了成员变量name。
· this关键字除了可以调用成员变量或成员方法之外,还可以作为方法的返回值,例:
public class Book{
public Book getbook(){
return this; //返回Book类引用
}
}
- static关键字
=============
由static 修饰的变量,常量,方法分别称为静态变量,静态常量,静态方法,也被称作类的静态成员。
3.1 静态变量
许多时候不同类之间需要同一个变量进行操作,例如同一个班的学生,学生本身的属性不同,但是所有学生共享一个教室。在Java中如果用static修饰共享的变量,那么该变量就是静态变量。
调用静态变量的语法如下: 类名.静态成员
先看这样的一段代码:
public class Student {
int age;
String name;
String gender;
static String classRoom = “307”;
public Student(int age,String name,String gender){
this.age = age;
this.name = name;
this.gender = gender;
}
void printStudent(){
System.out.println(name+“-”+gender+“-”+age);
}
public static void main(String[] args) {
Student s1 = new Student(20,“XiaoHua”,“女”);
Student s2 = new Student(22,“XiaoFang”,“女”);
Student s3 = new Student(23,“XiaoZhang”,“男”);
Student s4 = new Student(24,“XiaoLi”,“男”);
}
}
在这里打断点:
进行调试:
发现静态成员变量不在具体的对象中存在。
静态成员只有一份,被所有的对象共享,当类被卸载时,静态成员才会被销毁。
静态成员变量访问的方式有两种:通过成员访问和直接通过类名访问,**推荐:**类.静态成员变量
3.2 静态方法
如果想要使用类中的成员方法,需要先将这个类进行实例化,但有些时候不想或者无法创建类的对象时,还要调用类中的方法才能够完成,这种情况下可以使用静态方法,调用静态方法格式如下:
类名.静态方法();
例如这段代码:
public class Student {
int age;
String name;
String gender;
static String classRoom = “307”;
public Student(int age,String name,String gender){
this.age = age;
this.name = name;
this.gender = gender;
}
public static String getClassRoom(){ //静态成员方法
return classRoom;
}
public static void main(String[] args) {
System.out.println(Student.getClassRoom());
}
}
利用静态成员方法访问静态成员变量。
**注意:**静态方法不能访问实例变量。
- 代码块
=======
4.1 代码块概念及分类
使用 { } 定义的一段代码称为代码块,根据代码块的位置以及关键字,分为以下四种:
普通代码块,构造代码块,静态代码块,同步代码块(暂时不谈)
4.2 普通代码块
普通代码块:定义在方法中的代码块。
public static void main(String[] args) {
int a = 10;
System.out.println(a);
}
4.3 构造代码块
构造块:定义在类中的代码块(无任何修饰符),也叫实例代码块,一般用于初始化实例成员变量
public class Student {
int age;
String name;
String gender;
public Student(){
System.out.println(“我是构造方法”);
}
//实例代码块
{
this.age = 20;
this.name = “XiaoHe”;
this.gender = “男”;
}
public void printStudent(){
System.out.println(name+gender+age);
}
public static void main(String[] args) {
Student s = new Student();
总结
三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。
- 第一个是算法
关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。
而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本
《算法刷题LeetCode中文版》总共有15个章节:编程技巧、线性表、字符串、栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题
《算法的乐趣》共有23个章节:
- 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)
基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)
- 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)
mg-fUnKRRZl-1715339385103)]
《算法的乐趣》共有23个章节:
[外链图片转存中…(img-ecusuJr4-1715339385103)]
[外链图片转存中…(img-LkQV2RL8-1715339385104)]
- 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)
基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)
[外链图片转存中…(img-myi8ViBQ-1715339385104)]
- 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)
[外链图片转存中…(img-8eydva1t-1715339385104)]