Java一日一笔记

对象的产生和使用

构造器是用于构造该类的实例,Java语言通过new关键字来调用构造器,从而返回该类实例。构造器是一个类创建对象的根本途径,没有构造器则类无法创建实例。因此如果没有编写构造器,则 默认会提供一个构造器。

构造器是一个特殊的方法,定义构造器的语法格式与定义方法的语法格式很像,定义构造器的语法如下

[修饰符] 构造器名(形参列表) {

//由0条或者多条可执行性语句组成的构造器执行体

}

构造器语法格式的详细说明如下:

修饰符:修饰符可以省略,也可以是public protected private其中之一

构造器名:构造器名必须和类名相同

形参列表:和定义方法形参列表的格式完全相同

构造器既不能定义返回值类型,也不能使用void定义构造器没有返回值。如果构造器定义了返回值类型,或使用void声明构造器没有返回值,编译时不会出错,但Java会把这个所谓的构造器当成方法来处理

public class Person {

public String name;

public int age;

public void say(String content){

System.out.println(content);

}

}

Person类代码里没有构造器,系统将会为他提供一个默认的构造器,系统提供的构造器是没有参数的。

创建对象的根本途径是构造器,通过new关键字来调用某个类的构造器即可创建这个类的实例:

//定义一个Person类型的变量

Person p;

//通过new关键字调用Person类的构造器,返回一个Person实例

//将该Person实例赋给p变量

p = new Person();

//上面代码简写如下

Person p = new Person();

对象,引用和指针

在前面代码中,有这样一行代码:Person p = new Person();创建了一个person实例,也被称为person对象,这个person对象被赋给p变量

从Person类定义来看,Person对象应包含两个成员属性,而成员属性需要内存来存储 。当创建Person对象时,必然需要有对应的内存来存储Person对象的成员属性

Person对象由多块内存组成,不同内存块分别存储Person对象的不同成员属性。当把这个对象赋值给另一个引用变量时,系统如何处理呢?难道系统会把这个Person对象在内存里新复制一份吗?不会的,引用变量里存放的仅仅是一个引用,它指向实际的对象

与前面介绍的数组类型类似,类也是一种引用数据类型,因此程序中定义的Person类型的变量实际上是一个引用,它被存放在栈内存中。

栈类从里的引用变量并未真正存储对象的成员属性数据,对象的成员属性数据实际上存放在堆内存中;而引用变量只是指向该内存里的对象。跟c语言的指针很想,都是存储一个地址值,通过这个地址来引用到实际对象

对象的this引用

this关键字总是指向调用该方法的对象。根据this出现位置的不同,this作为对象的默认引用有两种情形:

构造器中引用该构造器正在初始化的对象

在方法中引用该方法的对象

this关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或成员属性。如下代码所示:

方法详解

方法是类或者对象的行为特征的抽象,方法是类或对象最重要的组成部分。Java中的方法不能独立存在,所有的方法都必须定义在类里。方法逻辑上属于类,要么属于对象。

方法的所属性

方法不能独立定义,方法只能在类体里定义

从逻辑意义上看,方法要么属于类本身,要么属于该类的一个对象

永远不能独立执行方法,执行方法必须使用类或对象作为调用者

使用static修饰方法属于这个类本身,使用static修饰的方法可以使用类作为调用者来调用。

方法和参数传递机制

如果声明方法时包含了形参声明,则调用方法时必须给这些形参指定参数值,调用方法时实际上传给形参的参数值也被称为实参

Java方法的参数传递方式只有一种:值传递。所谓值传递,就是将实际参数值副本传入方法内,而参数本身不会受到任何影响

递归方法

一个方法体内调用它自身,被称为方法递归。递归包含了一种隐式的循环,重复执行某段代码,但这种重复执行无需循环控制

计算数列的值:f(0)=1,f(1)=4,f(n+2)=2*f(n+1) + f(n)其中n为大于0的整数。求f(10)

方法重载

Java允许同一个类定义多个同名方法,只要形参列表不同就行。同一个类中包含了两个或两个以上方法的方法名相同,但形参列表不同,则被称为方法重载

调用者,方法所属者,既可以是类,也可以是对象

方法名,方法的标识

形参列表,当调用方法时,系统将会根据传入的实参列表匹配

方法重载要求两同一不同:同一个类中方法名相同,参数列表不同。方法返回值类型,修饰符等等,与方法重载没有任何关系

