Java学习笔记-1

Java学习笔记-1

一、基础知识


注释

单行注释 // //
多行注释 /* /
文本注释 /
* **/
注意行中(代码内)写注释要用多行注释


输入输出

public static void main(String[]args)
含有main方法的类可以运行,main方法必须是公共的、静态的,返回void且必须接受一个String类型的数组
system.out.println 带换行的效果的输出
system.out.print 不带换行效果的输入
system.in包含两种方法
int read() 返回ASCII码
int read(byte[] b) 返回读入的字节数
定义:public static final PrintStream out
public static final Input Stream in


Scanner类

定义:public final class Scanner extends Object
导入方式:import java.util.*;
Scanner类的next方法在util包中
Scanner方法将输入内容转换为标记,通过next方法将表里转换为对应类型的值(如nextint、nextline等)


标示符

开头必须为字母/下划线/$
给类起名字首字母大写
方法和变量第一个单词首字母小写,之后首字母均大写


变量

double long 8字节(1字节为8位)
int 4字节
局部变量(从属于语句块)
成员变量(在方法外在类内,从属于对象)不要求必须初始化(默认为int 0;double 0.0;char ‘\u0000’;boolean false)
静态变量(static)从属于类


常量(constant)

常量所有字母大写
通过final声明常量
通过final修饰变量使变量成为常量 称为符号常量


数据类型

一.基础数据类型:

一字节8位,第一位表示符号故一位可以表示[-27,27-1] 其它以此类推

1.数值型

(1)整数型[byte(1字节) short(2字节) int(4字节) long(8字节)]
用long定义常量后面要加L/l 如long population=700000000L
(2)浮点型[float(4字节) double(8字节)]
声明时在数据后面分别加F/f D/d
不加默认按双精度处理(double类型)

2.字符型(2个字节) 字符要用单引号括起来
3.布尔型(1个位)

数的表示
10进制:15
8进制:015
16进制:0x15
2进制:0b15

二.引用数据类型(4字节)

即复合数据类型
包括数组、类、接口
基本数据类型变量内存中存储数据值,复合数据类型变量内存中存储数据首地址,故其又称为引用变量

不同类型数据可以混合运算,占内存空间小的数据类型会自动转换为占空间大的类型
byte、short、char—int—long—float—double(从小到大)
当需要从大到小时应通过强制转换,如
int a = 20;
byte b = (byte)a;

Math.round()方法将一个double型数值四舍五入为long型

+号两边有一个及以上字符串类型时,将自动将不是字符串类型的转换为字符串类型,并完成字符串的拼接


运算符

1.算术运算符

x = a++;
即x = a;
a = a+1;
一元运算符中的+ -为取正/负值

2.布尔运算符

与(&&)
或(||)
非(!)

3.位运算符

a>>b 将a右移b位(<<同理)
&按位与
|按位或
^按位异或
~按位非

4.条件运算符

布尔表达式 ? value1 : value2
如果布尔表达式为true计算value1 反之计算value2


switch语句

switch(表达式){
case 取值1: 语句块1; break;
case 取值2: 语句块2; break;
case 取值3: 语句块3; break;
default: 语句块n;break;
}
default语句可以没有,用来处理不在取值中的结果
break用来在执行完一个case分支后跳出switch语句。没有break程序就会一直向下执行直到break或switch语句结束


循环

循环次数已知——for循环
循环次数未知——while/do while循环
带标号的循环如st:while(true)
可以通过break 标号; 的方式跳出整个循环(这个循环可以是多重循环,不加标号的break只能跳一层)


方法

返回值类型 方法名(参数){
方法体
}
无返回值要写void
加static为静态方法,可直接调用
调用方法 方法名(实际参数表);
如 static boolean 方法名(int xIn)
说明方法需要提供一个整形参数,返回一个bool值,变量名带有In表示在方法内部有效

通过return语句将方法结束并返回调用点,并将所携带参数返回给调用者(返回值类型必须与方法头部声明类型一致)
方法执行完方法体的最后一条语句也会结束运行,但return可以多次添加在方法体中
(1)return;
适用于返回值是void的方法
(2)return(表达式);

