【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的更多相关文章

  1. static,你还敢用吗?(二)

    为了压系统,昨天小组在测试环境模拟了一大批订单数据.今天上午查看记录的账单计息日志,发现了一大堆的MySqlException MySql.Data.MySqlClient.MySqlExceptio ...

  2. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  3. const extern static 终极指南

    const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...

  4. PHP static静态属性和静态方法

    这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内 ...

  5. static,你还敢用吗?

    我用火狐的HttpRequester测试开发组里一个同学发布的Web API接口,遇到了一个奇怪的问题. 我测试边界情况时,第一次调用响应的结果是正常的,但当再次及以后的请求时,却返回了异常“Syst ...

  6. Java关键字:static

    通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...

  7. Android 中关于static的使用问题

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5251564.html 项目中,在不停地接收串口数据很长一段时间(几小时)后,会偶然性的报错.初步排除了oom ...

  8. iOS: 在UIViewController 中添加Static UITableView

    如果你直接在 UIViewController 中加入一个 UITableView 并将其 Content 属性设置为 Static Cells,此时 Xcode 会报错: Static table ...

  9. 浅谈Static关键字

    1.使用static关键字声明的属性为全局属性 未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beiji ...

  10. 今天思考一个问题,PHP const和static的区别

    static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心 ...

随机推荐

  1. 洛谷$P$2286 宠物收养场 $[HNOI2004]$ $splay$

    正解:$splay$ 解题报告: 传送门! $splay$板子,,,? 先考虑这题要实现些什么东西嘛$QwQ$ 其实只要实现一个东西?就查询数列中与给定数字相差最小的数,显然用$splay$查询前驱后 ...

  2. Java日志体系居然这么复杂?——架构篇

    本文是一个系列,欢迎关注 日志到底是何方神圣?为什么要使用日志框架? 想必大家都有过使用System.out来进行输出调试,开发开发环境下这样做当然很方便,但是线上这样做就有麻烦了: 系统一直运行,输 ...

  3. 机器学习之路--Matplotlib

    1.绘制折线图 在pandas里面有一种数据类型为datatime ,可以将不规范的日期改为:xxxx-xx-xx import pandas as pd import numpy as np a = ...

  4. Linux学习之路--shell学习

    shell基础知识 什么是Shell Shell是命令解释器(command interpreter),是Unix操作系统的用户接口,程序从用户接口得到输入信息,shell将用户程序及其输入翻译成操作 ...

  5. HDU4734 F(x) 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4734 题目大意: 对于一个 \(n\) 位十进制数 \(x\) (\(A_nA_{n-1}A_{n-2 ...

  6. 克隆linux系统后,将eth1修改成eth0

    使用VMware克隆的linux系统之后,发现网卡信息只有eth1,却没有eth0.将eth1修改成eth0. 1.vi /etc/udev/rules.d/70-persistent-net.rul ...

  7. Redis 持久化的两种方案

    reids是一个key-value存储系统,为了保证效率,缓存在内存中,但是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,以保证数据的持久化. 所以:redis是一个支持持 ...

  8. BigInteger&BigDecimal类

    BigInteger类 当需要处理超过 long 数值范围的大整数时,java.math 包中的 BigInteger 类提供任意精度的整数运算. 构造方式 //构造方法,将BigInteger的十进 ...

  9. CSS3(5)---伸缩布局(Flex)

    CSS3(5)---伸缩布局 有关页面布局之前写过三篇相关文章: 1.CSS(5)---盒子模型 2.CSS(6)---浮动(float) 3.CSS(8)---定位(position) 一.什么是F ...

  10. 小技巧(2) 查询自己博客的SEO(如果违规,请先提醒)

    今天,教大家查看自己博客的SEO. 首先,上网站http://seo.chinaz.com/ 接着,在网页输入框中输入自己博客地址(带后面路径,不是cnblogs.com这样的,类似https://w ...