1.今日导师双选,排名靠前但被拒三次、意难平。
2.简历还在投递中,面试时更注重本科项目经历。
3.研究生阶段,计算机学术?代码能力?哪个重要?
4.循环《可能否》,期待变强。。。
一、简介
使用面向对象的思想进行程序设计和开发,并不会简化代码,只会使代码量变多,但是该思想更接近现实逻辑。
java是一门面向对象的语言,面向对象是指当我们需要做某一件事情的时候,不应该想着自己如何做,那叫面向过程(C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题),第一想法是找会做件事情的人来完成,这就叫做面向对象。
面向对象注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来,更适合合作者开发。
面向过程: 1.把冰箱打开 2. 把东西放入 3. 冰箱关起来
面向对象: 打开冰箱,储存,关闭都是对冰箱的操作,是冰箱被动的行为。冰箱就是一个对象,所以只要操作冰箱所具备的功能,都要定义在冰箱中(即类)。
二、类与对象的理解
类
**类就是一类对象的统称。对象就是这一类具体化的一个实例。**类可以比喻为一个一个的模板,里面可能会含有许多属性或者功能。而按照模板实例化产生的叫对象。一个模板能够实例化多个对象。
对象
类的定义(c的结构体相似)
内存布局
注意
1)new 关键字用于创建一个对象的实例。 其中这个对象实例又叫属性或成员变量或字段。
2) 使用 . 来访问对象中的属性和方法。
3)同一个类可以创建多个实例。
类的成员
**类的成员可以包含以下:字段、方法、代码块、内部类和接口等。**此处重点介绍前面三个。
字段/属性/成员变量
在类中、而方法外部定义的变量称为 “字段” 或 “属性” 或 “成员变量”(三种称呼都可以, 一般不会严格区分)
null 在 Java 中为 “空引用”, 表示不引用任何对象. 类似于 C 语言中的空指针. 如果对 null 进行 . 操作就会引发异常。
因此,字段就地初始化:
public class Person {
String name = "张三";
int age = 18;
}
class Test {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);
System.out.println(person.age);
}
}
// 执行结果
张三
18
方法 (c语言是不能在结构体中定义函数的)
用于描述一个对象的具体行为叫做方法。
public class Person {
int age = 18;
String name = "张三";
public void show() { //show方法
System.out.println("我叫" + name + ", 今年" + age + "岁");
}
}
class Test {
public static void main(String[] args) {
Person person = new Person();
person.show();
}
}
// 执行结果
我叫张三, 今年18岁
构造方法
构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作。
- new 执行过程:
1)为对象分配内存空间
2)调用对象的构造方法
- 语法规则:
1)方法名称必须与类名称相同。
2)构造方法没有返回值类型声明。
3) 每一个类中一定至少存在一个构造方法(如果没有明确定义,则系统自动生成一个无参构造方法)
- 注意事项:
1)如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造函数
2)若类中定义了构造方法,则默认的无参构造将不再生成,如果再需要调用无参的构造方法则需要手动写一个。
3)构造方法支持重载,规则和普通方法的重载一致。(对返回值不作要求,方法名相同,参数不同可包括参数个数不同或参数类型不同)
- 示例
class Person{
private double age;
private String name;
public Person(){
System.out.println("这是一个无参的构造方法");
}
public Person(double age, String name){
this.age = age;
this.name = name;
System.out.println("这是一个有参的构造方法");
}
public void show(){
System.out.println("name: "+name+" age: "+age);
}
}
public class Main{
public static void main(String[] args){
Person person1 = new Person();
Person person2 = new Person(13, "张三");
person2.show();
}
}
// 结果为:
// 这是一个无参的构造方法
// 这是一个有参的构造方法
// name:张三 age:13
构造方法不仅仅可以构造对象,同时也可以帮助我们进行成员变量的初始化
上述代码里面的构造方法其实构成了重载(方法名相同、参数列表不同、返回值不做要求)
代码块
- 分类
根据代码块定义的位置以及关键字,又可分为以下四种:
1)普通代码块(又叫本地代码块,了解);2) 构造代码块;3) 静态代码块;4)同步代码块(后续讲解多线程部分再谈)
普通代码块:定义在方法中的代码块。
构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。
静态代码块:使用static定义的代码块。一般用于初始化静态成员属性。
- 实例代码
class Person{
private double age;
private String name;
public Person(){
System.out.println("这是一个无参的构造方法");
}
// 实例代码块
{
this.name = "Yb";
this.age = 15;
System.out.println("构造代码块");
}
// 静态代码块
static{
// 不能用 this
// this.age = 15; 会报错
System.out.println("静态代码块");
}
}
public class Main{
public static void main(String[] args){
Person person1 = new Person();
Person person2 = new Person();
}
}
// 结果为:
/**
静态代码块
构造代码块
这是一个无参的构造函数
实例代码块
这是一个无参的构造函数
*/
代码块中的重点是主要了解实例代码块、静态代码块、构造方法的运行顺序。总结:先运行的是静态代码块,再运行实例代码块(构造代码块),最后运行构造方法。静态代码块内的只运行一次。