this和static
【this】
指的是明确的标记本类的结构
当前正在调用类中方法的对象,不是一个固定的
java中以“{}”为界限。如果现在属性名称和参数名称重名,那么默认情况下,如果没有加任何的限制,指的是最近的“{}”内的变量名称。
在这种情况下明确找到要访问的变量属于类中的属性的时候,需要在变量前加this,这样就可以准确的进行属性的标记
1.★★在以后的程序中,只要访问类中的属性,前面必须加“this”★★
范例:
public class Book {
private String title;
private double price; public Book(String title,double price){
/*同名的属性,指的都是系统默认值*/
title = title;
price = price;
/*this.属性,后面是传入的参数*/
this.title = title;
this.price = price;
} public String getInfo(){
return "书名" + this.title + ",价格" + this.price;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} public static void main(String[] args) {
Book book = new Book("java",89.5);
System.out.println(book.getInfo());
}
} 调用方法:普通方法,构造方法
构造方法之间进行互相调用,形式this.(参数,参数)
2.★严谨地,调用本类方法,一定加上this★
注意:1.this 一定要放在构造方法首行,也尽量放在普通方法首行
2.类中构造方法间的弧线调用,一定要保留出口
即,this 互调构造方法时,一定要至少保留一个构造方法没有使用this调用其他构造方法
范例:
public class Emp {
private int empno;
private String ename;
private double sal;
private String dept; //构造函数可以快捷生成(source)
public Emp(){
this(0,"无名氏",0.0,"未定");
} public Emp(int empno){
this(empno, "临时工", 800, "后勤部");
} public Emp(int empno,String ename){
this(empno, ename, 2000, "技术部");
}
/*保留了一个(构造方法)的出口*/
public Emp(int empno,String ename,double sal,String dept){
this.empno = empno;
this.ename = ename;
this.sal = sal;
this.dept = dept;
} public void print(){
System.out.println("**************************");
} public String getInfo(){
this.print(); //调用本类的方法
return "雇员编号:" + this.empno + ",\t姓名:" + this.ename + ",\t工资:" + this.sal + ",\t部门:" + this.dept;
} public static void main(String[] args) {
Emp emp = new Emp();
Emp emp2 = new Emp(1);
Emp emp3 = new Emp(2, "李四");
Emp emp4 = new Emp(3, "张三", 1000.8, "行政部");
System.out.println(emp.getInfo());
System.out.println(emp2.getInfo());
System.out.println(emp3.getInfo());
System.out.println(emp4.getInfo()); }
} 【static】
★★编写类时,很少用到★★,除非类中只有方法,这时可以把该方法定义为静态方法
类.静态属性
类.静态方法
1.属性
范例:
public class Book {
private String title;
private double price; static String pub = "清华大学出版社"; public Book(String title,double price){
this.title = title;
this.price = price;
} public void print(){
System.out.println("********************");
} public String getInfo1(){
this.print(); //调用本类方法
return "书名:" + this.title + ",价格:" + this.price + ",出版社:" + this.pub;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} public static void main(String[] args) {
Book book1 = new Book("java",89.5);
Book book2 = new Book("Android",12);
Book book3 = new Book("Oracle",20);
/*静态属性,只要一个对象修改了属性的内容,所有对象的static属性的内容就都将一起改变*/
//book1.pub = "北京大学出版社";
Book.pub = "北京大学出版社";
System.out.println(book1.getInfo1());
System.out.println(book2.getInfo1());
System.out.println(book3.getInfo1());
}
} 2.方法
范例:
package march_21; public class Book {
private String title;
private double price; static String pub = "清华大学出版社"; public Book(String title,double price){
this.title = title;
this.price = price;
}
/*静态方法*/
public static void setPub(String p){
pub = p;//this不能点静态属性
} public void print(){
System.out.println("********************");
} public String getInfo1(){
this.print(); //调用本类方法
return "书名:" + this.title + ",价格:" + this.price + ",出版社:" + this.pub;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} public static void main(String[] args) {
/*没实例化对象,也可以利用类名直接调用*/
Book.setPub("北京大学出版社"); Book book1 = new Book("java",89.5);
Book book2 = new Book("Android",12);
Book book3 = new Book("Oracle",20);
System.out.println(book1.getInfo1());
System.out.println(book2.getInfo1());
System.out.println(book3.getInfo1());
}
} ★static可以不new,直接调用;非static一定要new,才能调用★
1.static方法不能直接访问非static属性或者方法,只能调用static属性或方法
2.非static方法可以调用static的属性或方法,不受限制 main函数中String[] args:程序运行的时候传递的参数,形式:TestDemo 参数 参数 参数
如果参数本身有空格,形式:TestDemo "Hello World" "Hello MLDN" 功能一:实现类实例化对象个数的统计
希望每当实例化一个类对象的时候都可以打印一个信息:产生的第x个实例化对象。
因为只要是新的实例化对象产生了,那么一定会去调用类中的构造方法,
所以可以在构造方法里面增加一个统计数据的操作,每当新对象产生之后统计的内容就自增一个。
范例:
public class BookStatic {
private static int num = 0; public BookStatic(){
num ++;
System.out.println("这是第" + num + "个产生的对象");
} public static void main(String[] args) {
new BookStatic();new BookStatic();new BookStatic();
new BookStatic();new BookStatic();new BookStatic();
}
} 功能二:实现属性的自动设置
例如,现在某一个类有一个无参构造方法,一个有参构造方法,有参构造主要的目的是传递一个title属性,
但是希望不管调用的是无参的还是有参的构造,都可以为title设置内容(尽量不使用重复的内容设置)。
范例:
public class BookStatic {
private static int num = 0;
private String title; public BookStatic(){
this("NOTITLE -- " + num++);
// num++;
} public BookStatic(String title) {
this.title = title;
} public String getTitle(){
return this.title;
} public static void main(String[] args) {
System.out.println(new BookStatic("java").getTitle());
System.out.println(new BookStatic().getTitle());
System.out.println(new BookStatic().getTitle());
}
} /*执行先后顺序:静态块>静态代码>静态的构造方法*/
public class StaticDemo {
public StaticDemo(){
System.out.println("静态的构造方法");
} //数据库用的比较多
{
System.out.println("这是静态代码");
}
/*程序运行前,加载进去的,不管有么有实例化对象*/
static{
System.out.println("这是静态块");
} public static void main(String[] args) {
StaticDemo staticDemo = new StaticDemo();
}
}
this和static的更多相关文章
- static,你还敢用吗?(二)
为了压系统,昨天小组在测试环境模拟了一大批订单数据.今天上午查看记录的账单计息日志,发现了一大堆的MySqlException MySql.Data.MySqlClient.MySqlExceptio ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- const extern static 终极指南
const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...
- PHP static静态属性和静态方法
这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内 ...
- static,你还敢用吗?
我用火狐的HttpRequester测试开发组里一个同学发布的Web API接口,遇到了一个奇怪的问题. 我测试边界情况时,第一次调用响应的结果是正常的,但当再次及以后的请求时,却返回了异常“Syst ...
- Java关键字:static
通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...
- Android 中关于static的使用问题
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5251564.html 项目中,在不停地接收串口数据很长一段时间(几小时)后,会偶然性的报错.初步排除了oom ...
- iOS: 在UIViewController 中添加Static UITableView
如果你直接在 UIViewController 中加入一个 UITableView 并将其 Content 属性设置为 Static Cells,此时 Xcode 会报错: Static table ...
- 浅谈Static关键字
1.使用static关键字声明的属性为全局属性 未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beiji ...
- 今天思考一个问题,PHP const和static的区别
static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心 ...
随机推荐
- 使用这些idea插件让开发效率提高5倍
idea 有很多非常好用的插件,用好了这些插件能够极大的提高开发效率 插件用的好,bug 就追不上了我
- CommandPattern(命令模式)-----Java/.Net
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该 ...
- The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone错误的解决办法【已解决】
---恢复内容开始--- The server time zone value '�й���ʱ��' is unrecognized or represents more than one time ...
- Python 官方团队在打包项目中踩过的坑
花下猫语:这是 packaging 系列的第三篇译文,该系列是全网关于此话题的最详尽(水平也很高)的一个系列.原作者是 Python 官方打包团队成员,是 virtualenv 和 tox 项目的维护 ...
- 【转】最简单的安装pip的方法
网上有各种方法安装pip,针对不同的系统方法还不一样,最后发现还是下面这种方法最简单,直接了当干脆方便,适用于Windows和Linux. (1)下载pip 进入https://pypi.python ...
- 关于redis分布式锁
Lock 分布式锁 1.安全属性:互斥,不管任何时候,只有一个客户端能持有同一个锁. 2.效率属性A:不会死锁,最终一定会得到锁,就算一个持有锁的客户端宕掉或者发生网络分区. 3.效率属性B:容错,只 ...
- python中end=''
end = '' 用于连接下一条的print输出内容 效果图: 代码: # end='' 用于连接下一条输出语句 print('哈哈哈') print('嘻嘻嘻') print('\n\n') pr ...
- (2)MongoDB副本集自动故障转移原理
前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节. 默认搭建的replica set均在主节点读写,辅助节点冗余部署,形成高可用和备份, 具备自动故障转移的能 ...
- 基于 HTML5 WebGL + WebVR 的 3D 虚实现实可视化系统
前言 2019 年 VR, AR, XR, 5G, 工业互联网等名词频繁出现在我们的视野中,信息的分享与虚实的结合已经成为大势所趋,5G 是新一代信息通信技术升级的重要方向,工业互联网是制造业转型升级 ...
- 构造分组背包(CF)
Ivan is a student at Berland State University (BSU). There are n days in Berland week, and each of t ...