Java 学习笔记(2015.7.13~17)

Java 学习笔记(2015.7.13~17)

Java



this关键字

  • 表示本类中的属性,调用本类中的方法
class Person {   
    private String name;    
    private int age;    
    public Person(String name, int age) {
        this.name = name;//调用本类中的属性
        this.age = age;//同上} //get&set方法:    
        public String getName() {        
            return name;    }    
        public void setName(String name) {
                this.name = name;   
        }    
        public int getAge() {
                return age;    
        }    
        public void setAge(int age) {
                this.age = age;
        }    
        public static void tell() {
                System.out.println("姓名:"+this.getName()+"年龄:"+this.getAge());
        }
    }
  • 调用构造方法
    调用时必须写在构造方法的第一行。
public Person(String name, int age) {
    this();
    //调用无参数构造方法
    this.name = name;
    this.age = age;
    }
    public Person() {
        System.out.println(""无参数构造方法);
    }
  • 表示当前对象
    举个栗子:
class Person {
    public void tell() {
            System.out.println(this);    
    }
} 
public static void main(String args[]) {
    Person p1 = new Person(); 
    System.out.println(p1);    
    p1.tell();
}

输出的结果是一样样的,这里this引用了当前对象也就是自己。

搭建Android开发集成环境

  • 离线版Android SDK ,IDEA

day06

  • 栈内存中保存的是堆内存空间的访问地址。
  • 封装性,用private保护起来,不让外部直接访问,一般使用setter&getter方法获得属性。
  • String 两种实例化方法的区别。
    • 直接赋值,生成一个匿名对象。
    • 标准的new构造方法
  • 使用直接赋值即匿名对象的优势:如果一个字符串已经被一个对象引用,则以后再有相同的字符串声明时,就不会再重新开辟空间。
  • 比较下面两个程序
    1
public class Test1 {    
    public static void main(String args[]) {
            String str1 = "hello";        
            System.out.println("fun()方法调用之前:" + str1);        
            fun(str1);        
            System.out.println("fun()方法调用之后:" + str1);    
    }    
    public static void fun(String str2) {        
        str2 = "MLDN";        
    }
}

输出:

fun()方法调用之前:hello
fun()方法调用之后:hello

字符串的内容不可改变,修改字符串时实际上是new出了一个新字符串并改变了内存地址。形参指向了"MLDN"的内存地址。

2

class Demo {    
    String temp = "hello";
}
public class Test2 {    
    public static void main(String args[]) {
            Demo d1 = new Demo();        
            d1.temp = "world";        
            System.out.println("fun()方法调用之前:" + d1.temp);        
            fun(d1);        
            System.our.prtinln("fun()方法调用之后:" + d1.temp);    
    }    
    public static void fun(Demo d2) {
            d2.temp = "MLDN";    
    }
}

输出:
fun()方法调用之前:world
fun()方法调用之后:MLDN
本例修改的是对象的属性!是堆内存对象内部的修改!    哈哈哈,终于懂了

  • this关键字

    • 表示类中的属性
    • 调用本类中的构造方法(必须写在构造方法的第一行;构造方法间相互调用时                                     )
    • 表示当前对象
  • 对象的比较
    == 比较内存地址,equals比较内容。要想比较对象,必须比较其内容,若类中没有重写equals方法,则要比较其属性内容。
  • static关键字
    • static声明的属性叫做全局属性或类属性(类里声明的变量为成员变量,方法里声明的变量为局部变量)
    • static声明的属性是所有对象共享的,所以用类名称.static属性的方式调用更好
    • static声明的方法叫做类方法,用类名引用
    • 用static 声明的方法,不会将对象的引用传递给它。讲人话谢谢。
      答:static声明的方法不能调用非static的属性和方法(门当户对)。因为程序中的所有属性和方法必须在对象开辟开辟对内存后才能调用,而static类的方法在对象未被实例化时就可以用类名调用。
    • 因为static属性是类对象共有的,所以可以用来统计一个类生产了多少个实例化对象

day07

  • eclips快捷键

    • Alt+/ 自动联想

1、代码块

1、普通代码块:直接在方法或语句中定义的代码块。

2、构造块:构造代码块是直接写在类中的代码块。

class Demo {    
    public Demo() {
            System.out.println("2、构造方法。");  
            //定义构造方法    
    }   
    {System.out.println("1、构造块");}      //定义构造块}
    public class Test {    
        public static void main(String args[]) {        
        new Demo(); //实例化对象        
        new Demo();        
        new Demo();    
        }
    }

输出:
1、构造块
2、构造方法
1、构造块
2、构造方法
1、构造块
2、构造方法
可知构造块优先于构造方法执行,而且每次实例化对象时都会执行。

3、静态代码块:用static声明的代码块

  • 主方法所在类中的静态代码块优先主方法执行,类中定义的静态代码块优先于构造块执行,而且静态代码块只执行一次。

2、方法重载 overload

