【java基础】01.java基础注意点

1.内存空间:

栈内存:一般存放引用等信息

堆内存:一般新建对象等在此开辟;

方法区:包含静态方法区和非静态方法区和常量池

                静态方法区:一般类加载后,类中的静态信息加载在此;

                非静态方法区:类加载后,类中的非静态方法加载在此。

2.权限:访问修饰符(access modifier)。

  • private修饰词,表示成员是私有的,只有自身可以访问;被private所修饰的属性和方法只能在该类内部使用
  • protected,表示受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员。  被protected所修饰的属性和方法可以在类内部、相同包以及该类的子类所访问。
  • 无修饰词(默认),表示包访问权限(friendly, java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++ ),同一个包内可以访问,访问权限是包级访问权限; 在类内部以及相同包下面的类所使用。
  • public修饰词,表示成员是公开的,被public所修饰的属性和方法可以被所有类访问,所有其他类都可以访问;
 类本身同一包中继承不同包
public
protected×
friendly(默认)××
private×××

3.类的访问限制,仅有public和包访问权限;  

  • 一个Java文件只能有一个public类 
  • public类的名称必须同Java文件名完全一致
  • 若Java文件中没有public类,则文件名可以任意

4.封装:类包含了数据与方法,将数据与方法放在一个类中就构成了封装。  

5.new关键字在生成对象时完成了三件事情:

  • a) 为对象开辟内存空间。
  • b) 调用类的构造方法。
  • c) 将生成的对象的地址返回

6.关于继承:1)父类有的,子类也有,2)父类没有的,子类可以增加,3)父类有的,子类可以改变

当生成子类对象时,Java默认首先调用父类的不带参数的构造方法,然后执行该构造方法,生成父类对象,在调用子类的构造方法,生成子类对象。

注意:a.构造方法不能被继承,b.方法和属性可以被继承 c.子类的构造方法隐式的调用父类的构造方法

7.多态:父类型的引用可以指向子类型的对象。

多态:所谓多态,就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。关于接口与实现接口的类之间的强制类型转换方式与父类和子类之间的强制类型转换方式完全一样。提高了程序的扩展性。但只能通过父类的引用调用父类的成员。 多态自始至终都是子类对象在变化。  

8.方法的重载(overload):表示俩个或多个方法名字相同,但方法参数不同(参数个数、参数类型);方法的返回值对重载没有影响,构造方法加参数就是重载。

一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。重载是Java 实现多态性的一种方式。    

9.方法的重写(override):覆写,子类与父类的方法返回类型、方法名称、参数类型和个数一样,这样就说子类与父类的方法构成了重写。

10.重写与重载的关系:重载是发生在同一个类内部的俩个或多个方法;重写是发生在父类与子类之间

11.final关键字: final可以修饰属性、方法、类。

  • a、final数据成员,使用前总是被初始化并被强制要求在定义处或构造器中赋值;一旦赋值后,对于基本类型其值会恒定不变,而对于对象引用会始终指向赋值的对象,但指向对象自身是可以修改的; 
  • b、final参数,对于基本类型表示无法改变参数的值,对于对象引用表示无法改变引用所指的对象;当final修饰一个原生数据类型时,表示该原生数据类型的值不能发生变化(比如说不能从10变为20);如果final修饰一个引用类型时,表示该引用类型不能再指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。
  • c、final方法,保证方法不会在继承后修改和重载;所有的private方法都隐含式final的;Java中使用动态绑定(后期绑定)实现多态,除了static和final方法是使用前期绑定的;方法被final所修饰时,表示该方法是一个终态方法,即不能被重写(Override)
  • d、final类,当一个类被final所修饰时,表示该类是一个终态类,即不能被继承

12.static关键字:表示静态的,可修饰类、方法,变量,块。

静态方法只能继承,不能重写(Override)

13.静态代码块

静态代码块的作用也是完成一些初始化工作。首先执行静态代码块,然后执行构造方法。静态代码块在类被加载的时候执行,而构造方法是在生成对象的时候执行;要想调用某个类来生成对象,首先需要将类加载到Java虚拟机上(JVM),然后由JVM加载这个类来生成对象。

类的静态代码块只会执行一次,是在类被加载的时候执行的,因为每个类只会被加载一次,所以静态代码块也只会被执行一次;而构造方法则不然,每次生成一个对象的时候都会调用类的构造方法,所以new一次就会调用构造方法一次。

14.this关键字

  • 1).this是Java的一个关键字,表示某个对象。 
  • 2).this可以出现在实例方法和构造方法中,但不可以出现在类方法中。 
  • 3).this关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。 
  • 4).this关键字出现在类的实例方法中时,代表正在调用该方法的当前对象。
  • 5).需要注意的是,当一个变量被声明为static时,是不能用this来指向的,因为this指向某一具体对象,不能用来指示类本身。
  • 6).this还可以用在某个构造函数的第一句,用来调用该类的另一个构造函数 。

