this和static
1 【this】 2 指的是明确的标记本类的结构 3 当前正在调用类中方法的对象,不是一个固定的 4 java中以“{}”为界限。如果现在属性名称和参数名称重名,那么默认情况下,如果没有加任何的限制,指的是最近的“{}”内的变量名称。 5 在这种情况下明确找到要访问的变量属于类中的属性的时候,需要在变量前加this,这样就可以准确的进行属性的标记 6 1.★★在以后的程序中,只要访问类中的属性,前面必须加“this”★★ 7 范例: 8 public class Book { 9 private String title; 10 private double price; 11 12 public Book(String title,double price){ 13 /*同名的属性,指的都是系统默认值*/ 14 title = title; 15 price = price; 16 /*this.属性,后面是传入的参数*/ 17 this.title = title; 18 this.price = price; 19 } 20 21 public String getInfo(){ 22 return "书名" + this.title + ",价格" + this.price; 23 } 24 25 public String getTitle() { 26 return title; 27 } 28 29 public void setTitle(String title) { 30 this.title = title; 31 } 32 33 public double getPrice() { 34 return price; 35 } 36 37 public void setPrice(double price) { 38 this.price = price; 39 } 40 41 public static void main(String[] args) { 42 Book book = new Book("java",89.5); 43 System.out.println(book.getInfo()); 44 } 45 } 46 47 调用方法:普通方法,构造方法 48 构造方法之间进行互相调用,形式this.(参数,参数) 49 2.★严谨地,调用本类方法,一定加上this★ 50 注意:1.this 一定要放在构造方法首行,也尽量放在普通方法首行 51 2.类中构造方法间的弧线调用,一定要保留出口 52 即,this 互调构造方法时,一定要至少保留一个构造方法没有使用this调用其他构造方法 53 范例: 54 public class Emp { 55 private int empno; 56 private String ename; 57 private double sal; 58 private String dept; 59 60 //构造函数可以快捷生成(source) 61 public Emp(){ 62 this(0,"无名氏",0.0,"未定"); 63 } 64 65 public Emp(int empno){ 66 this(empno, "临时工", 800, "后勤部"); 67 } 68 69 public Emp(int empno,String ename){ 70 this(empno, ename, 2000, "技术部"); 71 } 72 /*保留了一个(构造方法)的出口*/ 73 public Emp(int empno,String ename,double sal,String dept){ 74 this.empno = empno; 75 this.ename = ename; 76 this.sal = sal; 77 this.dept = dept; 78 } 79 80 public void print(){ 81 System.out.println("**************************"); 82 } 83 84 public String getInfo(){ 85 this.print(); //调用本类的方法 86 return "雇员编号:" + this.empno + ",\t姓名:" + this.ename + ",\t工资:" + this.sal + ",\t部门:" + this.dept; 87 } 88 89 public static void main(String[] args) { 90 Emp emp = new Emp(); 91 Emp emp2 = new Emp(1); 92 Emp emp3 = new Emp(2, "李四"); 93 Emp emp4 = new Emp(3, "张三", 1000.8, "行政部"); 94 System.out.println(emp.getInfo()); 95 System.out.println(emp2.getInfo()); 96 System.out.println(emp3.getInfo()); 97 System.out.println(emp4.getInfo()); 98 99 } 100 } 101 102 103 【static】 104 ★★编写类时,很少用到★★,除非类中只有方法,这时可以把该方法定义为静态方法 105 类.静态属性 106 类.静态方法 107 1.属性 108 范例: 109 public class Book { 110 private String title; 111 private double price; 112 113 static String pub = "清华大学出版社"; 114 115 public Book(String title,double price){ 116 this.title = title; 117 this.price = price; 118 } 119 120 public void print(){ 121 System.out.println("********************"); 122 } 123 124 public String getInfo1(){ 125 this.print(); //调用本类方法 126 return "书名:" + this.title + ",价格:" + this.price + ",出版社:" + this.pub; 127 } 128 129 public String getTitle() { 130 return title; 131 } 132 133 public void setTitle(String title) { 134 this.title = title; 135 } 136 137 public double getPrice() { 138 return price; 139 } 140 141 public void setPrice(double price) { 142 this.price = price; 143 } 144 145 public static void main(String[] args) { 146 Book book1 = new Book("java",89.5); 147 Book book2 = new Book("Android",12); 148 Book book3 = new Book("Oracle",20); 149 /*静态属性,只要一个对象修改了属性的内容,所有对象的static属性的内容就都将一起改变*/ 150 //book1.pub = "北京大学出版社"; 151 Book.pub = "北京大学出版社"; 152 System.out.println(book1.getInfo1()); 153 System.out.println(book2.getInfo1()); 154 System.out.println(book3.getInfo1()); 155 } 156 } 157 158 2.方法 159 范例: 160 package march_21; 161 162 public class Book { 163 private String title; 164 private double price; 165 166 static String pub = "清华大学出版社"; 167 168 public Book(String title,double price){ 169 this.title = title; 170 this.price = price; 171 } 172 /*静态方法*/ 173 public static void setPub(String p){ 174 pub = p;//this不能点静态属性 175 } 176 177 public void print(){ 178 System.out.println("********************"); 179 } 180 181 public String getInfo1(){ 182 this.print(); //调用本类方法 183 return "书名:" + this.title + ",价格:" + this.price + ",出版社:" + this.pub; 184 } 185 186 public String getTitle() { 187 return title; 188 } 189 190 public void setTitle(String title) { 191 this.title = title; 192 } 193 194 public double getPrice() { 195 return price; 196 } 197 198 public void setPrice(double price) { 199 this.price = price; 200 } 201 202 public static void main(String[] args) { 203 /*没实例化对象,也可以利用类名直接调用*/ 204 Book.setPub("北京大学出版社"); 205 206 Book book1 = new Book("java",89.5); 207 Book book2 = new Book("Android",12); 208 Book book3 = new Book("Oracle",20); 209 System.out.println(book1.getInfo1()); 210 System.out.println(book2.getInfo1()); 211 System.out.println(book3.getInfo1()); 212 } 213 } 214 215 ★static可以不new,直接调用;非static一定要new,才能调用★ 216 1.static方法不能直接访问非static属性或者方法,只能调用static属性或方法 217 2.非static方法可以调用static的属性或方法,不受限制 218 219 main函数中String[] args:程序运行的时候传递的参数,形式:TestDemo 参数 参数 参数 220 如果参数本身有空格,形式:TestDemo "Hello World" "Hello MLDN" 221 222 功能一:实现类实例化对象个数的统计 223 希望每当实例化一个类对象的时候都可以打印一个信息:产生的第x个实例化对象。 224 因为只要是新的实例化对象产生了,那么一定会去调用类中的构造方法, 225 所以可以在构造方法里面增加一个统计数据的操作,每当新对象产生之后统计的内容就自增一个。 226 范例: 227 public class BookStatic { 228 private static int num = 0; 229 230 public BookStatic(){ 231 num ++; 232 System.out.println("这是第" + num + "个产生的对象"); 233 } 234 235 public static void main(String[] args) { 236 new BookStatic();new BookStatic();new BookStatic(); 237 new BookStatic();new BookStatic();new BookStatic(); 238 } 239 } 240 241 功能二:实现属性的自动设置 242 例如,现在某一个类有一个无参构造方法,一个有参构造方法,有参构造主要的目的是传递一个title属性, 243 但是希望不管调用的是无参的还是有参的构造,都可以为title设置内容(尽量不使用重复的内容设置)。 244 范例: 245 public class BookStatic { 246 private static int num = 0; 247 private String title; 248 249 public BookStatic(){ 250 this("NOTITLE -- " + num++); 251 // num++; 252 } 253 254 public BookStatic(String title) { 255 this.title = title; 256 } 257 258 public String getTitle(){ 259 return this.title; 260 } 261 262 public static void main(String[] args) { 263 System.out.println(new BookStatic("java").getTitle()); 264 System.out.println(new BookStatic().getTitle()); 265 System.out.println(new BookStatic().getTitle()); 266 } 267 } 268 269 /*执行先后顺序:静态块>静态代码>静态的构造方法*/ 270 public class StaticDemo { 271 public StaticDemo(){ 272 System.out.println("静态的构造方法"); 273 } 274 275 //数据库用的比较多 276 { 277 System.out.println("这是静态代码"); 278 } 279 /*程序运行前,加载进去的,不管有么有实例化对象*/ 280 static{ 281 System.out.println("这是静态块"); 282 } 283 284 public static void main(String[] args) { 285 StaticDemo staticDemo = new StaticDemo(); 286 } 287 }
转载于:https://www.cnblogs.com/ivy-xu/p/5304096.html
this和static相关推荐
- c语言中external,static关键字用法
static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...
- Exception in thread main java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static;只能在静态类型或顶级类型中才能声明静态方法
Exception in thread "main" java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static:只能在静态类型或顶级类型中才 ...
- Static interface methods are only supported starting with Android N (--min-api 24): void okhttp3.log
错误内容如下 Error: Static interface methods are only supported starting with Android N (--min-api 24): vo ...
- Java 静态变量,静态方法,静态常量(java static 关键字)
Java 静态变量,静态方法,静态常量 就是变量 ,方法,常量前面添加了static 关键字 为什么要使用静态的呢 有时候在处理问题时会需要两个类在同一个内存区域共享一个数据, 不如现在 Main ...
- java static 作用详解
static表示 "静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,也可是修饰内部类, 我们常说的静态内部类,注意外部类不能使用静态的, static方 ...
- public static final int REMIN_REQUEST_CODE = 0x911 自己的大致理解
public static final int REMIN_REQUEST_CODE = 0x911; 自己理解为 一个静态常量,也就一个标识,自己目前主要在2个地方常用到 OnActivityRes ...
- C++ static
(1)static表示静态变量.局部变量存储在栈区,在{}结束时被释放.而static修饰的变量存储在全局区,在程序结束时被释放. (2)static修饰的变量在外部文件中无法调用,即使使用exter ...
- java static 可见性_Java多线程 synchronized与可见性的关系以及可见性问题总结
作者:七里香的编程之路 出自:OSCHINA 原文:my.oschina.net/u/4098550/blog/4548274 能保证可见性的措施 除了volatile 可以让变量保证可见性外.hap ...
- c cin.get()的用法小结_c语言中static 用法
static在c里面可以用来修饰变量,也可以用来修饰函数. 先看用来修饰变量的时候.变量在c里面可分为存在全局数据区.栈和堆里.其实我们平时所说的堆栈是栈而不是堆,不要弄混. int a ; int ...
- java内部类的权限符,static介绍、内部类、final、权限修饰符的作用范围,
static介绍.内部类.final.权限修饰符的作用范围,static 关键字:(可用于修饰方法.变量) static 特点: static是静态修饰符,一般修饰成员变量.被static修饰的属于全 ...
最新文章
- 2020 年深度学习最佳 GPU 一览,看看哪一款最适合你!
- [禅悟人生]拿得起放得下, 才是真幸福
- 从 Android 静音看正确的查找 bug 的姿势
- 【个人成长学习讨论小组】练习2:角色
- boost::math::filters::daubechies_scaling_filter用法的测试程序
- [vue] 你有使用做过vue与原生app交互吗?说说vue与ap交互的方法
- [css] 如何使用CSS实现段落首字母或首字放大效果?
- 【MS SQL】通过执行计划来分析SQL性能
- C++11与最小垃圾回收
- python删除txt文本文件第一行数据
- Ubuntu 20.04.2.0 LTS 系统安装过程详解 部署OJ参考
- python 读取地震道头数据_[宜配屋]听图阁
- Could not start AVD
- 设计模式之访问者模式(C# / JavaScript / PHP / Java / Python 演示代码)
- 局域网有一台计算机网络慢,局域网网速变慢的五种解决办法
- 八泉峡明星旅游目的地系列推介会即将举行 蒋大为将现身助阵
- c++的继承与派生之从入门到入坟-------集大成者
- 计算机编程的11种趋势:
- ubuntu20.04修改用户名【保留文件】
- 嵌入式操作系统--篮球记分计时系统
热门文章
- 爬虫实战学习笔记_2 网络请求urllib模块+设置请求头+Cookie+模拟登陆
- php留言板实现留言评价,PHP实现留言板功能的思路
- 属于python应用领域的有数据可视化_Python数据可视化
- JS面向对象——class定义类、类的构造函数、实例方法、访问器方法、静态方法、继承、super、多态
- React脚手架学习笔记
- Web框架——Flask系列之Flask简介(一)
- LeetCode 1007. 行相等的最少多米诺旋转
- LeetCode 1055. 形成字符串的最短路径(贪心)
- LeetCode 296. 最佳的碰头地点(坐标独立+中位数的地方最近)
- jlist放jbutton 按钮事件失效_电动高处作业吊篮操作如何面对一些突发事件