Java Study For Six Day( 面向对象二)
static(静态)关键字
用于修饰成员(成员变量和成员函数)
被修饰后的成员具备以下的特点
随着类的加载而加载
优先于对象存在
被所有的对象共享
可以被类名直接调用
静态注意事项
静态方法只能访问静态成员(原因:因为静态的内容是随着类的加载而加载,它先进内存)
静态方法中不能使用this、super关键字
主函数是静态的
public static void main(String[] args)
public:公共的意思,是最大权限修饰符。
static:由于jvm调用main方法的时候,没有创建对象。
只能通过类名调用。所以,main必须用static修饰。
void:由于main方法是被jvm调用,不需要返回值。用void修饰。
main:main是主要的意思,所以jvm采用了这个名字。是程序的入口。
String[]:字符串数组
args:数组名
在运行的时候,通过java命令给args数组赋值。
格式:java MainTest hello world itcast
静态变量和成员变量的区别
1.调用方式
静态变量也称为类变量,可以直接通过类名调用,也可以通过对象调用,这个变量属于类
成员变量也称为实例变量,只能通过对象名调用,这个变量属于对象
2.存储位置
静态变量存储在方法区中的静态区而成员变量存储在堆内存中
3.生命周期
静态变量随着类的加载而存在,随着类的消失而消失,周期较长
成员变量随着对象的创建而存在,随着对象的消失而消失
4.与对象的相关性
静态变量是所有对象共享的数据而成员变量是每个对象所特有的数据
静态的优点和弊端
优点:对对象的共享的数据进行单独的空间存储,节省内存,可以直接用类名调用
弊端:生命周期较长,随着类的消失才消失,访问权限出现限制,既静态只能访问静态,访问非静态需要使用对象
为什么使用静态?
A:当所有对象共享某个数据的时候,就把这个成员变量定义为静态修饰的。
B:当某个方法没有访问该类中的非静态成员,就可以把这个方法定义为静态修饰。
但是因为静态的生命周期较长,所以一般不推荐使用
静态代码块
它只执行一次,比main还先执行
执行的顺序:静态代码块--->构造代码块--->构造函数
class Person
{
String name;//成员变量,实例变量。(对象在该实例才在)
static String country = "cn";//静态的成员变量,类变量
public void show()
{
System.out.println(name+"::::"+country);
}
}
class StaticDemo
{
public static void main(String[] args)
{
//Person p = new Person();
//p.name = "zhangsan";
//p.show();
System.out.println(Person.country);
}
}
*主函数
class MainDemo
{
public static void main(String[] args)//new String[]
{
System.out.println(args.length);
}
}
//String[] args = new String[3];
//String [] args = null;
class Person
{
String name;
public static void show()
{
System.out.println("haha");
}
}
class StaticDemo1
{
public static void main(String[] args)
{
//Perosn p = new Person();
//p.show();
Person.show();
}
}
*静态的应用
public class ArrayTool
{
private ArrayTool(){};//构造函数私有化:为了更为严谨,强制让该类不能建立对象。
public static int getMax(int[] arr)
{
int max = 0;
for(int x = 1;x<arr.length;x++)
{
if(arr[x]>arr[max])
max = x;
}
return arr[max];
}
public static int getMin(int[] arr)
{
int min =0;
for (int x = 1;x<arr.length ;x++ )
{
if(arr[x]<arr[min])
min = x;
}
return arr[min];
}
public static void selectSort(int [] arr)
{
for (int x = 0;x<arr.length-1 ;x++ )
{
for (int y =x+1;y<arr.length ;y++ )
{
if(arr[x]>arr[y])
{
swap(arr,x,y);
}
}
}
}
public static void bubbleSort(int[] arr)
{
for (int x = 0;x<arr.length-1 ;x++ )
{
for (int y=0;y<arr.length-1-x ;y++ )
{
if(arr[y]>arr[y+1])
{
swap(arr,y,y+1);
}
}
}
}
private static void swap(int[] arr,int a,int b)//把不需要其他类使用的功能私有化。
{
int temp = arr[a];
arr[a] =arr[b];
arr[b] =temp;
}
public static void printArray(int[] arr)
{
System.out.print("[");
for (int x=0;x<arr.length ;x++ )
{
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]+"]");
}
}
}
一个类总会默认会有一个空参数的构造函数。
这个默认的构造函数的权限和所属类一致
如果类被public修饰,那么默认的构造函数也被public修饰。
如果类没有被public修饰,那么默认的构造函数,也没有public修饰
默认构造函数的权限是随着类的变化而变化
如何制作(API)
全称:Application Program Interface 应用程序接口
类中的内容需要用文档注释
使用JDK\bin目录下的javadoc工具
格式:javadoc -d 目录 -author -version Arraytools.java
单例设计模式
设计模式:解决某类问题行之有效的方法,是一种思想,是规律的总结
用来保证某个类在内存中只有一个对象
保证唯一性的思想及步骤
为了避免其它程序建立该类的对象,先禁止其它程序建立该类的对象,即将构造函数私有化
为了其它程序能访问到该类对象,从而在本类中需要创建一个私有的对象
为了方便其它程序能访问到该类对象,因而需要对外提供一个公共的访问方式
例如:javaAPI中的Runtime类就是一个典型的单例设计模式
单例设计模式的两种方式
A:饿汉式 当类加载的时候,就创建对象。
class Student
{
private Student(){}
private static final Student s = new Student();
public static Student getInstance()
{
return s;
}
}
B:懒汉式 当使用的使用,才去创建对象。
class Student
{
private Student(){}
private static final Student s = null;
public static Student getInstance()
{
if(s==null)
{
//线程1就进来了,线程2就进来了。
s = new Student();
}
return s;
}
}
饿汉式和懒汉式的区别:
饿汉式是类一加载进内存就创建好了对象;
懒汉式则是类才加载进内存的时候,对象还没有存在,只有调用了getInstance()方法时,
对象才开始创建。
懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全问题,解决线程安全问题
可以加同步来解决。但是加了同步之后,每一次都要比较锁,效率就变慢了,
所以可以加双重判断来提高程序效率。
注:开发常用饿汉式,因为饿汉式简单安全。懒汉式多线程的时候容易发生问题
附加:
Math类的使用
数学操作类:给类都是静态的,没有构造方法
掌握的知识
成员变量
E:比任何其它值都更接近e(即自然对数的底数)的double值
PI:比其它任何值更接近PI(即圆的周长与直径之比)的double值
成员方法
static double abs(double a)返回double值的绝对值 返回绝对值
static double ceil(double a) 返回最小值的double值,该值大于或是等于参数,并等于某个整数
static double floor(double a)返回最大值double值,该值小于或是等于参数,并等于某个整数
max:返回两个值的较大的那个
min:返回两个值的较小的那个
static long round(double a)返回最接近参数的long
static int round(float a)返回最接近参数的int
static double random()返回带正号的double值,该值大于或是等于0.0且小于1.0
static double pow(double a,double b)返回第一个参数的第二个参数次幂的值
static double sqrt(double a)返回正确的舍入的double值的平方根
Java Study For Six Day( 面向对象二)的更多相关文章
- Java学习笔记9(面向对象二:this、继承、抽象类)
就近原则: 类中的方法中的变量和成员变量重名时,调用类的方法时候,生效的是方法中的变量,如果方法中没有定义变量,才会去成员变量中寻找 于是,提出了this关键字,为了区分重名问题 public cla ...
- Java第三次作业——面向对象基础(封装)
Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性 封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义: ...
- Javascript面向对象二
Javascript面向对象二 可以通过指定原型属性来对所有的对象指定属性, Object.prototype.name="zhangsan"; Object.prototype. ...
- Java第五次作业--面向对象高级特性(抽象类与接口)
Java第五次作业--面向对象高级特性(抽象类与接口) (一)学习总结 1.在上周完成的思维导图基础上,补充本周的学习内容,对Java面向对象编程的知识点做一个全面的总结. 2.汽车租赁公司,出租汽车 ...
- Java第四次作业——面向对象高级特性(继承和多态)
Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...
- Java第四次作业—面向对象高级特性(继承和多态)
Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...
- 2. 星际争霸之php面向对象(二)
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- [Java聊天室server]实战之二 监听类
前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...
- java微信开发API解析(二)-获取消息和回复消息
java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
随机推荐
- Git使用经验总结6-删除远端历史记录
删除远端的历史记录但是不影响最新的仓库内容是笔者一直想实现的功能,有两个很不错的用处: 有的历史提交不慎包含了比较敏感的信息,提交的时候没注意,过了一段时间才发现.这个时候已经有了很多新的历史提交,无 ...
- 事务TRANSACTION 1
MySQL事务是指一组SQL语句作为一个工作单元,同生共死.类似JS中的Array.prototype.every方法 事务的特点 原子性(Atomicity):即事务中的SQL像原子一样牢不可破,无 ...
- parser.add_argument
parser.add_argument 在解析参数时,有个地方很值得注意. --dict-name,会把dict-name解析为变量dict_name.也就是说会把破折号转成下划线.
- C++ STL set/multiset容器
set/multiset容器 简介 Set的特性是,所有元素都会根据元素的值自动被排序.Set不允许两个元素有相同的值. Set的迭代器iterator是一种const_iterator,不能通过迭代 ...
- 暑假集训CSP提高模拟 16
\[暑假集训CSP提高模拟 \lim_{x\rightarrow\infty}\frac{8f_{x}}{f_{x+1}}\times(\sqrt{5}+1),\ \forall f_{x}=f_{x ...
- 【VMware VCF】使用 VCF Import Tool 将现有 vSphere 环境导入为 VI 域。
VCF Import Tool 工具使用两种方式来帮助客户将现有的 vSphere 或 vSphere + vSAN 环境转变为 VMware Cloud Foundation 环境,分别是转换(Co ...
- web端ant-design-vue Modal.info组件自定义icon和title使用小节
web端ant-design-vue Modal.info组件自定义icon和title整理小节,最近在项目中用到了自定义icon和title的功能,经过测试发现,如果自定义icon title会自动 ...
- Vue的nextTick的原理
知识储备:事件循环有宏任务和微任务,宏任务所处的队列就是宏任务队列,队列可以有多个,第一个队列只有一个任务就是执行主线程的js代码,剩余队列任务有setTimeout setInterval微任务所处 ...
- 02-react中jsx的基本使用
// 使用 createElement太繁琐 不直观 不优雅开发体验不好 代码维护不行 // jsx 不是 js 而是 js的扩展语法 // jsx 是react的核心内容 // react项目中已经 ...
- 手动检查 token 是否过期
1.在 存储 token 的时候说明登录了 此时 把时间戳记录一下 js-cookies - auth.js // 导入 js-cookie 用于操作 cookies import Cookies ...