当前位置: 首页 > 编程日记 > 正文

Java学习总结:7

static关键字

一个类的主要组成就是属性和方法(分为构造方法和普通方法两种),而每一个对象都分别拥有各自的属性内容(不同对象的属性保存在不同的堆内存中),如果类中的某个属性希望定义为公共属性(即所有对象都可以使用的属性),则可以在声明属性前加上static关键字。

class Book12{private String title;private double price;static String pub="清华大学出版社";    //定义一个公共属性pubpublic Book12(String title,double price){this.title=title;this.price=price;}public String getInfo(){return "图书名称:"+this.title+",价格:"+this.price+",出版社:"+this.pub;}
}
public class Test1_1_3_1 {public static void main(String args[]){Book12 ba=new Book12("Java开发",10.2);Book12 bb=new Book12("Android开发",11.2);Book12 bc=new Book12("Oracle开发",12.2);ba.pub="北京大学出版社";   //修改了公共属性pub的内容System.out.println(ba.getInfo());System.out.println(bb.getInfo());System.out.println(bc.getInfo());}
}
//结果:
//图书名称:Java开发,价格:10.2,出版社:北京大学出版社
//图书名称:Android开发,价格:11.2,出版社:北京大学出版社
//图书名称:Oracle开发,价格:12.2,出版社:北京大学出版社

由上可知,任何一个对象修改了该公共属性的内容都将影响其他对象。
在这里插入图片描述
Java常用的内存区域:
栈内存空间:保存所有的对象名称(更准确地说是保存引用的堆内存空间的地址);
堆内存空间:保存每个对象的具体属性内容;
全局数据区:保存static类型的属性;
全局代码区:保存所有的方法定义。

class Book12{private String title;private double price;static String pub="清华大学出版社";    //定义一个公共属性pubpublic Book12(String title,double price){this.title=title;this.price=price;}public String getInfo(){return "图书名称:"+this.title+",价格:"+this.price+",出版社:"+this.pub;}
}
public class Test1_1_3_1 {public static void main(String args[]){System.out.println(Book12.pub);	//在没有实例化对象的情况下直接输出属性内容Book12.pub="北京大学出版社";	//修改static属性的内容Book12 ba=new Book12("Java开发",10.9);	//实例化Book12对象System.out.println(ba.getInfo());}
}
//结果:
//清华大学出版社
//图书名称:Java开发,价格:10.9,出版社:北京大学出版社

由上可知,在没有实例化对象产生时也可以直接利用Book12类输出或设置static属性的内容,并且此修改的结果将影响以后的Book12对象。

class Book12{private String title;private double price;private static String pub="清华大学出版社";public Book12(String title,double price){this.title=title;this.price=price;}public static void setPub(String p){pub=p;}public String getInfo(){return "图书名称:"+this.title+",价格:"+this.price+",出版社:"+this.pub;}
}
public class Test1_1_3_1 {public static void main(String args[]){Book12.setPub("北京大学出版社");Book12 ba=new Book12("Java开发",10.2);Book12 bb=new Book12("Android开发",11.2);Book12 bc=new Book12("Oracle开发",12.2);System.out.println(ba.getInfo());System.out.println(bb.getInfo());System.out.println(bc.getInfo());}
}
//结果:
//图书名称:Java开发,价格:10.2,出版社:北京大学出版社
//图书名称:Android开发,价格:11.2,出版社:北京大学出版社
//图书名称:Oracle开发,价格:12.2,出版社:北京大学出版社

上面的类中的方法分static方法和非static方法两组,这两组方法间的访问将受到如下限制:
1.static方法不能直接访问非static属性或方法,只能调用static属性或方法;
2.非static方法可以访问static的属性或方法,不受任何限制。
原因如下:
1.所有的非static定义的结构,必须在类已经明确产生实例化对象时才会分配堆空间,才可以使用;
2.所有的static定义的结构,不受实例化对象的控制,即可以在没有实例化对象的时候访问。

static的特点

1.不管有多少个对象,都可以使用同一个static属性;
2.使用static方法可以避免实例化对象调用方法的限制。

代码块

代码块一共分为4种:
1.普通代码块
2.构造块
3.静态块
4.同步代码块(等待多线程时)

1.普通代码块

public class Test1_1_3_2 {public static  void main(String args[]){{   //普通代码块int num=10; //局部变量System.out.println("num="+num);}int num=100;    //全局变量System.out.println("num="+num);}
}
//结果
//num=10
//num=100

2.构造块

class Book13{public Book13(){System.out.println("[A]Book13构造方法");}{   //将代码写在类里,所以为构造块System.out.println("[B]Book13类中的构造块");}
}
public class Test1_1_3_2 {public static  void main(String args[]){new Book13();new Book13();}
}
//结果
//[B]Book13类中的构造块
//[A]Book13构造方法
//[B]Book13类中的构造块
//[A]Book13构造方法

3.静态块

如果一个代码块使用static定义,就称为静态块。

3.1在非主类中使用

class Book13{public Book13(){System.out.println("[A]Book13构造方法");}{   //将代码写在类里,所以为构造块System.out.println("[B]Book13类中的构造块");}static {    //定义静态块System.out.println("[C]Book13类中的静态块");}
}
public class Test1_1_3_2 {public static  void main(String args[]){new Book13();new Book13();}
}
//结果
//[C]Book13类中的静态块
//[B]Book13类中的构造块
//[A]Book13构造方法
//[B]Book13类中的构造块
//[A]Book13构造方法

可以发现当有多个实例化对象产生时,静态块会优先调用,而且只调用一次。静态块的作用一般可以为static属性初始化。

3.2在主类中定义

public class Test1_1_3_2 {public static  void main(String args[]){System.out.println("Hello World");}static {System.out.println("He");}
}
//结果
//He
//Hello World

静态块优先于主方法运行。

相关文章:

mybatis 使用resultMap实现数据库的操作

resultType:直接表示返回类型 resultMap:对外部resultMap的引用 二者不能同时使用 创建一个实体类Role和User public class Role {private Integer id;private String roleCode;private String roleName;//省略set、get方法 创建User类(在User中有roleId…

【3DMax教程】三维产品可视化视频教程 3d Products Visualization Course

【3DMax教程】三维产品可视化视频教程 3d Products Visualization Course 三维产品可视化课程 教程大小:5.38G 1280X720 含课程素材文件 你会学到什么 项目简介及其必须包含的内容 蓝图以及如何获得和使用 逐步建模流程 如何制作UV和纹理 用UV投射材料 生成…

Spring MVC 和WebFlux 区别

本节主要对比了WebMvc 和 WebFlux两个Web框架,Spring已经为我们开发做了很大努力了,所以在合适的场景下这种异步框架还是非常可行的。但是还要考虑后期其它异步框架是否能够完善,全链路异步才能发挥异步最大的优势。

Cygwin鸡毛蒜皮

2019独角兽企业重金招聘Python工程师标准>>> Windows命令乱码: cygwin控制台mintty的编码缺省是UTF-8, 右键调整mintty选项[text] 改编码为GBK UNIX路径和Windows路径互转: 使用cygpath工具. 如: #cd cygpath C:\\Windows 安装包管理器apt-cyg: 安装: # svn --fo…

Using unique option prefix myisam-recover instead of myisam-recover-option

[转载]关于mysql error.log报"Using unique option prefix myisam-recover instead of myisam-recover-options ..."转载:http://blog.csdn.net/cloud_xy/article/details/21756601启动时日志中有这个警告的:[Warning] Using unique option pr…

Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020

Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020 流派:电子学习| MP4 |视频:h264,1280720 |音频:aac,48000 Hz 语言:英语 中文字幕(机译)原英文字幕 |大小:33.0 GB | 145节课程| (36h 18m) 你会学到什么 云…

Java学习总结:8

链表 class Node2{ //定义一个节点private String data;private Node2 next; //要保存的下一个节点public Node2(String data){ //每一个Node2对象都必须保存相应的数据this.datadata;}public void setNext(Node2 next){this.nextnext;}public Node2 getNext(){return this.…

(原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员

10.3 接口的实现 在继续前,先讨论一下如何定义和实现接口。第9章介绍了接口定义的方式与类相似,使用的代码如下: interface IMyInterface {// Interface members. } 接口成员的定义与类成员的定义相似,但有几个重要的区别&#…

JVM架构解析

本文阐述了JVM的构成和组件,配图清晰易懂,是学习Java开发者的入门必读文章。 每个Java开发人员都知道字节码经由JRE(Java运行时环境)执行。但他们或许不知道JRE其实是由Java虚拟机(JVM)实现,JV…

cmd实用命令

1.netstat 查看电脑端口状况 实际应用举例:查看某软件坚监听的电脑端口。 在任务管理器中选择列...,打开PID的显示。在这里查看某个应用程序的线程ID是多少。例如QQ:4904. 运行,cmd,输入netstat -ano,显示当…

嵌入式BootLoader技术内幕(三)

四、 关于串口终端 在 boot loader 程序的设计与实现中,没有什么能够比从串口终端正确地收到打印信息能更令人激动了。此外,向串口终端打印信息也是一个非常重要而又有效的调试手段。但是,我们经常会碰到串口终端显示乱码或根本没有显示的问题…

Maya 2020面部绑定动画学习视频教程 Facial Rigging 101 – Maya 2020

Maya 2020面部绑定动画学习视频教程 Facial Rigging 101 – Maya 2020 时长:16h 55m |视频:. MP4 1280x720,30 fps(r) |音频:AAC,44100 Hz,2ch |大小:15.5 GB 共62小节课程 流派:电子学习|语言:英语中文字幕(机译)含…

Java学习总结:9

继承 继承性是面向对象的第二大主要特征,而继承性要解决的就是代码重用的问题,利用继承性可以从已有的类继续派生出新的子类,也可以利用子类扩展出更多的操作功能。 继承的实现 继承的格式 class 子类 extends 父类 {}子类实际上是将父类…

转 小辉_Ray CORS(跨域资源共享)

前言:上一篇文章在写如何使用JSONP实现跨域请求的时候,偶然间提到CORS,即Cross-Origin Resource Sharing(跨域资源共享)。虽然前些天也看了一下CORS相关的文章,但是今天兴趣一来还是亲自地写篇博客来研究一…

使用dd命令复制ASM磁盘的spfile

通过下面sql查询参数文件在ASM磁盘中的AU分布SELECT x1.file_number,x1.name,x2.GROUP_KFFXP,x2.DISK_KFFXP,x2.AU_KFFXP,x3.pathFROM (SELECT *FROM (SELECT t1.GROUP_NUMBER, t1.FILE_NUMBER, t2.NAME, rownum AS rnFROM v$asm_file t1LEFT JOIN v$asm_alias t2ON t1.FILE_NU…

[转载]IPMSG(飞鸽传书)协议翻译

/***********************************************************本人(ypxing)根据下面的协议,C语言写的ipmsg(聊天,文件/文件夹传输)*请参见:http://blog.chinaunix.net/u1/35100/showart_689330.html**************************************…

SketchUp Pro 2021基础入门学习视频教程

SketchUp Pro 2021基础入门学习视频教程 1280X720 MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 流派:电子学习|语言:英语中文字幕(根据原英文字幕机译更准确) |时长:74节课(7h 31m) |大小:4.9 GB 含课程工程文件…

Java学习总结:10

覆写 在子类定义属性或方法时,有可能出现定义的属性或方法与父类同名的情况,这样的操作就称为覆写。 方法的覆写 当子类定义了和父类的方法名称、返回值类型、参数类型及个数完全相同的方法时,就称为方法的覆写。 class A1{public void f…

ubuntu中启用ssh服务

ssh程序分为有客户端程序openssh-client和服务端程序openssh-server。如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序ubuntu是默认安装的。而如果需要从远程连接到本机,则需要安装openssh-server,该程序需要自己安装。…

JVM 常见异常及内存诊断

栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存。 栈帧过多导致栈内存溢出 下述示例代码,由于递归深度没有限制且没有设置出口,每次方法的调用都…

解决文字无法缩小的问题

在css设置文字大小的时候,到12px 的时候你在怎么缩小他,他的大小就是不变font-size:百分比来控制也不起作用-webkit-transform: scale(0.8); -o-transform: scale(1); display: inline-block; 转载于:https://www.cnblogs.com/xinlinux/p/408…

asp.net图片浏览器效果

技术来源于同学会实践 前台设计 <% Page Language"C#" AutoEventWireup"true" CodeFile"txh.aspx.cs" Inherits"txh" %> <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"> <head runat&qu…

Blender材质和着色基础视频教程 CGCookie – Fundamentals of Blender Materials and Shading

Blender材质和着色基础视频教程 CGCookie – Fundamentals of Blender Materials and Shading Blender材质和着色基础视频教程 CGCookie – Fundamentals of Blender Materials and Shading CGCookie–Blender材质和着色基础 教程大小解压后&#xff1a;3.1G 共6大章 45小节课…

Java学习总结:11(final关键字)

final关键字 在Java中final称为终结器&#xff0c;在Java中可以使用final定义类、方法和属性。 一.使用final定义的类不能再有子类&#xff0c;即&#xff1a;任何类都不能继承以final声明的父类。 在设计类的时候&#xff0c;如果这个类不需要有子类&#xff0c;类的细节不…

2022-2028年中国汽车制动器行业投资分析及前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国汽车制动器行业市场行业相关概述、中国汽车制动器行业市场行业运行环境、分析了中国汽车制…

[转]优秀编程的“艺术”

优秀的代码是一件艺术品&#xff1f;或者软件工艺宣言言过其实了&#xff1f;成为一名“优秀”的程序员&#xff0c;有什么要求&#xff1f; 设想你雇佣了一名水管工&#xff0c;让他更换地下室的旧管道。这个家伙在工作之前、之中、之后&#xff0c;他就没有停止过谈论他的管道…

洛谷 P5019 铺设道路(差分)

嗯... 题目链接&#xff1a;https://www.luogu.org/problem/P5019 首先简化一下题意&#xff1a; 给定一个长为N的数组&#xff0c;每次操作可以选择一个区间减去1&#xff0c;问最少多少次操作可以将数组中的数全变成0 N≤100000 思路&#xff1a; 首先对于第一个数字d_1我们至…

1小时教你做360度全景“小星球”效果图 Skillshare – Create a Panoramic ‘Little Planet’ from Anywhere

1小时教你做360度全景“小星球”效果图 Skillshare – Create a Panoramic ‘Little Planet’ from Anywhere 1小时教你做360度全景“小星球”效果图 Skillshare – Create a Panoramic ‘Little Planet’ from Anywhere 时长1h 2m 1280X720 MP4 语言&#xff1a;英语中文字幕…

BIO、NIO、AIO详解

BIO(Blocking I/O)就是传统的Java IO编程,其相关的类和接口在java.io包下。BIO是同步阻塞的,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)服务器端启动一个,注册端口,调用accpet方法监听客户端的Socket连接客户端启动Socket对服务器进行通信,默认情况下服务器端需要对每个客户建立一个线程与之通讯。

Java学习总结:12

多态性 1.方法的多态性&#xff1a;重载和覆写 重载&#xff1a;同一个方法名称&#xff0c;根据不同的参数类型及个数可以完成不同的功能&#xff1b; 覆写&#xff1a;同一个方法&#xff0c;根据不同的实例化的子类对象不同&#xff0c;所完成的功能也不同。 2.对象的多态性…