【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. C++版本的UnEscape 解析\uxxxx\uxxxx编码字符

    解析类似于这种Unicode编码格式的字符串 \u5b55\u5987\u88c5\u590f\u88c52018\u65b0\u6b3e\u5bbd\u677e\u77ed\u8896\u4e2d\ ...

  2. 洛谷P1082 同余方程 题解

    题目链接:https://www.luogu.com.cn/problem/P1082 题目大意: 求关于 \(x\) 的同余方程 ax≡1(mod b) 的最小正整数解. 告诉你 \(a,b\) 求 ...

  3. 1049 数列的片段和 (20 分)C语言

    给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我们有 (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) ...

  4. 微信小程序开发笔记(二)

    一.前言 继承上一篇所说的,有了对微信小程序的基础概念后,这边将会示范动手做一个小程序,在动手的过程中我们可以更快的熟悉小程序里面的架构和开发流程. 二.小程序的设计 这次要做的是一个猜数字的程序,程 ...

  5. docker-tmpfs挂载

    使用tmpfs挂载 卷和绑定装置允许在主机和容器之间共享文件,以便即使在容器停止后也可以保留数据. 如果你在Linux上运行Docker,你有第三个选择:tmpfs mounts.使用tmpfs装载创 ...

  6. spring boot使用拦截器

    1.编写一个拦截器 首先,我们先编写一个拦截器,和spring mvc方式一样.实现HandlerInterceptor类,代码如下 package com.example.demo.intercep ...

  7. 如何在oracle中缩小临时表空间?ORA-01652无法在表空间中扩展temp

    查询临时表空间有多大: SQL> SELECT tablespace_name, file_name, bytes FROM dba_temp_files WHERE tablespace_na ...

  8. JAVA读取yml配置文件指定key下的所有内容

    先引入需要的依赖 <!--读取yml文件--> <dependency> <groupId>org.yaml</groupId> <artifac ...

  9. 记第一个javaweb网页

      <%@ page language="java" contentType="text/html; charset=utf-8" pageEncodin ...

  10. Spring Boot2 系列教程 (八) | 配置日志

    前言 如题,今天介绍 springboot 默认日志的配置. 默认日志 Logback 默认情况下,Spring Boot 用 Logback 来记录日志,并用 INFO 级别输出到控制台.如果你在平 ...