一、面向对象
1、类和对象
类就像一个模板,根据这样一个模板,可以创建一个个的具体的英雄
一个个具体的英雄,就叫一个个的对象
new Hero()就是java中创建一个英雄对象的意思
public class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
public static void main(String[] args) {
Hero garen = new Hero();
garen.name = "盖伦";
garen.hp = 616.28f;
garen.armor = 27.536f;
garen.moveSpeed = 350;
Hero teemo = new Hero();
teemo.name = "提莫";
teemo.hp = 383f;
teemo.armor = 14f;
teemo.moveSpeed = 330;
}
}
Hero h = new Hero() //实例化一个对象(h为实例变量,new Hero()为一个对象)
2、属性
一个英雄有姓名,血量,护甲等等状态,这些状态就叫做一个类的属性
属性类型(八个基本类型):following below
属性名称(一般都是小写,多个单词为驼峰式写法):属性也是变量,需要满足变量的命名规则
变量命名只能使用字母 数字 $ _
变量第一个字符 只能使用 字母 $ _
变量第一个字符 不能使用数字
(尽量使用完整的单词进行命名,而非缩写)
3、方法
能做什么,在类里面就叫做方法
方法是一个类的动作行为,所以一般都是以动词开头的,比如 keng ...
如果有多个单词,后面的每个单词的第一个字母使用大写
比如 addSpeed
二、变量
1、变量的定义是: 用来命名一个数据的标识符
int year = 1949;
int 是数据类型,表示是整数
year 是一个标识符
= 是赋值操作符
1949 是一个数字类型的值
; 表示该行结束
year 这个标识符就是一个变量,它代表1949这个值
2、基本变量类型
整形:存放整数 byte8 short16 int32 long64(8个字节)
字符型:存放一个字符 char16 (值用单引号表示)
浮点型: float32 double64(默认的小数值是double类型的)
所以 float f = 54.321会出现编译错误,因为54.321的默认类型是 double,其类型 长度为64,超过了float的长度32
在数字后面加一个字母f,直接把该数字声明成float类型
float f2 = 54.321f,
这样就不会出错了
布尔型:用于表示真假 boolean 长度为1
虽然布尔型真正存放的数据是0(false) 1(true)
但是,不能直接使用0 1 进行赋值
byte char short int float long double boolean
String类型并不是基本类型,String类型是Immutable的,一旦创建就不能够被改变
3、字面值
创建一个Hero对象会用到new关键字,但是给一个基本类型变量赋值却不是用new. 因为基本类型是Java语言里的一种内置的特殊数据类型,并不是某个类的对象。
给基本类型的变量赋值的方式叫做 字面值,如下所例:
float hp = 313f;
int armor = 24;
八进制:
public class HelloWorld {
public static void main(String[] args) {
long val = 26L; //以L结尾的字面值表示long型
int decVal = 26; //默认就是int型
int hexVal = 0x1a; //16进制
int oxVal = 032; //8进制
int binVal = 0b11010; //2进制
System.out.println(oxVal);
}
}
科学计数法表示double:
public class HelloWorld {
public static void main(String[] args) {
float f1 = 123.4F;// 以F结尾的字面值表示float类型
double d1 = 123.4;// 默认就是double类型
double d2 = 1.234e2;// 科学计数法表示double
}
}
转义 \ 反斜杠
public class HelloWorld {
public static void main(String[] args) {
String name = "盖伦";
char a= 'c';
//以下是转义字符
char tab = '\t'; //制表符
char carriageReturn = '\r'; //回车
char newLine = '\n'; //换行
char doubleQuote = '\"'; //双引号
char singleQuote = '\''; //单引号
char backslash = '\\'; //反斜杠
}
}
4、类型转换
short和char长度一样,但也需要强转:
public class HelloWorld {
public static void main(String[] args) {
char c = 'A';
short s = 80;
//虽然short和char都是16位的,长度是一样的
//但是彼此之间,依然需要进行强制转换
c = (char) s;
//直接进行转换,会出现编译错误
s = c;
}
}
强制转换的意思就是,转是可以转的,但是不对转换之后的值负责。 风险自担,后果自负
查看一个整数对应的二进制的方法:Integer.toBinaryString(k);
public class HelloWorld {
public static void main(String[] args) {
byte b = 5;
int i1 = 10;
int i2 = 300;
b = (byte) i1;
//因为i1的值是在byte范围之内,所以即便进行强制转换
//最后得到的值,也是10
System.out.println(b);
//因为i2的值是在byte范围之外,所以就会按照byte的长度进行截取
//i2的值是300,其对应的二进制数是 100101100
//按照byte的长度8位进行截取后,其值为 00101100 即44
b =(byte) i2;
System.out.println(b);
//查看一个整数对应的二进制的方法:
System.out.println(Integer.toBinaryString(i2));
}
}
5、作用域
当一个变量被声明在类下面
变量就叫做字段 或者属性、成员变量、Field
比如变量i,就是一个属性。
那么从第2行这个变量声明的位置开始,整个类都可以访问得到
所以其作用域就是从其声明的位置开始的整个类
如果一个变量,是声明在一个方法上的,就叫做参数
参数的作用域即为该方法内的所有代码
其他方法不能访问该参数
类里面也不能访问该参数
声明在方法内的变量,叫做局部变量
其作用域在声明开始的位置,到其所处于的块结束位置
基础笔试面试题1
属性的作用域在方法中,参数的作用域也在方法中,如果属性和参数命名相同了的话? 那么到底取哪个值?
就近取值: 输出为 5
public class HelloWorld {
int i = 1; //属性名是i
public void method1(int i){ //参数也是i
System.out.println(i);
}
public static void main(String[] args) {
new HelloWorld().method1(5);
//结果打印出来是 1还是5?
}
}
6、final
当一个变量被final修饰的时候,该变量 只有一次赋值的机会
基础笔试面试题2
public class HelloWorld {
public void method1(final int j) {
j = 5; //这个能否执行?
}
}
不可以,因为在调用方法的时候,就一定会第一次赋值了,后面不能再进行多次赋值
7、表达式
以;结尾的一段代码,即为一个表达式 //一个空;也是一个表达式
8、块
从{ 开始 到对应的 } 结束,即一个块
基础笔试面试题3
普通块和静态块的执行有什么区别?
普通块代码又叫构造代码块。 作用:可以给所有对象进行初始化。 表达形式: { 执行语句; }
静态代码块,随类加载有且只进行一次。 作用:给类进行初始化。 表达形式: static { 执行语句; }
执行先后顺序不同,先执行带static修饰的代码块