zoukankan      html  css  js  c++  java
  • 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 + ",	姓名:" + this.ename + ",	工资:" + this.sal + ",	部门:" + 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 }
  • 相关阅读:
    Socket 之 同步以及异步通信
    Socket 之 c#实现Socket网络编程
    Socket 之 API函数介绍
    Socket 之 原理与编程基础
    C# 之 user32函数库
    WinServer 之 访问同网段服务器 或 同一服务器多虚拟机间的访问
    annex-b格式
    FLV文件格式解析
    PHP5中的stdClass
    web服务器【apache/nginx] 关闭目录的浏览权限
  • 原文地址:https://www.cnblogs.com/ivy-xu/p/5304096.html
Copyright © 2011-2022 走看看