一般在代码最开始写方法,但执行时默认从main方法开始执行
多个参数用逗号分隔,其它无区别


栈内存和堆内存

基本类型变量和引用变量在栈内存中,运行到作用域之外即被释放
数组和new创建的对象放在堆内存,栈中对数组的引用变量值为数组在堆内存中的首地址。就算超出作用域堆内存中的垃圾也不会被立刻清理,故占用空间较大。


数组

声明数组

数组数据类型[] 数组名称
如int[] A 此时并未分配存储空间
初始化:A = new int[10];
new分配空间的同时将初始化数组元素
创建数组 int A[] = new int[10];

初始化

1.int A[]={1,2,3};
不需要声明数组大小
2.A[2] = 3;
给数组中第二位(第三个)元素赋值为3
可通过数组名.length查看数组长度
数组名中存储的是数组第一个元素的首地址,即数组B = 数组A;
数组A的值赋给B,当B的值改变时,A的值也会改变,因为它们指向同一个地址。
将数组作为输入参数不需要返回值,因为其输入的为地址,改动后可直接在main方法中调用

数组复制System.arraycopy(数组名1,0,数组名2,0,数组长度)

多维数组

Java中把二维数组看作数组的数组
如int A [] [];
A[]中的每一个元素也为数组A[]
初始化
如:a[0][0]=1;
a[0][1]=2;


类和对象

创建子类 class students extends person
一个源文件可以有多个类 但只能有一个public的类 如果类被声明为public,则文件名必须和类名保持一致

类的名称
类的属性(可省略)可包括可见性、属性名称、类型、默认值和约束特性
可见性 属性名 : 类型 =默认值(各项均可省略)
如: private color : String

可见性
常见 范围
public 所有其他类可以访问
private 只能被该成员所在类访问
protected 同一个包与继承关系的类可见
默认 同一个包(文件夹)中可见

默认的访问范围只与包有关,与继承无关

get方法
set方法(把输入值赋给变量使得get可以直接读取)
没有set只有get就是只读不写,反之则为只写不读,视情况使用

自定义类下属于复合数据类型(引用类型),也可作为参数,将实际参数值赋给形式参数,指向同一地址
即数据类型不只有String int等,类名也可作为数据类型

内部类可以访问它外部类的成员,反之则不行


UML

‘+’ public
‘-’ private
‘#’ protected
“无” 默认
编程之前画UML类图明确思路

下划线 静态成员
空心菱形 聚合关系(整体与部分)
实心菱形 组成关系(整体依赖部分)
类的操作(只能作用到该类的对象上,可省略)
可见性 返回值类型 操作名(参数表)
如: public Car(String,String){
赋值语句
}
public String getColor()

定义类
[修饰符] class 类名{
属性
方法
}


对象

创建对象

类名 对象名 = new 类名([参数列表]);
new关键字创建的对象在堆内存中开辟空间,对象名在栈空间中,是引用句柄,指向堆内存中相应位置

匿名对象

不定义句柄直接调用方法
如:new Car().getColor();


构造方法(Constructor)

初始化成员变量
如Scanner sc =new Scanner(System.in);
中的Scanner(System.in)就是构造方法
构造方法与类名相同,没有返回值,方法内部不允许有return语句


方法重载

方法名相同但参数不同,编译器根据参数情况判断用哪个
只要定义有参数的构造方法,都需要再定义一个无参数的构造方法
方法体中常常会出现形如Color = ColorIn形式
等号左边为成员变量,右边为形式参数


this关键字

1.表示类的成员(成员变量或成员方法)
如:this.Color = Color;
2.调用构造方法
this(参数列表);
例如参数列表为一个参数,就自动调用有一个参数的方法,注意没有.
3.表示当前对象
谁调用这个方法谁就是当前对象
比如println(this)在一个方法里,当使用A.这个方法的时候,就会输出A


封装