  • 方法名相同,参数不同
  • Python使用位置参数,默认参数等处理

day08

1、package & import
注意:

  • 使用系统中的类同样需要import
  • java.lang包中的类可以直接使用,不需要导入

2、继承  extends
条件:A 是一种 B ,  class A extends B
一旦继承,子类就自动拥有了父类中提供的成员变量以及方法
(构造方法除外)
注意: java只支持单继承

3、访问控制

修饰符 类本身 包中 继承 其他
private YES NO NO NO
default/package YES YES NO NO
protected YES YES YES NO
public YES YES YES YES

public 或者 default修饰类(内部类除外)
注意: 一个源文件中只能有一个 public 修饰的类,并且这个类要与源文件同名。但是可以多个默认修饰的类

4、方法的重写 override
前提:继承

注意:
重写的方法不能比被重写的方法有更严格的权限控制
重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型

5、super
super:表示父类对象的引用
super():表示在子类中调用父类的构造方法
注意:创建出子类对象,必须先创建出它的父类对象
当this与super在一起的时候,两个都要在第一行搞毛啊,所以让super()使用隐式调用就好。
a、当子类跟父类都没有可见的构造方法时
super();必须放在子类构造方法中第一行
b、如果子类中没有显性调用super(),默认调用父类中
无参的构造方法
c、如果子类中没有显性调用super(),父类中存在有参
的构造方法时,程序将出错

结合 this

6、对象转型
一个父类的引用类型变量可以“指向”其子类的对象。
一个父类的引用不可以访问其子类对象新增加的成员(变量,方法)

向上转型:父类引用指向之类对象
向下转型:必须要先向上转型

day09

1、访问控制
get   set方法

2、Object   如果一个类没有声明继承某个类,它就默认继承Object。

  • 所有的类都是Object的子类
  • HashCode:方便查找
  • toString 有快捷方法
  • equals

    注意:
    a、如果两个对象相互equals,它们的hashCode肯定相同
    b、如果它们的hashCode值相等,两对象不一定相等,此时
    还需查看equals方法之后才能确认
    c、重写equals一般都要重写hashCode
    d、当两个对象equals后,它们的hashCode就相同了
    e、hashCode()是一个快捷方式,比如比较10个对象,先比较它们的hashCode值,不同的直接pass,然后再用equals比较留下来的对象

3、多态(动态绑定,持绑定)
只有在运行时区判断对象的实际类型

多态存在的三个必要条件
a、要有继承
b、要有重写
c、要有父类声明指向子类实现 (向上转型)

4、抽象类  abstract
a、用abstract修饰的方法,成为抽象方法;
只有方法的声明,没有方法的实现
b、含有抽象方法的类必须声明为抽象类
c、抽象类就是给别人继承的
d、抽象类是一个残缺不全的类,不能实例化
e、抽象类除了有抽象方法之外,也还有普通方法
f、一个类继承了抽象类,必须重写抽象类中提供的抽象方法
 或者将自身也声明为抽象类

  • 类中定义构造块时无论如何必须在语句外加上{ }

内部类

  • 内部类可直接访问外部类的私有属性。。。内部类的唯一好处就是可以方便地访问外部类的私有属性
  • 使用static可以声明内部类,用static声明的内部类变成了外部类,但是用static声明的内部类不能访问非static的外部类属性。

day10

1、Eclipse

ctrl + 1 :系统提供解决方案

2、抽象类,多态,循环,获取键盘输入

3、final

  • final的成员变量的值不能够被改变
  • final的方法不能够被重写
  • final的类不能够被继承

4、接口

  • java继承的特性:java只支持单继承
  • 接口是为了解决java中存在的语义上多继承

接口本质上是一种特殊的抽象类

  • 只有方法的定义(都是抽象方法)可以省略abstract
  • 常量的定义(static final ),可省略
  • 访问权限都是public

接口跟类:

  • 类    impimplements 接口
    一个类可以实现多个接口
  • 接口跟接口
    接口  extends  接口
  • 接口跟实现类之间存在多态性
  • 使用接口?还是抽象类?
    interface同时赋予了接口和抽象类的好处
    优先使用接口
  • 接口是单独存在的,必须放在单个文件里

注意:一个类实现多个不同的接口时,这些接口中尽量不要存在方法名相同的声明。

5、内部类

a、非静态的成员内部类

public class Outer {    
    int i = 100;     //非静态的成员内部类:类的内部,方法的外部    
    class Inner {     //可以使用private default protected public        
        public void setI(){         
        // 非静态的成员内部类可以访问外部类的成员变量            
        System.out.println("" + i);        
        }    
    }     
    public void getI(){}    
    public static void main(String[] args) {
        // 要想创建内部类对象,必须要先有外部类对象        
        Outer outer = new Outer();    
        // 外部类对象.new 内部类        
        Inner inner = outer.new Inner();        
        inner.setI(); 
    }
}

b、静态的成员内部类

