第四记 p397

跟着动力节点学  目前p397

Java发展史

sun公司开发 带头人: James gosling

特点

简单性 多线程 面向对象 可移植

jdk jre jvm

方法

方法只有程序员手动调用的时候 才会执行

方法不调用 是不会执行的。

方法定义在类体。

方法 method 是一段可以被重复利用的 完成特定功能 的代码片段;

C语言 被称为函数 在Java中叫做函数。

一般一个方法就是一个功能单元。

 

局部变量

方法结束后,局部变量占用的内存会自动释放

定义

形式参数列表 形参 局部变量 0—N个 有多个的话。用“,”隔开 形参的数据类型 起决定性作用 变量名随意。

public static void sumInt (int x)
{
   
}

 

方法的调用

方法必须调用才可以执行

类名.方法名 类名可以省略

跨类 调用 不能省略类名

break

break 终止循环 switch

return 终止一个方法;


 

public class method{
   public flag = true;
   if(flag){
       return 1;
  }
}
// 报错 缺少返回语句。

带else 可以保证一定会有个分支执行。

return 下面不能再编写代码。

 

jvm内存

栈数据结构 stack

栈数据结构特点 先进后出,后进先出。

jvm三块主要的内存 栈内存 堆内存 方法区

方法调用 叫压栈 分配空间 push

方法结束叫 弹栈 释放空间 pop

方法的重载

public static overload{
   public static void main(String [] args)
  {
   int x =sumint(10,20);
   system.out.println(x);
   int y =sumlong(10,20);
   system.out.println(y);    
}
public static int sumint(int a,int b){
   return a+b;
}
   public static long sunlong (long a,long b){
       return a+b;
  }
}
}

功能相似 的可以让方法名重合 更易于以后的代码编写

image-20210408172939180

方法名相同的情况下,编译器会通过方法的参数类型进行方法的区分。

有利于代码美观


方法重载和方法的“返回值类型”无关

方法重载和方法的”修饰符列表“无关 public static

 

方法递归

  • 方法自己调用自己

  • 必须要有结束条件

结束条件是对的 也可能发生内存溢出错误 因为递归的太深 ,栈内存不够了 一直在压栈

  • 在实际开发中,不建议轻易使用递归,尽量使用循环来做 效率高,耗费内存少

递归使用不当 会导致jvm死掉

 

cmd

java-x 查看调整栈的大小

初始化 扩大栈的内存大小

 

面向对象

面向过程和面向对象有什么区别

C语言是面向过程 完全面向过程

c++半面向对象

Java完全面向对象的

  • 面向过程:注重步骤 注重实现功能的因果关系

缺点:每一步与每一步的因果关系,一个问题 整个系统运转出错耦合度太高扩展力太差

优点:对于小型项目,效率高,不需要进行对象的提取,模型的建立,直接写代码

 

  • 面向对象:更符合人类的思维方式 (面向对象成为主流的原因)

将现实世界分割成不同单元 然后每一个单元实现成对象,各个对象协作起来,形成系统

耦合度低。扩展力强。

OOA/OOD/OOP

面向对象分析ooa

面向对象设计ood

面向对象编程oop

实现一个软件过程

分析(A)-->设计(D)--->编程(P)

面向对象的三大特征

封装 继承 多态

任何一个面向对象的编程语言都包括这三个特性

python也有封装 继承 多态。

类和对象的概念

在Java语言中,要想得到“对象”必须先定义“类“,对象是通过”类“这个模板创造出来的

类就是一个模板,类中描述的是所有对象的共同特征,对象就是通过类创建出来的个体。

通过类创建对象的过程可以称为实例化;

通过对象到类的过程是抽象。

对象(实例)

类体=属性 +方法

属性 以变量 的形式存在

对象

对象的创建和使用

  • new 类名();

new 是一个运算符。

访问

  • 类型 变量名 = new xuesheng();

xuesheng s1=new xuesheng();

 

Java中所有类都是引用数据类型

编译过程

  • javac XueSheng.java

javac XueShengTest.java

  • java XueShengTest.java

  • javac *.java

 

对象存储在堆内存中

对于成员变量来说 没有手动赋值 默认赋默认值

image-20210408204009682

访问实例变量

引用.实例变量名

s1.name

 

image-20210408204553774

标识符可以有中文

空指针异常、

出现空指针异常 的前提条件是 “空引用”访问实例对象相关的数据时,都会出现空指针异常

 

该对象没有引用指向他 ,Java中规堆内存 程序员是无权利直接操作的。等待垃圾回收器GC回收

GC会将这个垃圾对象释放掉

 

Java中的垃圾回收器GC 主要针对回收的是堆内存中的垃圾数据

没有任何引用指向该对象的时候 会被回收

方法调用时参数的传递问题

Java中规定 参数传递的时候 和类型无关,不管是基本数据类型还是引用数据类型

统一将盒子中保存的值复制一份 传递下去

image-20210408214316003

局部变量 在方法体中有效 出来就释放了。


 

Java中变量赋值的原理

永远都是一个规律 将盒子中保存的那个值复制一份 传过去;

可能是数字 也可能是对象内存地址

image-20210408215944786

image-20210408215957357

 

 

 

posted @ 2021-04-08 22:24  各人blanknote  阅读(91)  评论(0)    收藏  举报