java基础的详细了解第二天

目录
  • 1、方法的基本定义
  • 2、方法重载
  • 3、方法的递归调用
  • 4、面向对象的前身是面向过程
  • 5、类与对象
    • 内存分析
    • 引用传递
  • 总结

1、方法的基本定义

限制条件:本次所讲解的方法指的是在主类中定义,并且由主方法由主方法直接调用。

方法是指就是一段可以被重复调用的代码块。 在java里面如果想要进行方法的定义,则可以使用如下的方法进行完成。

public static 方法返回值 方法名称([参数类型 变量,....]){
    方法体代码 ;
     return [返回值];
}

在定义方法的时候对于方法的返回值由以下两类:void没用返回值和数据类型(基本类型、引用类型)。

public class TestDemo{
   public static void main(String args[]){
   //如果要在主方法里面调用该方法,该方法一定要用static进行修饰
   	print();	//主方法里面直接调用
   	print();	//主方法里面直接调用
   	print();	//主方法里面直接调用
   }
   public static void print(){
   	System.out.println("Hello,World!");
   }
}

但是有一点要特别的注意就是当返回值为void类型的时候,那么该方法当中可以直接使用return来直接结束调用。在一般情况下和if判断使用。

public class TestDemo{
	public static void main(String args[]){
	//如果要在主方法里面调用该方法,该方法一定要用static进行修饰
		print1(10);	//主方法里面直接调用
		print1(20);	//主方法里面直接调用
		print1(30);	//主方法里面直接调用
	}
	public static void print(){
		System.out.println("Hello,World!");
	}
	public static void print1(int x){
		if(x == 20){	//表示方法结束的判断
			return ;	//此语句之后的代码不在执行
		}
		System.out.println("x = " + x);
	}
}

2、方法重载

方法的重载是指:方法名称相同,参数的类型或个数不同。

public class TestDemo2{
	public static void main(String args[]){
	//如果要在主方法里面调用该方法,该方法一定要用static进行修饰
		System.out.println(add(10,20));	//主方法里面直接调用
		System.out.println(add(10,20,30));	//主方法里面直接调用
		System.out.println(add(10.1,20.1));	//主方法里面直接调用
	}
	public static int add(int a,int b){
		return  a + b;
	}
	public static int add(int a,int b,int c){
		return a + b + c;
	}
	public static double add(double a, double b){
		return a + b;
	}
}

在方法重载的时候有一个重要的原则就是要求方法的返回值类型一定要相同。

通过用System.out.println()输出发现所有的类型都可以进行输出,由此我们可以发现这个方法是一个重载的方法。

3、方法的递归调用

方法的递归调用指的是一个方法调用自己的形式。如果要进行方法的递归操作往往都具备以下特点

方法必须有一个递归的结束条件

方法在每次递归处理的时候一定要做出一些变更

计算60!

public class TestDemo4{
	public static void main(String args[]){
		System.out.println(mul(60));
	}
	public static double mul(double num){
		if (num == 1){
			return 1;
		}
		return num * mul(num - 1);
	}
}

计算结果:

8.320987112741392E81

其实我们在使用while的循环操作大部分都可以使用递归,而使用递归是因为主要一个方法可以执行的操作很多,而且结构简单、好。

4、面向对象的前身是面向过程

两者的区别:笼统的将最好的例子就是面向过程是解决问题,面向对象是模块化设计。对于现在的程序就像是汽车组装,不同的工厂生产不同零件,将这些零件组装在一起可以形成一个汽车,当我们零件坏了的时候还可以进行配装。

面向对象在实际上还有很多的特点

  • 封装性:内部的操作对外部而言是不可见的。
  • 继承性:在上一辈的基础上继续发展。
  • 多态性:这是我们最为重要的一个环节,利用多态性才可以得到良好设计。

三个阶段:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程) 专业化术语

5、类与对象

类和对象是面向对象核心所在,也是所有概念的基础。类属于我们的引用类型,所以类的使用会牵扯到我们的内存分配问题

所谓的类就是一个共性的概念,而对象就是一个具体可以使用的事物。

类的组成:方法(操作行为)、属性(变量,描述每一个对象的具体特点)。

类的定义一般有class进行声明

class 类名称{
	属性1;	//属性可以是多个
    属性2;
}

此时的方法不在由主类进行调用,而是要通过对象进行调用。

声明实例化对象

