0% found this document useful (0 votes)
2 views

java notes for class x 6

Uploaded by

theeditorask
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

java notes for class x 6

Uploaded by

theeditorask
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

Java Notes for Class X (2022-2023)

OBJECT An object is an identifiable entity with some Data types are means to identify that type of data and
characteristics & behavior. associated operation of handling it.
Eg. 1 Orange 2 chair 1) primitive (byte, short, int, long, float, double, char,
characteristics boolean)
1. It is spherical shape and color is orange 2) Reference(class, array, interface).
2. It has four legs, back and arms
behavior Type Size Range Initial
1. It is citrus in nature and taste sour. Bits Byte Lowest Highest 0
2. It lets you sit on it byte 8 1 -128 127 0
Object interact with each other by passing message. short 16 2 -32768 32767 0
Basic concept of OOP(object oriented programming) int 32 4 -231 231 -1 0
1.Abstraction refers to the act of representing essential long 64 8 -2 63
263 -1 0
features without including the background details or float 32 4 -3.4E+38 3.4E+38 0.0f
expressions.
double 64 8 -1.7E+308 1.7E+308 0.0d
2. Encapsulation the wrapping of data and functions into a
single unit (class) is known as encapsulation. char 16 2 0 65536 null
3. Inheritance is the capability of one class of things to boolean 8 but uses true false false
inherit capabilities and properties from another class. 1 bit
4. Polymorphism is the ability for a message or data to be all reference type null
processed in more than one form.(function/constructor Reference in java is a data element whose value is an
overloading). address.
The object is implemented in software term as follows.
Scope generally refers to the program region with in which
1. characteristics & Attributes are implemented
a variable/method is accessible. The broad rule is a variable
through member variables or data items of the objects
accessible with in the set of braces it is declared.
2. behaviour is implemented through member function called
Final keyword final while declaring a variable makes it
methods/function.
constant i.e unchanged
Class represents a set of objects that share common
Operators operations are represented by operators and
characteristics & behaviour.
objects(values) of the operation are referred as operands.
A class is an object maker or object factory because it
Unary +, -, ++, —. Binary +, - *, /, % Ternary ?
contains all the statements needed to create an object. Its Relational >, <, ==, >=, <=
attributes as well as statements to describe the operation Logical AND, OR, NOT Bitwise &, |, !, <<, >>
that the object will be able to perform.
Prefix follow first change then use(e.g. ++c) Postfix follow
Source program the program written in high level language
first use then change(e.g. c++)
by programmer is called source code. Shortcuts
Machine code Computer needs source code to be 1. c=c+1  c+=1 2. c=c*4  c*=4
converted into low level language to be executed
3. x=x-10  x-=10 4. x=x/2  x/=2
Byte Code – The JAVA byte code is a machine instruction for a
Importance of main() method : A main()method controls
JAVA processor chip called JVM. The byte code id independent
the execution of all the statements and functions to produce
of a computer system it has to run upon. JAVA programs are
the required output.
compiled and then byte codes are generated.
Import statement : The import statement is used to load
Compiler/Interpreter They both are used for translating
pre- stored instructions into the memory. These instructions
HLL into machine language. Compiler does it at once while
help in executing various instructions, commands and
interpreter does it line by line.
statements given in the program.
Java Virtual Machine is a java interpreter which translates
Example import java.io.*; : It means loading input/output
byte code for specific platforms. instructions used in the program.
Characteristics of java. Expression in java is any valid combination of operators,
1.Write once run anywhere 2.light weight code 3 security constants and variables. It can be pure or mixed. In pure all
4 .built in graphics 5. object oriented language 6.supports the operands are of same data type in mixed they are of
multimedia 7.platform independent 8.open product mixed data type.
Java Character set character set is a set valid characters Type conversion the process of converting one predefined
that a language can recognize(i.e letters, digit,sign etc) type into another is called type conversion.
Unicode java uses Unicode character set. Unicode is a 2 Implicit(coercion) type conversion is performed by java
byte character code set which represents almost all compiler where smaller data type are promoted into higher
characters first 128 are identical two ASCII code. data types.
You refer to a particular Unicode by using \u followed by 4 Explicit type conversion is performed by the user using
digit hexadecimal number type operator.
Tokens the smallest individual unit in a java program is known Block is a group of zero or more statements between
as token. which are keywords, identifiers, literals, balanced braces also known as compound statement.
punctuators, operators. To declare variable that are members of a class the
Keywords are the words that convey a special meaning to declaration must be within the class body.
the language compiler (if , for etc.) Class variable(static) a data member that is declared once
Identifiers are the name given to different parts of program for a class. All objects of the class type share these data
e.g. variables ,objects, class, arrays, function. members as there is single copy them available in memory.
Literals are constant i.e. data item that are fixed values i.e. Instance variable a data member that is created for every
integer, Boolean, character, null, floating, string. object of the class if there are ten objects of a class type
Punctuators separators e.g. () , [], {} there would be 10 copies of instance variable one each for
Operators = ,>, <, = =, : etc. an object.

