Java Web简明教程–Java篇[10]–static和鸡蛋

简介: Java Web简明教程–Java篇[10]–static和鸡蛋

在前一篇中,使用static关键字,让程序的运行速度加快了20倍,好的,为了了解到底是什么原因,我们非常有必要简单地了解下static这个关键字。


Java毫无疑问是一门面向对象的语言,所谓的面向对象,猫哥认为就是所有的东西都看成是对象。比如一个来个经典的例子:Student stu=new Student();这个例子猫哥给拆开来讲讲,首先是Student stu;,其中stu是一个引用,它负责保存一个地址,这个没有问题。其次呢,stu是一个Student类型的引用,所以它指向的地址得保存一个Student类型的对象。再次呢,因为Java支持继承嘛,所以stu也可以指向一个Student类的子类的对象(反正都是爷俩,姓是一样的)。


好的,我们定义了一个Student类型的引用,然后给它赋值:stu=new Student();,赋值语句是先计算右边,然后右边计算结果给左边。右边new很厉害,它负责从堆中分配一块空间,好的,它看到空间是Student类型的,所以它就按Student类占用空间大小给划出一块堆来,然后呢new Student()这个语句运算结果是刚刚划出来空间的地址,赋值给stu这个引用,所以stu保存的就是这块空间的地址。


所以,在stu=new Student();之前,是不能调用stu的方法,比如stu.goToSchool();。这个没有意义,stu还没指向地址,它也不知道自己可以goToSchool()。所以会报空指针错误,意思就是stu引用是空的,没指向地址。


OK,事情发展到这里,好像已经很清晰了,所有的东西都是对象,多符合世界的规律。但是还有一个问题,就是先有鸡还是先有蛋的问题。是先有鸡生出了鸡蛋,还是先有鸡蛋孵出来了鸡呢,这个问题无解。OK,在Java里面也是一样的,在程序的开始,是先有的对象调用它的方法呢(但是对象必须在运行的方法语句里产生),还是先有方法产生对象呢(但是方法必须是属于对象的)。


所以说,没有完全的面对对象,一切编程都是有先后顺序的,所谓的先后顺寻我们就可以认为是面向过程。OK,Java设计者也认识到了这一点,所以引入了static关键字。


使用static关键字有两个主要用途:


1,修饰成员变量。


2,修饰成员函数。


当static修饰成员变量时,跟常规的成员变量有如下区别:


public class Student {
  int var;//成员变量,当Student类实例化对象时,每个对象都包含一个var属性
  static int staticVar;//静态变量,所有Student类共享一个staticVar,可以使用类名访问,也可以使用对象名访问 
}

OK,说白了,静态变量跟所属类基本没关系,它只是借助类或者类的对象来访问这个静态变量,属于挂靠关系,除此之外,就没关系了。


当static修饰成员方法时,那就是更单纯的挂靠关系了,所以直接就别提什么静态成员变量、静态成员方法了,它就不是类的成员,直接称呼为静态变量、静态方法反而更合适。


所以,实际上是这样运作的:



public class Student {
  int var;//成员变量,当Student类实例化对象时,每个对象都包含一个var属性
  static int staticVar;//静态变量,所有Student类共享一个staticVar,可以使用类名访问,也可以使用对象名访问 
  public static void test(){//测试
  staticVar=1;//这个是对的,test()是静态的,属于全局,可以访问到Student.staticVar,而且它俩都是挂靠Student,理论上属于同一部门,所以可以省略Student.
  var=1;//这个是错误的,var现在都没有实现呢,它属于谁?对象都没有哪里来的对象的成员。
  Student stu=new Student();
  stu.var=1;//这样写是对的,刚刚给stu分配了空间,所以stu具有var这个成员变量
  stu.staticVar=2;//这样写也是对的,静态变量可以使用类名或者对象名访问,但是都是一个值。所以执行这一句后staticVar的值从1变为了2
  }
}

现在还要说明一个问题:


public class Student {
  int var;//成员变量,当Student类实例化对象时,每个对象都包含一个var属性
  static int staticVar;//静态变量,所有Student类共享一个staticVar,可以使用类名访问,也可以使用对象名访问 
  public static void test(){//测试
  }
  public static void main(String[] args){
  }
}

test()和main()其实是一个类型静态函数,但是main()是入口而test不是,为啥,Java语言规定,如此而已。


好了,扯了这么多,基本上猫哥想表达的,关于static的意思都说完了。现在回到上一篇,使用静态的方式,速度提高了20倍:


public static MysqlHandler hand=new MysqlHandler(); 
public static Connection con=hand.buildConnection();//建立连接 
public static ResultSet rs;//可以使用多次


首先有一点,因为静态的变量hand 、con、rs一直存在,不用反复的new分配空间,所以节省了时间。另外不用每次Connection con=hand.buildConnection();//建立连接,节省了很多时间,猫哥个人感觉告诉自己,应该是第二个节省时间多,因为Java new操作,是Java语言自家的事情,而建立连接,每次都是要跟数据库去接触,自己家干事,总比跨部门协作简单快速吧,应该是这样的。


OK,那既然static的方式快速,那何不大家都用static。哈哈,但是static的变量全局共享这一个啊,你想想咱的网页是要很多人访问的,如果大家都用一个static,它得多忙,忙中出错了吧要。所以比较理想的方式是每次有人访问需要连接数据库获取数据,就new 一个connnection,这样不就安全了。但是每次都new太耗费时间和资源了吧,怎么在即安全又不那么浪费资源呢,且听下回分解。


相关文章
|
25天前
|
开发框架 前端开发 JavaScript
ASP.NET Web Pages - 教程
ASP.NET Web Pages 是一种用于创建动态网页的开发模式,采用HTML、CSS、JavaScript 和服务器脚本。本教程聚焦于Web Pages,介绍如何使用Razor语法结合服务器端代码与前端技术,以及利用WebMatrix工具进行开发。适合初学者入门ASP.NET。
|
3天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
17天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
95 26
|
26天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
48 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
24天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
24天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
1月前
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
52 8
|
1月前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
33 2
|
1月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
59 6
|
1月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
74 4