test两个方法名称相同,但是形参不同,所以系统可以正常区分这两个方法

成员变量和局部变量

下列的Field为成员属性

成员变量指的是类范围里定义的变量,也就是前面所介绍的Field;局部变量指的是在发那个发里定义的变量。

时间: 2024-10-18 13:36:28

Java一日一笔记的相关文章

《深入Java虚拟机》笔记:指令集 (转)

<深入Java虚拟机>笔记:指令集 指令 含义 iconst_m1 把int型常量-1压入栈中 iconst_0 把int型常量压入栈中 fconst_1 把float型常量1压入栈中 lconst_2 把long型常量2压入栈中 dconst_3 把double型常量3压入栈中 bipush byte1 把byte1转换成int型压入栈中 sipush byte1,byte2 把byte1,byte2组成的short转换成int压入栈中 aconst_null 把空对象压入栈中 ldc in

java nio学习笔记(一)

位置保留,待用 java nio学习笔记(一),布布扣,bubuko.com

JAVA基础学习笔记(2)

看了几天的视频了,都没时间来写下学习笔记,今天来写下第二次的学习笔记,前几天看的给忘记了,就写最新看到的吧 主要内容:1.类的变量与函数(方法) 2.对象的存储方式 3.新建一个对象及对象的赋值与调用 4.空对象 5.匿名对象 1.类的变量与函数(方法) class Dog      //类名 { String name;  //变量的声明 int age; String color; void bark()   //方法的定义(返回值为空,不带参数) { System.out.println(

java排序学习笔记

前面写了js的排序实现,总得玩玩java的哈. 同样,冒泡.选择.快速(这三个之前实现过也写过文章).堆排序,然后做比较. 主要遇到的难点: - -||想轻松点写个封装计时的逻辑,不想每调用一个排序就要写一个计时代码.想想,还是javascript写起来方便: java的话,我想到的方法是写一个抽象类:抽象出排序方法,实现一个排序计时方法(该方法调用了抽象排序,但在先后排序时加入计时代码[感觉像是aop操作]): 接着所有排序类都继承这个抽象类,并实现排序方法,调用的时候直接调用继承的排序计时方

JAVA代码规范笔记(下)

声明 17.推荐一行一个声明,因为这样有利于写注释.换句话说,下面的声明方法中, int level; // indentation level int size; // size of table 要优于: int level, size; 绝对不要将变量和方法的声明放在同一行,例如: long dbaddr, getDbaddr(); // WRONG! 不要将不同类型的变量的声明放在同一行,例如: int foo, fooarray[]; //WRONG! 注意:上面的例子中,变量与标识符

《深入Java虚拟机学习笔记》- 第4章 网络移动性

Java虚拟机学习笔记(四)网络移动性 <深入Java虚拟机学习笔记>- 第4章 网络移动性,布布扣,bubuko.com

《深入Java虚拟机学习笔记》- 第7章 类型的生命周期

一.类型生命周期的开始 如图所示 初始化时机 所有Java虚拟机实现必须在每个类或接口首次主动使用时初始化: 以下几种情形符合主动使用的要求: 当创建某个类的新实例时(或者通过在字节码中执行new指令,或者通过不明确的创建.反射.克隆和反序列化): 当调用某个类的静态方法时(即在字节码中执行invokestatic指令): 当使用某个类或接口的静态字段,或者对该字段赋值时(用final修饰的静态字段除外,它被初始化为一个编译时常量表达式): 当调用Java API中的某些反射方法: 当初始化某个

《深入Java虚拟机学习笔记》- 第13章 逻辑运算

<深入Java虚拟机学习笔记>- 第13章 浮点运算 <深入Java虚拟机学习笔记>- 第13章 逻辑运算,布布扣,bubuko.com

《深入Java虚拟机学习笔记》- 第12章 整数运算

Java虚拟机提供几种进行整数算术运算的操作码,他们执行基于int和long类型的运算.当byte.short和char类型值参与算术运算时,首先会将它们转换为int类型.这些操作码都不会抛出异常,溢出在这里通常可以被忽略. 整数加法 操作码 操作数 说明 iadd (无) 从栈中弹出两个int类型数,相加,然后将所得int类型结果压回栈 ladd (无) 从栈中弹出两个long类型数,相加,然后将所得long类型结果压回栈 将一个常量与局部变量相加 操作码 操作数 说明 iinc vindex