将对象信息隐蔽在对象内部,禁止外部程序直接访问对象内部属性和部分方法

外部通过接口(类的public方法)访问
例如private属性就只能通过公开的get/set方法访问

具有相似功能的类用打包语句放到一个包中
package 包名;
其下的类会放到这个包中,即生成的类文件(.class)都放在工作目录文件夹中,类名变成包名.类名
外部访问需要用完整名称
javac -d.类名.Java
指定编译生成的class文件存放的目录

通过import导入相应包就可以直接用类名访问
常用包见书P115


继承

UML中用三角形箭头表示
一个类只允许有一个父类(多重继承通过接口实现)
class SubClass extends SuperClass{
}
super调用父类的构造方法
如子类构造方法比父类构造方法多一个属性,父类构造方法有两个参数,那么在子类的构造方法中添加super(参数1,参数2);为共有属性赋值

子类对成员的修改不会影响父类,父类的修改会影响子类
父类中被private修饰的属性和方法子类不能直接访问,protected可以但是封装性弱,最好设置get set方法。父类的构造方法子类也不能直接使用,可以用super调用
注意通过super调用父类的构造方法的只能是子类的构造方法,super语句必须位于第一行

方法重写是相同返回类型相同方法名相同参数数量,通过对象进行区分,即两个类分别创建对象,在通过对象调用同名同参数数量同返回类型不同功能方法(与重载区分)

如果父类中的成员被修饰为private那么子类即使用super也不能访问,但可以用super访问父类中公开的方法,若该方法中打印或调用了相应成员,则子类便通过这种方式成功打印或调用该成员

子类构造方法中不通过在super调用会默认调用一个父类无参数的构造方法,因此写父类时应增加一个无参数的构造方法,否则会编译出错

this访问本类的属性和方法,若找不到会从父类中继续查找

抽象类中方法没有具体实现,但强制其子类必须实现该方法,用abstract修饰
抽象类:public abstract class
抽象方法:abstract public String getStatus();
不用写方法体
注意抽象方法不能创建对象,即不能用new语句创建

父类的任何子类对象都是一种父类对象,可以作为参数传递给希望接收父类对象的方法


接口

public interface 接口名{
常量;
抽象方法;

接口是抽象方法和常量值的集合(可以没有常量值)
只有定义而没有实现
接口中的变量默认是public static final(不用特别标明)
接口里的方法就是返回类型+方法名(参数列表);
可以有多个抽象方法

接口 extends 接口
类 implements 接口 实现所有方法
抽象类 implements 接口 实现部分方法
即如果一个类继承了一个接口,但没有实现其中全部的抽象方法,那么这个类就必须是一个抽象类
类实现接口在UML中用虚线箭头表示

extends一定放在implements之前,即先继承父类再继承接口

final修饰的类不能被继承
final修饰的方法不能被重写

Object类是所有类的父类,其方法适用于所有类
toString方法返回字符串类型,如果参数列表形如(st) st是一个Object类的对象,那么默认先调用st的toString方法
一般都会重写toString方法,未重写的toString方法返回值难以理解

equals方法在Object类中只能判断两个引用是否指向同一个对象,要想判断是否逻辑等价需要重写该方法


横向关系

1.依赖

UML中用指向被依赖事物的虚线表示
如person指向pen(人使用笔)
体现在某个类的方法用另一个类作为引用类型的参数

2.关联

UML中用实线表示
一个类的对象作为另一个类的成员变量
如雇员作为公司的属性

  (1)聚合
      UML中用空心菱形与实线表示
      如学生与学校的关系,学校是整体,学生是部分,但两者均可独立存在
  (2)组合
       UML中用实心菱形与实线表示
       部分的生命周期不会超出组合的生命周期
      如菜单和窗口的关系,只有在窗口创建  之后才能创建菜单,菜单必须在窗口销毁之前销毁 

多态

父类句柄引用子类对象
例如A是B的父类,那么就可以
A 对象名 = new B();
父类可以引用子类对象,但不能引用子类中有而父类中没有的方法


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值