15.Super关键字主要是用来调用父类的成员变量和方法的

super表示对父类对象的引用。与this(对当前对象的引用)一样,必须是构造方法的第一条可执行语句,前面不能有可执行语句。

16.静态的只能访问静态的;非静态的可以访问一切。 不能在静态方法中使用this关键字。

17.关于方法参数传递的总结:对于Java中的方法参数传递,无论传递的是原生数据类型还是引用类型,统一是传值pass by value)。

18.如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效 ,这时如果想在该方法内使用成员变量,必须使用关键字this。

19.Java中的所有浮点类型默认情况下都是double。不能将double类型的值赋给float类型的变量,即便该double类型的值处于float类型的范围内也是不可以的。总之,能否成功赋值取决于等号右边的值类型与等号左边的变量类型是否一致。

20.当有若干个变量参与运算时,结果类型取决于这些变量中表示范围最大的那个变量类型。比如,参与运算的变量中,有整型int,有双精度浮点型double,有短整型short,那么最后的结果类型就是double

取模运算的符号与被除数的符号相同。

21.包(package)。用于将完成不同功能的类分门别类,放在不同的目录(包)下。包的命名规则:将公司域名反转作为包名。www.shengsiyuan.com,com.shengsiyuan(包名),对于包名:每个字母都需要小写。如果定义类的时候没有使用package,那么Java就认为我们所定义的类位于默认包里面(default package)。

22.String是常量,其对象一旦创建完毕就无法改变。当使用+拼接字符串时,会生成新的String对象,而不是向原有的String对象追加内容。

23. String s = “aaa”;(采用字面值方式赋值)

  • 1) 查找String Pool中是否存在“aaa”这个对象,如果不存在,则在String Pool中创建一个“aaa”对象,然后将String Pool中的这个“aaa”对象的地址返回来,赋给引用变量s,这样s会指向String Pool中的这个“aaa”字符串对象
  • 2) 如果存在,则不创建任何对象,直接将String Pool中的这个“aaa”对象地址返回来,赋给s引用。

24. String s = new String(“aaa”);

  • 1) 首先在String Pool中查找有没有“aaa”这个字符串对象,如果有,则不在String Pool中再去创建“aaa”这个对象了,直接在堆中(heap)中创建一个“aaa”字符串对象,然后将堆中的这个“aaa”对象的地址返回来,赋给s引用,导致s指向了堆中创建的这个“aaa”字符串对象。
  • 2) 如果没有,则首先在String Pool中创建一个“aaa“对象,然后再在堆中(heap)创建一个”aaa“对象,然后将堆中的这个”aaa“对象的地址返回来,赋给s引用,导致s指向了堆中所创建的这个”aaa“对象。

25.String类对象是个常量,而stringBuffer类对象是个变量,可以在其后追加字符串(即可以修改)。用StringBuffer的对象的append()方法追加字符串。

26.hashCode()方法:关于Object类的hashCode()方法的特点:

  • a) 在Java应用的一次执行过程当中,对于同一个对象的hashCode方法的多次调用,他们应该返回同样的值(前提是该对象的信息没有发生变化)。
  • b) 对于两个对象来说,如果使用equals方法比较返回true,那么这两个对象的hashCode值一定是相同的。
  • c) 对于两个对象来说,如果使用equals方法比较返回false,那么这两个对象的hashCode值不要求一定不同(可以相同,可以不同),但是如果不同则可以提高应用的性能。
  • d) 对于Object类来说,不同的Object对象的hashCode值是不同的(Object类的hashCode值表示的是对象的地址)。

27.原生类型和包装类型的转换

    1)通过向对应的包装器传入参数完成基本变量包装成包装类对象;利用包装类提供的xxxValue()方法将包装类对象转化成基本类型变量

     2)包装类可以实现基本类型变量和字符串之间的转换:

除Character外所有的包装类提供parseXXX()方法将特定的字符串转换成基本类型变量;String类提供了valueOf()方法将基本类型比那里转换成字符串。

public static void main(String[] args){
    String iStr = "123";
    int i = Integer.parseInt(iStr);
    System.out.println(i);
    String nStr = String.valueOf(100.234);
    System.out.println(nStr);
}

28.内部类(了解)

  • 1)内部类可以直接访问外部类的成员包括私有,因为内部类中持有外部类的引用外部类名.this;
  • 2)外部类要访问内部类,需要先创建内部类对象;

  访问格式:

    1)当内部类定义在外部类的成员位置上,且非私有,可以在外部其他类中直接建立内部类。格式为:

       外部类名.内部类名 变量名 =  外部类对象.内部类对象;(Outer.Inter in = new Outer().new Inter())

    2)当内部类在成员位置上时,可以被成员修饰符修饰。

        private:将内部类在外部类中封装。

        static:内部类就具备static的特性。只能直接访问外部类中的静态成员。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值