【Gjava人才】 www.gjrencai.com java基础知识速成教程
1数据类型
1基本数据类型
3引用类型
3控制语句
3顺序结构
3选择结构
4循环结构
5面向对象
5面向过程和面向对象的区别
5类和对象
5成员变量
5
5方法的重载(overload)
5构造方法
5内存分析
6package
6import
6this
6static
6super
6面向对象的三大特征
6封装
6继承
6方法的重写(override)
6多态
7抽象类
7接口
7面向接口编程
数据类型
基本数据类型
a) 数值型
i. 整型
1. byte 1个字节(256) -128-127
2. short 2个字节(65536) 正负3万
3. int 4个字节 正负21亿
4. long 8个字节
ii. 浮点型
1. float 4个字节
2. double 8个字节
注:
类型的自动转换
类型的强制转换
/*
double d1 = 0.1;
double d2 = 0.5-0.4;
System.out.println(d2);
if(d1==d2){
System.out.println("dddd");
}else{
System.out.println("eeeee");
}
*/
float f1 = 0.134F;
float f2 = (float)0.134;
double d1 = 0.345F;
byte b = 123; //int可以自动转换为byte,short,char。只要不超过它们的
述范围。
double d = 23234;
double d2 = 123L*234; //表达式类型的自动提升
long i = 234231L*234233*23423; //
System.out.println(i);
b) 字符型 2个字节 65536 unicode字符集
c) 布尔型
true, false
char c1 = 'a';
char c2 = '中';
char 中2= '国';
boolean b = true;
if(b==true){
System.out.println("true");
}
if(b){ //建议此种写法!
System.out.println("true");
}
引用类型
控制语句
顺序结构
选择结构
1. 单选择结构
2. 双选择结构
3. 多选择结构
boolean b = true;
if(b){
System.out.println("true");
}
if(b){
System.out.println("true");
}else{
System.out.println("false");
}
int age = 18;
if(age>100){
System.out.println("老寿星");
}else if(age>80){
System.out.println("小寿星");
}else if(age>60){
System.out.println("老年人");
}else if(age>30){
System.out.println("中年人");
}else if(age>18){
System.out.println("青年人");
}else{
System.out.println("小屁孩");
}
int grade = 1; //1,2,3,4,5
switch(grade){ //多值选择结构!
case 1:
case 2:
System.out.println("学的凑合");
break;
case 3:
System.out.println("学的一般");
break;
case 4:
System.out.println("学的不及格");
break;
case 5:
System.out.println("太差了!");
break;
}
if(grade==1){ //switch可以完全使用if else if代替!
}else if(grade==2){
}
循环结构
while
do while
for
/*
int i = 0; //初始化
while(i<10){ //条件判断
System.out.println(i); //循环体
i++; //迭代
}*/
/*
for(int i=0;i<10;i++){ //初始化、条件判断、迭代
//循环体
System.out.println(i);
}
*/
int a=0;
do{
System.out.println(a);
a++;
}while(a<0); //先执行,后判断! while:先判断,后执行!
面向对象
面向过程和面向对象的区别
面向对象帮助我们从宏观上把握项目的整体关系,微观上实现仍然是面向过程。
类和对象
抽象(抽出事务象的部分)和具体。
类是对象的模板。
成员变量(field,属性)
要点:
1. 成员变量的自动初始化。整数:0,浮点数:0.0, Boolean:false. 引用类型:null char:\u0000
public class Person {
int age=13;
String name;
int score;
public static void main(String[] args) {
Person p = new Person();
p.age = 23;
p.name="张三";
System.out.println(p.name);
}
}
方法
public class Person {
int age=13;
String name;
int score;
void test1(){
System.out.println("Person.test1()");
}
int test2(){
System.out.println("Person.test2()");
return 3; //return两个作用:返回值,结束方法的运行!
}
int test3(int a,double d){
System.out.println("Person.test2()");
return (int)(a+d);
}
public static void main(String[] args) {
Person p = new Person();
p.age = 23;
p.name="张三";
int a = p.test2();
System.out.println(p.name);
}
}
Return既可以用于返回值,也可以用于终止方法的执行:
void test2(){
if(man){
System.out.println("man");
System.out.println("man");
System.out.println("man");
}
}
void test3(){
if(!man){
return;
}
System.out.println("man");
System.out.println("man");
System.out.println("man");
}
方法的重载(overload)
方法名相同、形参列表不同(类型不同/个数不同/顺序不同)则构成重载
。
public class Calculator {
int add(int a,int b){
System.out.println("sddsds");
return a+b;
}
int add(int a, int b, int c){
return a+b+c;
}
double add(double a, double b){
return a+b;
}
double add(double a, int b){
return a+b;
}
double add(int a, double b){
return a+b;
}
public static void main(String[] args) {
Calculator c = new Calculator();
System.out.println(c.add(3, 4));
System.out.println(c.add(3, 4,5));
System.out.println(c.add(3.0, 4.0));
}
}
构造方法(构造器 constructor)
构造方法是特殊的方法!!!特殊在什么地方:
1. 方法名必须和类名保持一致!
2. 无返回值(事实上,他是有返回值的。)
3. 需要通过new来调用!
4. 如果我们没有定义构造器,则编译器会帮助我们自动添加;如果我们手动定义构造器,则编译器不会帮助我们添加无参构造器。
public class Person {
int age;
String name;
int score;
void run(){
System.out.println("我在跑步!!");
}
Person(int age){
this.age = age;
System.out.println("正在构造一个person对象!");
}
Person(){
}
public static void main(String[] args) {
Person p = new Person();
p.run();
}
}
内存分析
堆:存放new出的对象。
栈:存放局部变量(方法内部定义的变量)
方法区:存放类的信息、static变量、字符串常量等。
public class Person {
int age=13;
String name;
int score;
public static void main(String[] args) {
Person p = new Person();
p.age = 23;
p.name="张三";
Person p2 = new Person();
p2.name="李四";
System.out.println(33==44);
System.out.println(p==p2);
String str = "张三";
String str2 = "张三";
String str3 = new String("李四");
String str4 = new String("李四");
System.out.println(str == str2);
System.out.println(str3 == str4);
System.out.println("哈哈");
}
}
package
包的两个基本作用:
1. 解决类的重名问题
2. 管理类
包的具体用法:
1. 使用package, 必须位于文件的第一句非注释性语句!
2. 包名的规范:域名倒着写+有意义的名字
常见的包:
java.lang 核心包(不需要我们import,直接可以使用!)
java.io 输入输出流
java.util 工具包
java.net 网络
java.awt
java.sql
import
用来引入其他包中的类,方便我们使用。
import test.Person;
import test.*;
静态导入:import static , 导入某个类的静态属性和方法!
this
用来指定当前的对象!
如果this位于构造方法内,则表示正要初始化的对象。
如果this位于普通方法内,则表示调用该方法的对象(即当前对象)
package com.bjsxt.j2se;
public class TestThis {
private int a;
private int b;
private int c;
TestThis(int a,int b){
this.a = a;
this.b = b;
}
TestThis(int a,int b, int c){
this(a,b); //Constructor call must be the first statement in a constructor
this.c = c;
}
public static void main(String[] args) {
}
}
static
static变量位于方法区,被所有的该类的对象共享,可以称为类属性(静态属性)、类方法(静态方法)。
Static变量可以使用:类名.变量名来引用。
static变量(方法)是从属于类的。可以通过:类.名字 来调用
普通变量(方法)是从属于对象的。可以通过:对象名.名字 来调用。
static方法中,不能调用普通方法或普通属性。
final
final 修饰普通变量: 常量!!
super
面向对象的三大特征
封装/隐藏
可以将类的内部实现细节进行封装(隐藏了内部实现的细节、复杂性),方便外部调用。这样的话,就利于软件的维护和扩展。
关键字
同一个类
同一个包
子类
所有类
private
√
X
X
X
default(默认,不需要写出来)
√
√
X
X
protected
√
√
√
X
public
√
√
√
√
封装的使用方式:
1. 所有的属性都使用private。 但是一般会提供get/set方法便于访问和设置属性。
2. 除非确认你的方法要被外部调用,否则一般都可以使用private。
继承
子类扩展了父类。使用extends关键字。
JAVA类的继承中,只有单继承,没有多继承。
为什么需要继承?
1. 抽象概念,便于建模
2. 代码复用
Object类
Object是所有类的根类!
掌握:toString()方法的使用! 用来打印对象的字符串表示形式!
学习使用API文档
学习怎么查询API文档
学习使用DOC注释,生成项目的API文档(右键单击项目(export(java, javadoc(next,finish,yes)
方法的重写(override)
多态
多态的三个必要条件:继承、重写、父类引用指向子类对象。
public class TestOverride {
public static void main(String[] args) {
TestOverride to = new TestOverride();
NokiaMobile nm = new NokiaMobile();
Mobile op = new OppoMobile(); //编译时类型 变量名 = new 运行时类型();
op.call(233223);
OppoMobile om = (OppoMobile)op; //强制转型
om.callByOppo(23423);
//
DazhaiMobile dm = new DazhaiMobile();
to.test(op);
}
void test(Mobile nm){
nm.call(888888);
}
/*
void test(OppoMobile nm){
nm.call(888888);
}
void test(DazhaiMobile nm){
nm.call(888888);
}*/
}
class Mobile {
public void call(int num){
System.out.println("使用手机打电话给:"+num);
}
}
class NokiaMobile extends Mobile {
public void call(int num){
//
super.call(num);
System.out.println("使用诺基亚手机打电话给:"+num);
}
}
class OppoMobile extends Mobile {
public void call(int num) {
System.out.println("使用Oppo手机打电话给:"+num);
}
public void callByOppo(int num) {
System.out.println("333333使用Oppo手机打电话给:"+num);
}
}
class DazhaiMobile extends Mobile {
public void call(int num) {
System.out.println("使用Dazhai手机打电话给:"+num);
}
}
抽象类
抽象类:包含抽象方法的类。抽象方法必须被子类重写。
注意:
1. 抽象类可以包含构造方法,但是不能被实例化。
2. 抽象类包含了:具体实现和规范!!
接口
为什么需要接口?
项目需求是多变的!我们要从这些多变的需求中抽象出不变的内容,以不变应万变,提高我们的开发效率。
接口是做什么的?
用来描述规范!体现了现实中这样的逻辑“如果你是…则必须能….”。
接口:
只包含了抽象方法,常量!!
public interface Fly {
public static final int MAX_HEIGHT=100;
int MIN_HEIGHT=1; //常量总是:public static final
void fly(); //方法总是:public abstract
void stop();
void startup();
void upup();
void down();
}
如何使用接口?
class Airbus implements Fly {
@Override
public void down() {
}
@Override
public void fly() {
}
@Override
public void startup() {
}
@Override
public void stop() {
}
@Override
public void upup() {
}
}
一个类可以实现多个接口
接口可以多继承!!!
interface IA{
void aaa();
}
interface IB{
void bbb();
}
interface IC extends IA,IB {
}
面向接口编程!!!
�整形常量默认是Int
�BigDecimal
�浮点数是有误差的。
浮点数默认类型是:double
浮点数尽量不要用于比较
�除非确认不需要break。否则每个case都加。不加的话,会出现case穿透现象。
�重载与否,跟返回值类型无关!!