class Person{	//定义一个类首先要将类的名称每个首字母进行大写
	public void info(){
		System.out.println("name = "+ name + "\nage = " + age);
	}
}
public class TestDemo5{
	public static void main(String args[]){
		//实例化对象第一种方式
		Person person = new Person();
		person.name = "张三";	//设置对象中的属性值
		person.age = 13;	//设置对象中的属性值
		person.info();
		//实例化对象第二种方式
		Person person1 = null;
		person1 = new Person();
		person1.info();
	}
}

引用数据类型最大的特征在于内存的分配操作,只要出现关键字new那么只有一个解释:开辟新的内存(内存是不可能无限开辟的,所以这个时候所谓的性能调优调整的就是内存问题)。

内存分析

我们使用的内存空间分为两块:堆内存空间(保存真正的数据,保存对象的属性信息)和栈内存空间(保存的堆内存的地址,堆内存操作权,简单理解叫保存对象的名称),所有数据类型必须在开辟空间后才能使用。如果使用了未开辟的数据类型则会出现NullPointerException,只有引用数据类型(数组、类、接口)才会产生此类异常,以后出现了根据错误位置观察其是否进行实例化对象。

引用传递

引用传递的本质就在于别名,而这个别名只不过是放在我们栈内存当中,一块堆内存可以被多个栈内存所指向。

