Java基础知识

9个月前 (11-28) wang JAVA, 技术杂谈 0评论 已收录 93℃ 浏览数:73

1.java中的数据类型分类:

基本数据类型(或叫做原生类、内置类型)8种:
整数:byte,short,int,long(默认是int类型)
浮点类型: float,double(默认是double类型)
字符类型:char
布尔类型:boolean

引用数据类型3种:数组,类,接口
其中,基本数据类型之间除了boolean,其他数据类型之间可以任意的相互转换

2.如何判断基本类型和对象

行为: 基本类型只是一个值,没有任何行为 对象类型有自己的行为 内存分配: 基本类型在栈内分配 对象在堆内分配 对象引用保存在栈内 引用与值: 基本类型是值类型,仅表示一个值,保存在栈内 引用类型分两部分,对象引用保存在栈内,对象保存在堆内, 访问变量,是使用的引用找对象

3.重载(overload)和重写(override)的区别

重载(overload)和重写(override)的区别: 重载就是同一个类中,有多个方法名相同,但参数列表不同(包括参数个数和参数类型),与返回值无关,与权限修饰符也无关。调用重载的方法时通过传递给它们不同的参数个数和参数类型来决定具体使用哪个方法,这叫多态。 重写就是子类重写基类的方法,方法名,参数列表和返回值都必须相同,否则就不是重写而是重载。权限修饰符不能小于被重写方法的修饰符。重写方法不能抛出新的异常或者是比被重写方法声明更加宽泛的检查型异常。

重载(overload):只要方法名 一致 ,其他(参数列表、返回值)怎么折腾随便。
重写(overriding):只有实现的功能代码 不一致 ,其他的(函数名、参数列表、返回值类型)必须都一致。
方法的重写Override要遵循“两同两小一大”规则:
①“两同”即方法名相同,形参列表相同;
②“两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;
③“一大”指的是子类方法的访问权限应比父类方法的访问权限更大或相等。
注:构造方法不受以上规则约束;
方法的重载Overload要注意以下的几点:
①在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序;
②不能通过访问权限、返回类型和抛出异常的差异进行重载;
③方法的异常类型和数目不会对重载造成影响;

4.访问权限

public : 内部类、自身、子类、外部
protected:内部类、自身、子类
default:内部类、自身
private:内部类
default和protected的区别是:
前者只要是外部包,就不允许访问。
后者只要是子类就允许访问,即使子类位于外部包。
总结:default拒绝一切包外访问;protected接受包外的子类访问

5.复制效率

效率:System.arraycopy > clone > Arrays.copyOf > for循环
理由:
A:for循环,效率最低,随便写个程序验证一下,效率慢的不是一点.....我测试的时候比clone和System.arraycopy差了100多倍
B:System.arraycopy:原型是
public static native void arraycopy(Object src,  int  srcPos , Object dest, int destPos, int length);
C:Arrays.copyOf底层调用了上面的System.copyOf效率比上面两个低。
D:clone()的完整定义:protected native Object clone() throws CloneNotSupportedException;

6.面向对象五大基本原则

单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。
开放封闭原则(Open-Closed principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。
Liskov替换原则(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。
依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口。

7.方法形参

形式参数可被视为local variable。形参和局部变量一样都不能离开方法。都只有在方法内才会发生作用,也只有在方法中使用,不会在方法外可见。
对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误。但是用这个修饰符也有一定的限制,就是在方法中不能对参数做任何修改。 不过一般情况下,一个方法的形参不用final修饰。只有在特殊情况下,那就是:方法内部类。  一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是final。
形参的值在调用时根据调用者更改,实参则用自身的值更改形参的值(指针、引用皆在此列),也就是说真正被传递的是实参。
方法的参数列表指定要传递给方法什么样的信息,采用的都是对象的形式。因此,在参数列表中必须指定每个所传递对象的类型及名字。想JAVA中任何传递对象的场合一样,这里传递的实际上也是引用,并且引用的类型必须正确。--《Thinking in JAVA》
类中声明的变量有默认初始值;方法中声明的变量没有默认初始值,必须在定义时初始化,否则在访问该变量时会出错。
boolean类型默认值是false

8.final

final修饰的方法,不允许被子类覆盖。
final修饰的类,不能被继承。
final修饰的变量,不能改变值。
final修饰的引用类型,不能再指向别的东西,但是可以改变其中的内容。


class Car extends Vehicle {

	public static void main (String[] args)
    {
        new  Car(). run();
    }
   
	private final void run() 
     { 
         System. out. println ("Car"); 
     } 
 }
	class Vehicle
	{	    
		private final void run() 
     { 
         System. out. println("Vehicle"); 
     } 
 }

输出Car,因为此题的父类方法有private修饰,所以对子类不可见,子类不能覆盖。所以子类方法和父类是两个方法。

如果父类方法将private改为public 会怎样?
会报错,因为父类方法有final修饰,不能被覆盖。

9.string编码

String (byte[] bytes, String charsetName) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的

String.getBytes(Charset charset)  使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。

10.方法优先级

静态成员变量或静态代码块>mian方法>非静态成员变量或非静态代码块>构造方法

11.String和char数组

Sting 类保存字符串只是保存所有单单的字符串;
而 char[] 字符数组 会在最后自动加上'\n';

12.unicode编码

java中一个unicode占2个字节(byte)。

一个字节等于8比特位(bit)。

所以每个Unicode码占用16个比特位。

13.类修饰符

  • 普通类(外部类):只能用public、default(不写)、abstract、final修饰。
  • (成员)内部类:可理解为外部类的成员,所以修饰类成员的public、protected、default、private、static等关键字都能使用。
  • 局部内部类:出现在方法里的类,不能用上述关键词来修饰。
  • 匿名内部类:给的是直接实现,类名都没有,没有修饰符。

14.优先级

淡云一笔安洛三幅 ( 单目  >运算>移位>比较>按位>逻辑> 三目  > 赋值 )

15.Java中,如果对整数不指定类型,默认时int类型,对小数不指定类型,默认是double类型

16.

	Boolean flag = false;
	if(flag=true)
	{ 
	     System.out.println(“true”); 
	 }else
	{ 
	     System.out.println(“false”); 
	 }

除boolean外的其他类型都不能使用赋值语句,这里可以通过编译,然后打印true

17.abstract类的子类必须实现其超类的所有abstract方法 错误 可以也是抽象的之类

含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。

18.Java程序的种类有三种

Java程序的种类有:

(a)内嵌于Web文件中,由浏览器来观看的_Applet

(b)可独立运行的 Application

(c)服务器端的 Servlets

19.Java 标识符

  • Java 标识符有如下命名规则:
    • 由26个英文字母大小写,数字:0-9 符号:_ $ 组成
    • 标识符应以字母、_ 、$开头。
    • 标识符不能是关键字。
  • Java中严格区分大小写
  • 数字是指0~9,字母指大小写英文字母、下划线(_)和美元符号($),也可以是Unicode字符集中的字符,如汉字;
    字母、数字等字符的任意组合,不能包含+、- *等字符;
    不能使用关键字;

20.Integer

intValue()是把Integer对象类型变成int的基础数据类型;
parseInt()是把String 变成int的基础数据类型;
Valueof()是把String 转化成Integer对象类型;(现在JDK版本支持自动装箱拆箱了。)

21.变量初始化

final作为对象成员存在时,必须初始化;但是,如果不初始化,也可以在类的构造函数中初始

char[] ch = new char[3];//默认空格
int [] Int = new int[2];//默认0
String[] strings = new String[2];//默认null

博主

Just do it. Now or never.

相关推荐

嗨、骚年、快来消灭0回复。