LUCKNOW PUBLIC SCHOOL/COLLEGE 1


new is used to create an object of a class and associate the returning the values to the place from where the function is
object with a variable that names it. called return statement is used. return statement also
Dynamic Initialization:- When a variable is initialized causes the immediate exit from the called function.
through a valid expression than it is known as dynamic Signature refers to the number and type of arguments
initialization e.g int c= a*b*c+4*5; mentioned in function prototype.
rvalue(realvalue) and lvalue(location value) This Keyword :The this keyword has the access of the
rvalue :- the value stored in variable member functions of every object, which points to the
lvalue :- the memory address where the value is stored object itself. The significance of the keyword is :
eg int a=5; ⚫ The this keyword represents an object that calls/
in the example 5 is the rvalue where as memory address of invokes the member of class. It stores the address of
a will be lvalue the object used for invoking a member of class.
label :labels are typically used on blocks and loops. Labeled ⚫ The this keyword can return the object/ address of which
blocks are useful with break and continue eg: label name : the function belongs to.OR It refers to the current object
statements of the class.
Type Promotion conversions of all operands upto the type Actual parameters are the parameters appearing in function
of the largest operand( implicit type conversion) call statement.
Escape sequence or non graphic characters are those Formal parameters are the parameters appearing in
characters which can’t be typed from keyboard. Which is function prototype.
represented by \ followed by one or more characters We have to always keep in mind that the number, type and
Operator precedence :- determines the order in which sequence of actual parameters should be equal to the formal
expression are evaluated. parameters.
Operator associatively : Associatively rules determine the Function calling in java all functions can be called in two
grouping of operands and operators in an expression with ways.
more than one operator of the same precedence. Call by value or call by reference
FUNCTIONS when we are passing primitive type of values then it is
Functions or methods are the set of instructions to perform call by value. In this the duplicate copy of original values
a particular task or process. They are also known as sub are passed.
program or subroutine or member methods. They represents when we are passing reference types(array, objects)then
the behavior of objects. it is call by reference. In this instead of passing values the
Why Functions memory address(reference) of values is passed.
1.Reduces complexity of the program. During call by value any change in the formal parameters
2.Makes the reuse of process or task possible. is not reflected back to actual parameters but in call by
3. helps in data hiding. reference changes in formal parameter are reflected back
In java functions are basically of two types to actual parameters.
inbuilt functions and user defined functions. Pure function are those that do not change the state of
inbuilt functions i.e. the functions which are by default their parameters.
present with java language. public static boolean after (Time time1,double secs)
user defined functions i.e the function defined by user {
according to his need. if(time1.hour>time2.hour)
// further we discuss user defined functions return true;
Syntax for declaring the function. }
Access_Specifier Modifier Return _Type Function Name Impure function(modifier) are those that change/modify
( Arguments) the state of their parameters are also known as mutator
{ function.
//definition of the function public static void after (Time time1,double secs)
// or {
// set of instructions to be performed when function is called. time.second +=secs;
} if(time.second>=60.0)
The first line of function is known as function prototype. {
Access specifier is used to set the accessibility of the time.second-=60.0;
function i.e. to set whether the function can be accessible time.minute+=1;
outside that class or not. It can be public or private or }
protected or no access specifier can be given then it is }
treated as friendly which is not a key word. Function overloading if there are more then one function
Modifier :- static is used as modifier if function is not or method by same name (in the same scope) that are
declared as of static type then we can call that function differentiated by their signature is called an overloaded
with the help of object of that class type with in which it is function. This process is called function overloading(it
declared and we can also use instance variables( global implements polymorphism).
variables ) inside that function. But if function is declared Example
as of static type then we can call that function with the // aprogram to find area of circle, square ,rectangle.
help of its class name NOT with the help of objects and we import java.io.*;
CANNOT use instance variables( global variables ) inside class overloading
that function. We can use only those global variables which {
are declared as of static type. public static void main( String args[])throws Exception
GLOBAL VARIABLES : are the variables which are {
declared inside the body of class. BufferedReader d = new BufferedReader(new
RETURN TYPE state that after processing function is InputStreamReader(System.in));
going to return which type of value. It can be any valid java System.out.println(“enter side of square”);
data type(i.e. primitive or reference). A function at a time int side=Integer.parseInt(d.readLine());
can return only one value. If function is not going to return System.out.println(“enter length of rectangle”);
any value then return type should be of void type. For int len=Integer.parseInt(d.readLine());

LUCKNOW PUBLIC SCHOOL/COLLEGE 2


System.out.println(“enter breadth of rectangle”); Using Library Classes
int br=Integer.parseInt(d.readLine()); Input/Output Streams
System.out.println(“enter radius of circle”); Input(means reading)(ex. keyboard, mouse, file, audio)
double r=Double.parseDouble(d.readLine()); Output(means writing)(ex. screen, printer, speaker)
area(side); // function calling System.in(the input stream)is connected to keyboard stores
area( len , br); // function calling information about connection between input device and
area( r ); // function calling computer or program.
}// end of main System.out & System.err(the output stream) is connected
public static void area(int t) //function prototype to monitor.
{ Byte oriented we can read data of any type data type with
int area = t*t; them as bytes are read. These streams are known as data
System.out.println(“area of a square = “+area); streams (e.g. DataInputStream and DataOutputStream)
}// end of function area Character oriented only characters are read through these
public static void area(int l, int b) //function prototype types of streams. The streams are known as Reader and
{ Writer Streams.(e. g. InputStreamReader and
int area = l*b; BufferedReader but these streams are exclusive oriented
System.out.println(“area of a rectangle = “+area); to Unicode)
}// end of function area InputStreamReader translates data bytes received from
public static void area(double ra) //function prototype InputStream objects into stream of character.
{ BufferedReader buffer(stores) the input received from an
double area = 3.14 *ra * ra; InputStreamReader .
System.out.println(“area of a circle = “+area); Exception handling
}// end of function area Exception: is an unexpected situation or in short an error
}// end of class overloading that is unexpected.
CONSTRUCTOR Exception handling is a transparent and nice way to handle
A member function with the same name as its class is called program errors.
constructor and it is used initialize the data members of that 1. Compile(syntax)time errors : Syntax errors or errors
class with legal initial value. found while compiling a program.
Data members are those variables which are declared inside 2. Run time error the errors that occur during runtime
the body of class. because of unexpected situations. Such errors are handled
Example through exception handling routines.
class cons eg. Of run time errors :- divide zero , index out of bounds
{ 3.Logical errors. Errors in the logic can be found by
int a,b; // data members of instance type viewing the output manually.
char ch; // data members of instance type 4. Way of handling anomalous (unexpected) situations in a
public cons() // non parameterized constructor program run is known as exception Handling.
{ // name of class and constructor are same There are five keywords which are used to handle
a=0; // constructor does not have any return type exceptions in java i.e.try, catch, throw, throws, finally.
b=0; //not even void type throw keyword forces an exception.
ch=’ ‘; throws it will automatically report it to error handler or
} processor.
} try is for enclosing the code where in exceptions can take
Non Parameterized constructor(default) if a class has place.
no defined constructor the compiler will supply a default catch traps the exception and handles it.
constructor it initializes the data members by any dummy finally keyword can be used to provide a block of code
value. that is always performed regardless of whether an exception
Parameterized constructor a constructor receiving is signaled or not.
arguments is known as parameterized constructor. It allow try
us to initialize the various data elements of different objects {
with different values when they are created. It also hides
}
the default constructor.
catch(exceptionname e1)
class cons
{ {
int a,b; // data members of instance type System.out.println(e1.getsMessage()+”———”);
char ch; // data members of instance type }
cons(int a1,int b1,char c) // parameterized constructor finally
{ // name of class and constructor are same {
a=a1; // constructor does not have any return type }
b=b1; //not even void type A catch block can accept one exception only. For multiple
ch=c; exception multiple catch blocks are to be written.
} 5. a. Difference between throw and throws is that a.
} throw cannot be given with function prototype but
Constructor overloading is also possible. throws can be.
Differences between method and constructors are as b. using throw it is possible for your program to throw
follows an exception explicitly but throws clause lists the
1. method has return types but constructor doesn’t have
types of exception that a method may throw.
any return type.
2. constructors have the same name as class has but STRING
methods can have different names String – String is a series of character which includes spaces
3. methods are called using class name and objects of that also. String is a class not a data type.
class but constructors are invoked automatically at The string object are immutable (unchangeable) but string
time of creation of object of that class type. buffer are mutable.

LUCKNOW PUBLIC SCHOOL/COLLEGE 3


STRING FUNCTIONS / METHODS OF JAVA • int lastIndexOf(char ch)
equals and compareTo :- equals and compareTo they both Usage-returns the index within the this string of the last
are used for comparing the strings equals compare only for occurrence of the specified character.
equality where as compareTo compares the string • stringreplace(string s1, string s2)
lexicographically(i.e the way in which words are stored in Usage-It replace string s1 with string s2.
dictionary). equals return boolean type of value where as PACKAGES
compareTo returns integer type of value. A package is a group of logically related classes
• length(); To help programmers be more productive java includes
Syntax- int length(); predefined classes in the form of packages as the part of
Usage- This function returns the length of characters installations these are called java class libraries.
present in the string. 1. java.lang(language) is automatically imported by
• charAt(); runtime system
Syntax- char charAt(int n); 2. java.util(utilities)e.g. date, calendar
Usage- This function returns nth character of the string. 3. java.io(input/output)
• toUpperCase(); 4. java.awt(graphics)
Syntax- String toUpperCase(); 5. java.applets(applets)
Usage- This function/method is to convert all the 6. java.net(network services)
character of the string into uppercase. package statement in a program creates a package and
• toLowerCase(); makes all following classes its part.
Syntax- String toLowerCase(); packages and their classes are imported(accessed) through
Usage- This function/method is to convert all the import statement in the program.
characters of the string into lowercase. Wrapper class
• replace(); Number of primitive data type = Number of wrapper class
Syntax- String replace(char ch1,char ch2); but starts with upper case character .(eg. Byte, Short,
ch1- character to be replaced. Integer, Long, Float, Double, Boolean, Character)
ch2- character by which to be replaced. Uses :
Usage- This function replaces all the occurrances of 1- Converting from character strings to numbers and
the character ch1 with ch2 in the string. then to other primitive data type.
• trim(); 2- A way to store primitive in an object.Wrapper class
Syntax- String trim(); More information about class
Usage- This function is used to remove all the white Composite data type
spaces at the beginning and end of the string . The data type that are based on fundamentals or primitive
• equals(); data types are known as composite data types. Since these
Syntax- boolean equals(String2); data types are created by users, these are also known as
Example-s1.equals(s2); user defined data types.
Usage- This function gives true if s1 equals to s2. Class is also composite type.
• concat(): A class containing main() method can not be termed as
Syntax- String concat(String2); user defined data type it is termed as application.
Example-s1.concat(String s2); To create a object.
Usage- This function concatenates s1 equal to s2 . Point point1 = new point()
• substring(); Classname objectname newoperator constructor
Syntax- String substring(int n); Point point1
Usage-This function returns substring starting from the Declaration do not create objects they are created using
nth character of the string. new operator.
• substring();[another format] The dot operator is used to refer to members of an
Syntax- String substring(m,n); object(e.g. object reference.membername)
Usage-This function returns substring starting from mth Temporary instance : A temporary instance is the one that
character upto the nth character without including the lives in the memory as long as it is being used or referenced
nth character. in an expression and after that it dies. The temporary
• indexOf(); instance is anonymous, that is they do not bear a name.
Syntax for string- int indexof(String str); class sample
Syntax for character- int indexOf(char ch); {
Usage-This returns the position of the first occurrence sample(int a, int b)
of the character or string in the string. {
• indexOf()(another format) i=a;
Syntax- int indexOf(String str, int start index) j=b;
• int indexOf(char ch , int start index) }
Example- int indexOf(“the”,n); public void print()
• int indexOf(‘y’,n); {
This format gives the position of “the” and ‘y’ starting System.out.pritnln( i+ “ “+j);
from the nth position in String. }
• compareTo(); public void main(String args[])
Syntax- int compareTo(string str); {
Example-s.compareTo(s1); sample obj=new sample(2,5);//an object obj is created
Usage-This function returns negative if s is less than obj.print();// data values of print
s1,positive if s is greater than s1 and zero if s is equal new sample(9,12).print();// data value of temporary instance.
to s1. This compares two string lexicographically. }
• boolean endsWith(String str) }
Usage- Tests if the this string (current String In the above example sample(9,12) is an anonymous
object)ends with the specified suffix (str). temporary instance and lives in the memory as long as the

LUCKNOW PUBLIC SCHOOL/COLLEGE 4


statement sample(9,12).print() is executing. The compiler default : statement(s); //control will be
deletes it after use.
Access specifiers //transferred to the
public members are accessible everywhere in the program. //statement(s) given after
private members are accessible only inside their own class. } default statement
protected members are accessible inside their own class, if the control flows to the next case below the matching
sub class and package. case in the absence of break is known as FALL
The default(friendly or package) members are accessible THROUGH
inside their class as well to the classes in the same package. Values given with each case should be unique i.e. no
The default access specifier is friendly which is not a matching values can be given with case
keyword. dangling else :- when the number of ifs are more then
An abstract class is the one whose objects cannot be the number of else then it is known as dangling else.
created however other class can inherit from it. Example :-
dot (.) the dot(.) accesses instance member of an object or if(a>b) // in this example there is a
class members of a class. if(a>c) //confusion that given
DECISION MAKING STATEMENTS System.out.println(a); // else is related with which if
1. Sequential construct :- generally the program is executed else
sequentially i.e. line by line from top to bottom System.out.println(b);
2. Selection construct :- means the user wants to execute To over come this problem {} curly braces are used.
a statement or statements based a particular condition. If if(a>b)
true then a particular statement(s) and if false then a other {
set of statement(s). For doing so in java if-else and switch if(a>c)
statements are used. System.out.println(a);
3. Iteration construct :- means the user wants to repeat a }
set of statement(s) or process again and again depending else
upon a particular condition. In java for forming iteration System.out.println(b);
construct for , while and do- while statements are used. differences between if-else and switch case is
if-else statement :- the if – else statement tests an a. using if else we can compare more then one values but
expression and returns boolean type of value i.e. true or using switch case we can test only for one value.
false b. using switch case we can test only for equality but using
if true then the statement(s) given after if statement are if else we can test for >, <, or equality.
executed and if false statement(s) given after else statement c. in switch case only integer and char type values are
are executed. used. But in if else all data type values can be used.
Syntax : d. A switch statement is usually more efficient than a set
if(condition) of nested ifs.
{ both if and switch can be used in nested forms.
// statement(s) to be executed if condition is true ITERATION THROUGH LOOPS
} Loops are used for repeating a statement or set of statements
else or a process again and again. For forming a loops three
{ steps are
// statement(s) to be executed if condition is false 1. Initialization
} 2. Test Condition
? : (ternary operator):- it can be used instead of 3. Updation(increment or decrement)
if – else statement In java for formaing loops three statements are used they
Syntax are
(condition)?statement(s):statement(s) 1. for loop 2. while loop 3. do-while loop
example 1. for loop : generally for statement is used when the
if(a>b) using ternary operator number of iterations are known or fixed.
c=a; c=(a>b)?a:b; Syntax
else // if condition is true then statement after ? for(initialization; test condition; updation)
c=b; will be executed if false statement given {
after : (colon)sign will be executed //loop body
switch statement : it is a multiple-branch selection }
statement. This selection statement successively tests the in the syntax of for statement all the three steps are optional
value of a variable against a list integer or character but semicolon signs are must.
constants. example.
Syntax : 1. for(;;)// Example of infinite loop
switch(variable) // value of variable is to matched with 2. int i=0
{ //constant given with case statement and for(;i<10;)
when match is found statements given 3. for(i=0;i<10;)
case constant : statement(s) // after that case are {
break; // executed, then control i++;
case constant : statement(s) // is transferred outside }
break; // switch block using More then one initialization and updation can be done in
case constant : statement(s) // break statement. If no one for statement separated by comma (,) sign.
break; //match is found then the Example : for(i=0,s=0;i<10;i++,s++)

LUCKNOW PUBLIC SCHOOL/COLLEGE 5


2. while and do-while loop : are used when number of can say return statement is used to make the immediate
iterations are unknown. exit from the function within which it is used.
Syntax 4. Nested Loops : when there are loops inside loop then
a. initialization b. initialization they are said to be nested loop.
while(test condition) do Differences and similarities in loop statements:-
{ { 1. for, do – while and while they all are used for forming
loop body loop body loops.
updation updation 2. They both are entry control loops where as do – while is
} }while(test condition); a exit control loop.
Some examples of loop variations 3. In while loop if the test condition is false it will not be
executed at least once but in do while even if the
a. Infinite loop : the loop which never ends is known as
condition is false it will be executed at least once.
infinite loop.
ARRAY
Example
An array is a collection of variables of the same type that
1. for(;;)//steps are not given
are referenced by a common name.
{ loop body 1. Types:- one dimensional, two dimensional.
} 2. Declaration
2. for(int i=0;;i++)//test condition is not given An array is declared by specifying its base type, name and
{ loop body size.
} int a[]=new int[10]; or int []a = new int[10];// single dimension
3. for(int i=0;i<10;)//updation not given int a[][] = new int[4][4] or
{ loop body int [][]a= new int[4][4] // double dimension
} Total bytes in single dimension = size of type * size of
4. int i=0; 5. while(true) arrayTotal bytes in double dimension =no.of rows*no.of
while(i<10) { columns*size of base type.
{ loop body 3. Searching
loop body } In linear search each element of the array is compared
} with the given item to be searched for one by one.
time delay loop :- if a loop does not contain any statement Binary search searches for the given item in sorted array.
in the loop body it is said to be empty loop they are used as The search segment reduces to half at every successive
time delay loop in the program stage. Binary search can work only on sorted array and
examples ; takes less time in searching by dividing the array in two
1. for(i=0;i<10000;i++) 2. int i=0; parts where as linear searching works on sorted as well as
{ while(i<10000) unsorted array and takes more time.
} { 4. Sorting
or i++; Sorting of an array means arranging the array elements in
for(i=0;i<10000;i++); } a specified order.
In selection sort the smallest(or largest depending on the
desired order) key from the remaining unsorted array is
Jump Statements :-these statements are used for
searched for and put in the sorted array. This process repeats
transferring the control of program from one part of the
until the entire array is sorted.
program to another part of the program. The jump statements In bubble sort the adjoining values are compared and
used in JAVA are 1. break 2. continue 3 return . exchanged if they are not in proper order. This process is
Where as a library function System.exit() is used to jump repeated until the entire array is sorted.
out from program 5. Array advantages and disadvantages
1. break statement is used with blocks(eg. switch case) Advantages :-
or loops to jump out from loop or block to the statement a. easy to specify :- declaration, allocation and initialization
given just after that block or loop. can be done in one line.
Example : b. free from run time overheads memory allocation one time
for(i=0;i<10;i++) c. random access of elements.
{ d. free sequential access it is faster.
if(i==5) Disadvantages
break; a. need to know size
System.out.print(i); b. careful design required.
} 6. Aliasing :- In call by reference when we pass the
statement 1. reference (address) into another variable then another name
2. where as continue statement is used to transfer the is given to the same memory location that is known as
control to the next iteration aliasing.
Example :- 7. new keyword :- the new operator is used o create an
for(i=0;i<10;i++) object of a class and associate the object with a variable
{ that names it. It can be used to create a new object or
if(i==5) new array.
continue; 8. Difference between reference and primitive type:-
System.out.print(i); In reference type all the operations are based on address
where as in primitive type all the operations are based on
}
values. Reference type are user defined and are formed
3. return statement is used to return a value from the
using primitive type where as primitive type are inbuilt type
function to the function from where that is called or you
LUCKNOW PUBLIC SCHOOL/COLLEGE 6

You might also like