class Person{	//定义一个类首先要将类的名称每个首字母进行大写
	String name;
	int age;
	public void info(){
		System.out.println("name = "+ name + "\nage = " + age);
	}
}
public class TestDemo5{
	public static void main(String args[]){
		//实例化对象第一种方式
		Person per = new Person();
		per.name = "张三";	//设置对象中的属性值
		per.age = 13;	//设置对象中的属性值
		per.info();
		//实例化对象第二种方式
		Person per1 = null;
		per1 = new Person();
		per1.name = "小于子";
		per1.age = 30;
		per1.info();
		//此步骤就是引用传递的操作
		Person per2 = per1;
		per2.name = "狗剩";
		per1.info();
	}
}

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Java基础之详解基本数据类型的使用

    一.整型 主要扩展一下不同进制的整型 二进制.八进制.十进制.十六进制 * 二进制 : 0B(数字零+B) 0b(数字零+b) * 八进制 :0(数字零开头) * 十进制 :正常写就是十进制 * 十六进制 : 0X (数字零+X)0x (数字零+x) A-F 代表 10-15 1.1 测试代码 /** * 进制 : * 二进制 : 0B(数字零+B) 0b(数字零+b) * 八进制 :0(数字零开头) * 十进制 :正常写就是十进制 * 十六进制 : 0X (数字零+X)0x (数字零+x) *

  • java泛型通配符详解

    前言 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型. 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 泛型带来的好处 在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的"任意化","任意化"带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的.对于强制类型转换错误的情况,编译器可能不提示错

  • Java基础之详解HashSet的使用方法

    Java HashSet HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合. HashSet 允许有 null 值. HashSet 是无序的,即不会记录插入的顺序. HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的. 您必须在多线程访问时显式同步对 HashSet 的并发访问. HashSet 实现了 Set 接口. HashSet 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类. 添加元素 HashSet

  • java基础的详细了解第二天

    目录 1.方法的基本定义 2.方法重载 3.方法的递归调用 4.面向对象的前身是面向过程 5.类与对象 内存分析 引用传递 总结 1.方法的基本定义 限制条件:本次所讲解的方法指的是在主类中定义,并且由主方法由主方法直接调用. 方法是指就是一段可以被重复调用的代码块. 在java里面如果想要进行方法的定义,则可以使用如下的方法进行完成. public static 方法返回值 方法名称([参数类型 变量,....]){ 方法体代码 ; return [返回值]; } 在定义方法的时候对于方法的返

  • Java基础之详细总结五种常用运算符

    一.算术运算符 算术运算符的符号通常为:加(+).减(-).乘(*).除(/).取余(%).自增(++).自减(--). 使用int类型的变量和int类型的变量做除法,得到的结果还是int类型: 使用double类型的常量和 int类型的常量做除法,会得到double类型的结果:在使用强制类型double转换可以得到double类型 System.out.println(7 / 2);//3.0 System.out.println((double)(7 / 2)); // 3.0 System

  • java基础的详细了解第五天

    目录 1.String类 1.1两种对象实例化方式 1.2字符串比较 1.3字符串常量是String的匿名对象 1.4String两种实例化方式区别 1.分析直接赋值方式 2.构造方法赋值 1.5字符串常量不可改变 1.6开发中String必用 1.7字符串和字符数组 charAt方法 1.8字节和字符串 1.9字符串比较 1.10字符串查找 1.11字符串的替换 1.12字符串的拆分 1.13字符串的截取 1.14其他操作方法 思考题: 总结 1.String类 1.1两种对象实例化方式 对于

  • java基础的详细了解第一天

    目录 1.Java主要特点 2.计算机的高级汇编语言类型: 3.JVM(Java Visual Machine) 4.编写第一个Java程序并运行 5.CLASSPATH指的是类加载路径 6.程序注释,对以后的所有代码都要进行注释,主页可以方便进行开发需求 7.标识符和关键字 8.Java数据类型的划分以及数据类型的操作 java数据类型的划分一般分为两大类:基本数据类型和引用数据类型 错误: 编码GBK的不可映射字符 重要说明:关于数据类型的默认值问题 数据类型划分--浮点形 传统bug问题

  • java基础的详细了解第三天

    目录 1.private实现封装处理 2.构造方法与匿名对象 3.简单java类 4.数组 总结 1.private实现封装处理 如果像想要知道封装,首先必须清楚如果没有封装会怎么样? 没有封装方法中的属性,在所有方法被调用后都可以进行无权限的访问.而当进行了封装操作之后,在实例化对象访问该方法的时候会出现无法访问的问题. TestDemo1.java:11: 错误: name 在 Person 中是 private 访问控制 per.name = "张三"; ^ TestDemo1.

  • java基础的详细了解第六天

    目录 1.this关键字 1.1 "this.属性"表示本类属性 1.2"this"表示调用本类方法 1.3"this"表示当前对象 1.4引用传递进阶分析 1.5对象比较 1.6引用传递实际应用 重点 1.7数据表与简单Java类(一对多) 第一步 编写实体类 第二步 进行关系设计 第三步 开发需求 1.8数据表与简单Java类(多对多) 第一步 编写实体类 第二步 进行关系设计 第三步 开发需求 总结 1.this关键字 首先需要提醒的是,在

  • java基础的详细了解第四天

    目录 1.数组 数组的引用传递 数组的静态初始化 数组与方法的调用 Java对数组的支持 数组的数据分析 数组排序 数组的转置 数组的二分查找法 对象数组 总结 1.数组 数组的引用传递 public class TestDemo1{ public static void main(String args[]){ int data[] = null; data = new int [3]; data[0] = 10; //第一个元素 data[1] = 20; //第二个元素 data[2] =

  • java基础的详细了解第九天

    目录 1.匿名内部类 2.Object类简介 2.1 取得对象信息toString() 2.2 对象的比较equals() 2.3 Object接口引用数据类型 3.包装类 3.1 装箱与拆箱 3.2 字符串与基本数据类型的转换 将字符串变为int 将字符串变为double 将字符串变为boolean型数据 3.3 包的定义 3.4 包的导入 观察protected访问权限 对于权限的选择 4.访问控制权限 5.jar命令 总结 1.匿名内部类 内部类:在一个类的内部定义了另外的类,称为内部类,

  • java基础的详细了解第七天

    目录 1.static关键字 1.1 使用static关键字定义属性 1.2 使用static定义方法 1.3 分析主方法 1.4 关键字的使用 2.代码块 2.1 普通代码块 2.2 构造块 2.3 静态块 3.继承性 3.1 继承的实现 3.2 继承的限制 4.覆写 4.1 方法的覆写 4.2 属性覆盖 4.3 super关键字

  • java基础的详细了解第八天

    目录 1.多态性 1.1 向上转型 1.2 向下转型 2.抽象类 2.1 抽象类的基本概念 抽象方法为什么不能实例化对象? 关于抽象类的若干中疑问? 3.接口 3.1 接口的基本概念 3.2 接口的使用限制 接口与抽象类 3.3 使用接口定义标准 定义USB接口: 定义USB的子类: 源代码: 3.4 抽象类与接口的区别 总结 1.多态性 多态性是面向对象的最后一个特征,它本身主要分为两个方面: ​ 方法的多态性:重载与覆写 1.重载:同一个方法名称,根据参数类型以及个数完成不同功能: 2.覆写

随机推荐