 public class Outer {    
     static int i = 100;    // 静态的成员内部类:类的内部,方法的外部    
     static class Inner{    
     // 可以使用private default protected public        
         public void setI(){
                 // 静态的成员内部类只能访问外部类的静态的成员变量            
                 System.out.println("" + i);        
         }    
     }    
     public void getI(){}    
     public static void main(String[] args) {        
     // 要想创建内部类对象,必须要先有外部类对象        
     Inner inner = new Outer.Inner();        
     // 因为是static的,使用 (类名.方法名)调用        
     inner.setI();    
     } 
 }

c、局部内部类

public class Outer {    
    public void play(){
            int j = 10;        
            class MyInner{            
                public void show(){            
                // 在局部内部类里面调用方法中局部变量            
                // 需要将局部变量声明为final(默认了)            
                // 或者声明为成员变量                
                System.out.println(j);            
                }        
            }    
            // 局部内部类只能在当前范围内使用    
            MyInner inner = new MyInner();    
            inner.show();    
    }
}

d、匿名内部类

public class Outer {    
        public static void main(String[] args) {    
                //  Animal animal = new Animal();    
                //  animal.jump();    
                Jumper jumper = new Jumper() {        
                        @Override        
                        public void jump() {            
                                System.out.println("再也跳不动了");        
                        }    
                };//整个括号里都是语句哦    jumper.jump();    
        }
}
时间: 2024-07-29 02:19:48

Java 学习笔记(2015.7.13~17)的相关文章

Java 学习笔记(2015.7.20~24)

Java 学习笔记(2015.7.20~24) Java Java 学习笔记(2015.7.20~24) 1.StringBuffer与StringBuilder的区别: 2.基本数据类型包装类 3.Date.Calendar.DateFormat等与时间相关的类 1.常用类String 2.正则表达式 3.常用类 StringBuffer 代表可变的字符序列 拆箱与装箱 包装类的应用 匿名内部类 数组 day11 day12 day13 day14 day11 父类中使用public定义的方法

《深入Java虚拟机学习笔记》- 第13章 逻辑运算

<深入Java虚拟机学习笔记>- 第13章 浮点运算 <深入Java虚拟机学习笔记>- 第13章 逻辑运算,布布扣,bubuko.com

Java学习笔记(2015.7.27~7.31)

Java学习笔记(2015.7.27~7.31) Java 课堂 Java学习笔记(2015.7.27~7.31) 小技巧 常用方法 1.List另一个子类--LinkedList 2.数组的常用方法 3.排序 1.二分法查找 2.数组转换为List 3.可变参数Type ... param (了解) 1.容器Collection 2.自动拆装箱(了解) 3.JDK增强for循环(了解) 4.泛型(掌握) 5.iterator与for在迭代中的区别 1.概念:保存多个对象的对象. 2.JDk为什

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

【Java学习笔记之二十六】深入理解Java匿名内部类

在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者

Java学习笔记之继承

一.继承的基础 在Java术语中,被继承的类叫超类(superclass),继承超类的类叫子类(subclass). 举例说明: 1 class Box 2 { 3 public double width; 4 public double height; 5 public double depth; 6 7 //重载构造方法 8 public Box(Box ob) 9 { 10 width = ob.width; 11 height = ob.height; 12 depth = ob.dep

Java学习笔记之接口

一.接口的概念与定义 首先考虑一个简单的接口的定义: public interface Output { int MAX_LINE = 40; void out(); void getData(String msg); } 定义接口使用关键字interface 修饰符interface前面的public可以省略,如果省略,则采用默认访问控制,即只有在相同包结构的代码才可以访问此接口 接口不可以有构造方法(区别于类中的构造方法) 接口里面的所有成员,包括常量.方法等都是public访问权限,所以在

Java学习笔记之方法重载,动态方法调度和抽象类

一.方法重载 如果子类中的方法与它的超类中的方法有相同的方法名,则称子类中的方法重载超类中的方法,特别是当超类和子类中的方法名和参数类型都相同时,在子类中调用该方法时,超类中的方法会被隐藏.考虑下面程序: 1 class A 2 { 3 int i, j; 4 A(int a, int b) 5 { 6 i = a; 7 j = b; 8 } 9 10 // display i and j 11 void show() 12 { 13 System.out.println("i and j: &

Java学习笔记——动态代理

所谓动态,也就是说这个东西是可变的,或者说不是一生下来就有的.提到动态就不得不说静态,静态代理,个人觉得是指一个代理在程序中是事先写好的,不能变的,就像上一篇"Java学习笔记--RMI"中的远程代理,其中客户端服务对象就是一个远程服务对象的代理,这个代理可以使得客户在操作时感觉像在操作本地对象一样,远程对象对于客户是透明的.我们可以看出这里的远程代理,是在程序中事先写好的,而本节我们要讨论的远程代理,是由JVM根据反射机制,在程序运行时动态生成的.(以上是本人的理解,如果有不正确的地