Java学习笔记(1)

目录

一、java类及类的成员:属性、方法、构造器;代码块、内部类

​编辑

二、面向对象的三大特征:封装性、继承性、多态性 、(抽象性)

三、其他关键字:this、super、static、final、abstract、interface

四、内存解析说明

五、匿名对象的使用

六、重载

七、可变个数形参的方法

八、方法参数的值传递机制

九、封装和隐藏

1、问题引入:

2、封装性的体现

3.封装性的体现需要权限修饰符的配合

十、类的成员之三构造器(构造方法) 前两个是属性和方法

1、构造器的作用:创建对象

十一、属性的赋值顺序:

十二、JavaBean​编辑

十三、this的使用

1.this可以修饰属性和方法:

十四、package 、import的使用

十五、项目二 做一个顾客管理系统 涉及增删改查(放数组里)​编辑


一、java类及类的成员:属性、方法、构造器;代码块、内部类

二、面向对象的三大特征:封装性、继承性、多态性 、(抽象性)

1.类和对象

类是抽象的定义:人

对象是实例:小明

2.设计类就是设计类的成员:属性、方法、构造器;代码块、内部类;

属性 = 成员变量= field = 域、字段

方法 = 成员方法 = 函数 = method

创建累的对象= 类的实例化

3。赋值的时候要注意赋的是值还是地址

4.对象的内存解析

三、其他关键字:this、super、static、final、abstract、interface

 

注意看p3 = p1这一块,这就是为什么在链表题里ListNode cur = root,针对cur进行一系列操作后返回root就是要的结果,因为他俩就是一个地址

方法的使用中,既可以调用属性,也可以调用类中的方法

特殊:方法a中调用方法a,递归

虚拟机栈(栈):局部变量放在栈里

堆:new出来的结构都放在堆空间,包括数组、对象。对象的属性(非static)放在堆里

方法区:类的加载信息,常量池和静态域

四、内存解析说明

引用类型的变量,只可能储存两类值:null或地址值(含变量的类型)

五、匿名对象的使用

1.创建的对象没有显式的赋给谁

new Person().showname() 不指定new给谁,每次new都是新的对象

2.只能调用一次

3.使用:就好比

result.add( new ArrayList(path))

4.线性查找会返回第一次出现的位置

六、重载

同一个类中,方法名可以重复,只要形参不一样(个数、类型)就行,想一下ListNode 紧抓定义,和权限修饰符,返回类型,方法体都无关

public newNode(int _val) {
    val = _val;
}
​
public newNode(int _val, newNode _left, newNode _right, newNode _next) {
    val = _val;
    left = _left;
    right = _right;
    next = _next;
}

七、可变个数形参的方法

允许定义能和多个实参相匹配的形参,用于传递个数可变的实参(可以用在SQL语句里)

当调用可变个数形参的方法时,传入的参数个数可以是0,1,。。,n

当形参中出现数组时,有可变个数形参的方法时会报错,因为他俩干的活是一样的

person.show("Rom");
person.show("Tom","Jatty");
person.show();
public void show(String ... str){
    
}

可变个数形参在方法的形参中必须声明在末尾,并且只能有一个可变个数形参

public void show(int i,String ... str){ }

八、方法参数的值传递机制

1.对于引用数据类型里面放的是地址

解释了为什么链表题里ListNode cur = root,对cur做操作root会有变化,因为他们指向同一个实体

2.方法形参的传递机制:值传递

形参 实参

值传递机制:如果参数是基本数据类型,此时实参付给形参的是变量保存的数据值,所以执行 交换 方法实际上并没有完成交换操作

如果参数是引用数据类型,此时实参付给形参的变量保存的数据的地址值,所以执行 交换 方法实际上并没有完成交换操

但如果是引用数据类型,就可以想要的执行结果 还是以交换为例

public static void main(String[] args) {
    Datas data = new Datas();
    data.m = 10;
    data.m = 20;
    swap(data);
}
static void swap(Datas data) {
    int temp = data.m;
    data.m = data.n;
    data.n = temp;
}
​
static class Datas {
    int m;
    int n;
}

解释了之前刷题的时候 写的一个方法拿类的属性直接做形参,最后执行的操作没执行成功,最后要把形参改成类

九、封装和隐藏

高内聚、低耦合

高内聚:类的内部数据操作细节自己完成,不允许外部干涉

低耦合:仅对外暴露少量的方法用于使用

