【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. Redis 千万不要乱用KEYS命令,不然会挨打的

    Redis现如今使用的场景越来越多?如何批量删除key呢? 有人说用KEYS命令,刚开始学Redis的时候就是用这个命令列出库中键. KEYS命令要谨慎使用. 为何?客观别急,我们先一步步来看. KE ...

  2. vue开源Element UI表单设计及代码生成器

    在日常的开发工作中,表单开发是较为繁琐且重复的.本文介绍一个我自己写的,提高开发效率的小工具. 1 可视化设计器 设计器基于Element UI ,可通过点击或拖拽的方式设计基本表单, 设计器生成的代 ...

  3. BigInteger&BigDecimal类

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

  4. Redis系列之----Redis的过期设置及淘汰策略

    Redis的过期时间机制和内存淘汰策略    Redis的数据是存储在内存中的,而服务器的内存大小是有限制的,除非宕机,否则这些数据会一直存在,对于一些不再使用的key,也应当进行删除,否则会浪费内存 ...

  5. 到底如何配置 maven 编译插件的 JDK 版本

    千言万语不及官方文档,详情请阅读 compiler:compile 文档 配置 maven 编译插件的 JDK 版本 maven 编译插件(maven-compiler-plugin)有默认编译 JD ...

  6. Spring Boot从零入门3_创建Hello World及项目剖析

    目录 1 前言 2 名词术语 3 创建Hello World项目 3.1 基于STS4创建项目 3.2 使用Spring Initializr Website创建项目并导入 3.3 基于Spring ...

  7. javascript 实现中文按照拼音首字母排序

    js提供了sort()方法来对数组内的数据进行排序,但是只是对英文有作用,这个时候需要自定义排序的规则 ['张三','李四','王五'].sort((a, b) => a.localeCompa ...

  8. Scala与Mongodb实践2-----图片、日期的存储读取

    目的:在IDEA中实现图片.日期等相关的类型在mongodb存储读取 主要是Scala和mongodb里面的类型的转换.Scala里面的数据编码类型和mongodb里面的存储的数据类型各个不同.存在类 ...

  9. cogs 1176. [郑州101中学] 月考 Map做法

    1176. [郑州101中学] 月考 ★★☆   输入文件:mtest.in   输出文件:mtest.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 在上次的月考中B ...

  10. 「BZOJ4173」数学

    题面 已知 \[\large{S(n,m)=\{k_{1},k_{2},\cdots k_{i}\}}\] 且每个 \(k\) 满足 \[\large{n \%k+m\%k\geq k}\] 求 \[ ...