this和static

Posted Ivyvivid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了this和static相关的知识,希望对你有一定的参考价值。

  1this  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 
103static104     ★★编写类时,很少用到★★,除非类中只有方法,这时可以把该方法定义为静态方法
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 }

 

以上是关于this和static的主要内容,如果未能解决你的问题,请参考以下文章

在片段java类中使用“this”和getLastSignedInAccount时出现错误[重复]

JAVA之旅——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块

很实用的JQuery代码片段(转)

laravel特殊功能代码片段集合

关键字this super final static

16 final static super this