1、问题引入:

当我们创建一个类的对象以后,我们可以通过对象.属性方法对对象的属性进行赋值、这里赋值操作收到属性的数据类型和存数范围约束。

在实际问题时,往往需要给属性赋值添加限制条件,此时就需要写一个方法来添加限制条件。比如set()。为了避免用户还是用属性.方法完成赋值,就要把这个属性声明为private。体现封装性

2、封装性的体现

将类的属性设置为private时,同时提供public的方法完成属性的set 或get

拓展:封装性的体现:①如上 ②构造类内部使用的方法 private③单例模式

3.封装性的体现需要权限修饰符的配合

(1)四类权限:private、缺省(啥也不写)、protected、public

不同包的子类:涉及继承性

(2)四类权限修饰符能够修饰类及类的内部结构:属性、方法、构造器和内部类

修饰类的话只能用缺省和Public

用四种权限修饰符修饰类及其内部结构,体现类和类的的内部结构在调用时可见性的大小

十、类的成员之三构造器(构造方法) 前两个是属性和方法

1、构造器的作用:创建对象

new + 构造器

1.如果没有显式定义构造器,系统会默认提供一个空参构造器(权限和类一样)

2.定义构造器的格式,权限修饰符 构造器名称(和类同名) (形参类别){} 举例如下

public class newNode {
    public int val;
​
    public newNode() {
    }
    public newNode(int _val) {
        val = _val;
    }

newNode node = new newNode(1);

构造器的形参可以用来给属性赋初始值

3.一个类中构造的多个构造器,彼此之间是重载

4.一旦显式定义尅的构造器,系统就不会提供默认的空参的构造器

十一、属性的赋值顺序:

说真的 我觉得这个给语句执行顺序有关 1,2就不说了,3是定义了属性才能在构造器里对属性进行赋值,通过.进行赋值肯定是你new过对象之后才能调对象的属性或者方法

1.隐式赋值(在类里面属性用数据类型的默认值)

2.显式赋值(在类里面对属性进行赋值)

3.构造器中赋值

4通过对象.属性、对象.方法 进行赋值

十二、JavaBean

十三、this的使用

在类中方法的形参和属性重名时,可以用this.进行区分

this可以用来修饰属性、方法、构造器

1.this可以修饰属性和方法:

理解为当前对象

newNode node = new newNode(1);

public newNode() {
}
public newNode(int val) {
    this.val = val;
}

this可以理解为node (谁调这个方法,这个就是谁的属性)n

1.1.在类的方法中,可以使用“this.属性”或“this.属性”的方式,调用当前对象的属性和方法,但一般都省略了

如果方法形参和类的属性同名时,必须显式的使用“this.变量”表示此变量是属性而不是形参

1.2.在类的构造器中,可以使用“this.属性”或“this.属性”的方式,调用当前对象的属性和方法,但一般都省略了

如果方法形参和类的属性同名时,必须显式的使用“this.变量”表示此变量是属性而不是形参

1.3.this调用构造器

一般会有好几个形参不同的构造器,但每个构造器中执行的操作类似。那么可以使用this调用本类中指定的构造器

格式:直接在构造器里写 this(如果你想执行的构造器里要形参 这个地方放形参);

不能自己调自己,也不能调成一个环路

调用构造器的时候要写在构造器里面最前面,不能一次调好几个构造器

public Person(){
​
}
public  Person(int age){
    this();
    this.age = age;
}
public Person(String name,int age){
    this(age);
}

十四、package 、import的使用

1.package:包

为了更好的实现项目中类的管理,提供包的概念

1.2.使用package声明类或接口的包,声明在源文件的首行

1.3.包,属于标识符,遵循标识符的命名规则、规范(小写)“见名知意”

1.4.每“.”一次,代表一层文件目录

同一个包不能命名同名的接口和类,不同的包不管

2.import 导入

2.1在源文件中显式使用import结构导入指定包下的类、接口

2.2声明在包的声明和类的声明之间

2.3两个包里有相同名称的类时怎么引用?

在创建对象的时候加包名:至少有一个对象要这样式写

com.demo.TreeNode treeNode = new com.demo.TreeNode();

2.4 xxx.*只能导类和接口,如果有子包,改导还得导

2.5 import static 导入指定类或接口中的静态结构。然后在代码里就不用加他的名字了

十五、项目二 做一个顾客管理系统 涉及增删改查(放数组里)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值